Golang囊地鼠gopher

在这里插入图片描述

开发知识点-golang

  • 介绍
  • 红队专题-Golang工具Fscan
  • 简介
    • 主要功能
  • ubuntu 安装
  • windows 安装
  • 常用命令:
  • 项目框架
    • 源文件
    • common目录
    • Plugins目录
    • Webscan目录
  • 入口点
  • 插件扫描类型
  • 爆破插件
    • common.Scantype
  • Webtitle函数
  • webpoc扫描
    • POC 执行
    • CEL-GO 实践
      • CEL
    • 指纹识别
  • 免杀
    • 源码特征
  • 参考链接
  • 红队专题-Golang工具ChYing
  • 原chying工具代码分析
    • 并发访问控制
      • 并发 原子 写入
      • 读取
    • 通道
    • 嵌套映射结构
    • 初始化
    • 启动代理服务器
    • 重启代理服务器
  • vite 构建前端页面
  • 编译
  • 标准库
    • bytes
    • fmt
    • io
    • ioioutil
    • os
    • osexec
    • path
    • sync
  • 第三方包
  • gui
  • init
  • **Go工作目录及包创建**
  • 初始化
  • **Go环境变量配置**
        • 方法1、
  • 代码混淆
  • 编译混淆
  • honnef.co/go/tools/cmd/staticcheck
  • WailsJS
  • 新建 helloword
  • 类型
    • 基本类型
    • 变量(variable)
      • 命名
        • 空标识符
      • 定义
        • 简短模式(short variable declaration)
      • 多变量赋值
      • 未使用错误
    • 常量
  • 枚举
  • 关键字
    • var
  • 环境搭建
    • win10配置go环境
  • ubuntu20.04安装golang
  • 介绍
  • 下载 Go 压缩包
  • 调整环境变量
  • 验证 Go 安装过程

libp2p/go-libp2p: libp2p implementation in Go (github.com)
go-libp2p,它提供了 DHT(IPFS 使用的 Kademlia DHT)和 QUIC 支持。

介绍

Go,通常被称为 golang
一门由 Google 创建的现代化的开源编程语言,
它允许你构建实时并且高效的应用。

很多流行的应用程序,
例如 Kubernetes,Docker,Prometheus 和 Terraform,
都是使用 Go 来编写的。

下载 Go 压缩包
Go 1.14.2
https://golang.google.cn/doc/install
​ ​https://golang.org/dl/​​

以 root 或者其他 sudo 用户身份运行下面的命令,
下载并且解压 Go 二进制文件到/usr/local目录

调整环境变量
通过将 Go 目录添加到$PATH环境变量,
系统将会知道在哪里可以找到 Go 可执行文件。

这个可以通过添加到/etc/profile文件(系统范围内安装)
或者$HOME/.profile文件(当前用户安装):

登录后复制

export PATH=$PATH:/usr/local/go/bin
1.
保存文件,并且重新加载新的PATH 环境变量到当前的 shell 会话:

登录后复制

source ~/.profile
1.
验证 Go 安装过程
通过打印 Go 版本号,验证安装过程。

登录后复制

go version
1.
复制
输出应该像下面这样:

go version go1.14.2 linux/amd6

go.sum
记录项目依赖的确切版本,以确保在不同环境中能够复现相同的构建结果。

go.mod

go.uber.org/fx

用于Go语言的依赖注入(Dependency Injection)库。
帮助开发者从应用程序中删除全局状态,不再使用init()函数或全局变量,而是使用fx管理的单例。此外,fx允许组织内的团队构建松散耦合且良好集成的可共享组件,是Uber公司几乎所有Go服务的支柱。
goimports
go get github.com/spf13/cobra用于创建命令行工具的库(框架),可以创建出类似git或者go一样的工具,进行我们平时熟悉的git clone/pull、go get/install等操作。kubernetes工具中就使用了cobra。上述这些命令行工具的--help/-h既好看又好理解,开始时我也会好奇这些工具是如何实现多级子命令支持的?cobra的目标即是提供快速构建出此类工具的能力(cobra是框架,具体的业务逻辑当然还是要自己写)。例如可以为我们app或系统工具的bin文件添加--config来启动服务、添加--version来查看版本号等等。相比起标准库里的flag包,cobra强大了很多。官网列出了cobra的一大堆优点:1. 易用的subcommand模式(即嵌套命令或子命令)2. 强大的flags支持(参考标准库flagSet)3. 支持global、local、cascading级别的flag设置4. 错误时的智能提示5. 自动生成的、美观的help信息,并默认支持--help和-h打印help信息6. 提供命令自动补全功能(bash, zsh, fish, powershell环境)7. 提供命令man page自动生成功能

golang.org/x/crypto/openpgp/armor

 Go 语言的一个扩展库,属于 `golang.org/x/crypto` 项目,专门用于处理 OpenPGP 消息的 ASCII 装甲(Armor)编码和解码。OpenPGP 是一种基于 PGP(Pretty Good Privacy)的加密和签名数据的标准,它广泛应用于电子邮件和文件的加密传输中。ASCII 装甲是一种文本编码方式,它可以将二进制数据编码为只包含 ASCII 字符的文本,这样数据就可以通过电子邮件、文本文件等方式安全地传输,而不会被邮件系统或文件存储系统错误地处理或损坏。

golang.org/x/crypto/openpgp/packet

专门用于处理 OpenPGP 消息中的各个包(packet)的解析和构造。OpenPGP 是一种基于 PGP(Pretty Good Privacy)的加密和签名数据的标准,它定义了如何在电子邮件和其他通信中安全地传输加密、签名和密钥交换数据。在 OpenPGP 消息中,数据被组织成一系列的包(packet),每个包都包含了一定类型的信息,如公钥、私钥、加密数据、签名等。`packet` 包提供了对这些包进行解析和构造的功能。

github.com/sirupsen/logrus


Go 语言的日志库它提供了丰富的日志输出和格式化功能,被广泛应用于 Go 语言项目中,用于记录程序的运行状态、错误信息和调试信息等

github.com/ulikunitz/xz

Go 语言的库,它提供了对 XZ 压缩格式的支持。XZ 是一种高效的压缩格式,它基于 LZMA2 压缩算法,通常比传统的 gzip 或 zip 格式提供更好的压缩率。这个库允许 Go 开发者在他们的项目中读取和写入 XZ 压缩的文件。

golang.zx2c4.com/wireguard/wgctrl/wgtypes


Go 语言中用于处理 WireGuard 配置和状态信息的包的一部分,它位于 WireGuard 的 Go 控制接口(wgctrl)库中。WireGuard 是一种新型的网络协议和工具,旨在提供一种快速、简单、安全的方式来加密网络流量。`wgtypes` 包主要定义了一系列与 WireGuard 配置相关的数据类型和常量,如网络接口配置(如 IP 地址、密钥等)、设备状态等。这些类型通常用于在应用程序和 WireGuard 控制接口之间进行数据交换。

golang.org/x/crypto/acme/autocert

Go 语言的一个库,它实现了自动证书管理环境(ACME)协议的客户端,用于自动获取和管理 Let's Encrypt 或其他支持 ACME 协议的证书颁发机构(CA)的 TLS 证书。这个库特别适用于需要自动续期证书并希望简化证书管理过程的 web 服务器和应用程序。
go mod init hello-worldpackage mainimport "fmt"func main() {fmt.Println("Hello, World!")
}
go复制代码package main import (	"crypto/aes"	"crypto/cipher"	"crypto/rand"	"encoding/base64"	"encoding/json"	"fmt"	"io") // 定义指令结构type Instruction struct {	Type    string `json:"type"`	Action  string `json:"action"`	Params  map[string]interface{} `json:"params"`	Signature string `json:"signature"` // 用于身份验证的签名} // 加密函数func encrypt(plaintext, key []byte) (string, error) {	block, err := aes.NewCipher(key)	if err != nil {		return "", err	} 	ciphertext := make([]byte, aes.BlockSize+len(plaintext)-aes.BlockSize%len(plaintext))	iv := ciphertext[:aes.BlockSize]	if _, err := io.ReadFull(rand.Reader, iv); err != nil {		return "", err	} 	stream := cipher.NewCFBEncrypter(block, iv)	stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) 	return base64.StdEncoding.EncodeToString(ciphertext), nil} // 解密函数func decrypt(ciphertext string, key []byte) (string, error) {	encodedText, err := base64.StdEncoding.DecodeString(ciphertext)	if err != nil {		return "", err	} 	block, err := aes.NewCipher(key)	if err != nil {		return "", err	} 	iv := encodedText[:aes.BlockSize]	encodedText = encodedText[aes.BlockSize:] 	stream := cipher.NewCFBDecrypter(block, iv)	stream.XORKeyStream(encodedText, encodedText) 	return string(encodedText), nil}
  1. 节点激活机制

每个节点需要监听网络上的指令,验证指令格式和密钥,并在验证通过后激活为master节点。

go复制代码// 示例:节点监听和处理指令func listenForInstructions(listener net.Listener, secretKey []byte) {	for {		conn, err := listener.Accept()		if err != nil {			log.Println("Error accepting connection:", err)			continue		} 		go handleConnection(conn, secretKey)	}} func handleConnection(conn net.Conn, secretKey []byte) {	defer conn.Close()	buf := make([]byte, 1024)	n, err := conn.Read(buf)	if err != nil {		log.Println("Error reading from connection:", err)		return	} 	encryptedInstruction := string(buf[:n])	plaintextInstruction, err := decrypt(encryptedInstruction, secretKey)	if err != nil {		log.Println("Error decrypting instruction:", err)		return	} 	var instruction Instruction	err = json.Unmarshal([]byte(plaintextInstruction), &instruction)	if err != nil {		log.Println("Error parsing instruction:", err)		return	} 	// 验证签名(这里省略了具体实现)	if !verifySignature(instruction.Signature, instruction) {		log.Println("Invalid signature")		return	} 	// 激活为master节点(这里可以添加更多的逻辑)	activateAsMaster(instruction)} func activateAsMaster(instruction Instruction) {	fmt.Println("Activated as master with instruction:", instruction)	// 在这里实现master节点的逻辑} // 示例签名验证函数(需要具体实现)func verifySignature(signature string, instruction Instruction) bool {	// 实现签名验证逻辑	return true}
  1. Master节点权限

Master节点应该有一个时间限制,并且在权限过期后自动撤销。可以使用一个goroutine来监控master节点的状态。

go复制代码var masterActive boolvar masterExpireTime time.Timevar masterMutex sync.Mutex func activateAsMasterWithExpiry(instruction Instruction, duration time.Duration) {	masterMutex.Lock()	defer masterMutex.Unlock() 	masterActive = true	masterExpireTime = time.Now().Add(duration)	go monitorMasterStatus() 	// 在这里实现master节点的逻辑} func monitorMasterStatus() {	for {		masterMutex.Lock()		if !masterActive || time.Now().After(masterExpireTime) {			masterActive = false			fmt.Println("Master status expired or revoked")			masterMutex.Unlock()			break		}		masterMutex.Unlock()		time.Sleep(1 * time.Second)	}}
go复制代码package main import (	"crypto/hmac"	"crypto/sha256"	"encoding/hex"	"encoding/json"	"fmt"	"io/ioutil"	"log"	"net"	"net/http"	"sync"	"time") const (	secretKey = "your-secret-key" // 用于HMAC的秘密密钥	listenAddr = ":8080"          // 节点监听的地址) type DHT struct {	store  map[string]string	mu     sync.Mutex	master bool	timer  *time.Timer} type Command struct {	Type    string      `json:"type"`	Action  string      `json:"action"`	Key     string      `json:"key"`	Value   string      `json:"value,omitempty"`	Signature string    `json:"signature"`} func NewDHT() *DHT {	return &DHT{		store: make(map[string]string),	}} func (dht *DHT) Start() {	http.HandleFunc("/command", dht.handleCommand)	log.Println("DHT node is listening on", listenAddr)	log.Fatal(http.ListenAndServe(listenAddr, nil))} func (dht *DHT) handleCommand(w http.ResponseWriter, r *http.Request) {	body, err := ioutil.ReadAll(r.Body)	if err != nil {		http.Error(w, "Failed to read request body", http.StatusBadRequest)		return	}	defer r.Body.Close() 	var cmd Command	if err := json.Unmarshal(body, &cmd); err != nil {		http.Error(w, "Invalid JSON format", http.StatusBadRequest)		return	} 	if !dht.verifySignature(cmd) {		http.Error(w, "Invalid signature", http.StatusForbidden)		return	} 	if cmd.Type == "activate" && cmd.Action == "master" {		dht.activateAsMaster()		fmt.Fprintln(w, "Activated as master")		return	} 	if !dht.master {		http.Error(w, "Only master can execute commands", http.StatusForbidden)		return	} 	switch cmd.Action {	case "put":		dht.put(cmd.Key, cmd.Value)	case "get":		dht.get(w, cmd.Key)	case "delete":		dht.delete(cmd.Key)	default:		http.Error(w, "Unknown action", http.StatusBadRequest)	}} func (dht *DHT) verifySignature(cmd Command) bool {	message := fmt.Sprintf("%s:%s:%s", cmd.Type, cmd.Action, cmd.Key)	if cmd.Value != "" {		message += ":" + cmd.Value	}	h := hmac.New(sha256.New, []byte(secretKey))	h.Write([]byte(message))	expectedSignature := hex.EncodeToString(h.Sum(nil))	return hmac.Equal([]byte(expectedSignature), []byte(cmd.Signature))} func (dht *DHT) activateAsMaster() {	dht.mu.Lock()	defer dht.mu.Unlock()	dht.master = true	dht.timer = time.AfterFunc(10*time.Second, func() {		dht.mu.Lock()		defer dht.mu.Unlock()		dht.master = false		log.Println("Master privileges revoked")	})	log.Println("Activated as master for 10 seconds")} func (dht *DHT) put(key, value string) {	dht.mu.Lock()	defer dht.mu.Unlock()	dht.store[key] = value	log.Printf("Put key %s with value %s\n", key, value)} func (dht *DHT) get(w http.ResponseWriter, key string) {	dht.mu.Lock()	defer dht.mu.Unlock()	value, exists := dht.store[key]	if !exists {		http.Error(w, "Key not found", http.StatusNotFound)		return	}	fmt.Fprintln(w, value)} func (dht *DHT) delete(key string) {	dht.mu.Lock()	defer dht.mu.Unlock()	delete(dht.store, key)	log.Printf("Deleted key %s\n", key)} func main() {	dht := NewDHT()	dht.Start()}
go复制代码package main import (	"crypto/hmac"	"crypto/sha256"	"encoding/hex"	"encoding/json"	"fmt"	"io/ioutil"	"log"	"net"	"net/http"	"os"	"strconv"	"sync"	"time" 	"crypto/tls"	"crypto/x509") const (	networkPort       = "8080"	masterActivationKey = "supersecretkey" // Replace with a real secret key	masterDuration    = 10 * time.Second    // Master node duration) type Instruction struct {	Type    string      `json:"type"`	Params  interface{} `json:"params,omitempty"`	Timestamp int64     `json:"timestamp"`	HMAC      string    `json:"hmac"`} type Node struct {	id          string	isMaster    bool	masterTimer *time.Timer	mu          sync.Mutex} func (n *Node) ListenAndServe() {	http.HandleFunc("/receive", n.handleReceive)	server := &http.Server{		Addr: ":" + networkPort,		TLSConfig: &tls.Config{			MinVersion: tls.VersionTLS12,			ClientCAs:  x509.NewCertPool(), // Load client certificates here			ClientAuth: tls.RequireAndVerifyClientCert,		},	} 	// Load server certificates	cert, err := tls.LoadX509KeyPair("server.crt", "server.key")	if err != nil {		log.Fatalf("failed to load server certificates: %v", err)	}	server.TLSConfig.Certificates = []tls.Certificate{cert} 	log.Printf("Node %s listening on port %s...", n.id, networkPort)	err = server.ListenAndServeTLS("", "") // "" means use the TLSConfig to set certificates	if err != nil {		log.Fatalf("failed to start server: %v", err)	}} func (n *Node) handleReceive(w http.ResponseWriter, r *http.Request) {	if r.Method != http.MethodPost {		http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)		return	} 	body, err := ioutil.ReadAll(r.Body)	if err != nil {		http.Error(w, "Failed to read request body", http.StatusBadRequest)		return	}	defer r.Body.Close() 	var instr Instruction	err = json.Unmarshal(body, &instr)	if err != nil {		http.Error(w, "Failed to unmarshal instruction", http.StatusBadRequest)		return	} 	if !n.verifyInstruction(instr) {		http.Error(w, "Invalid instruction signature", http.StatusForbidden)		return	} 	if instr.Type == "activate_master" {		n.activateAsMaster()		w.WriteHeader(http.StatusOK)		w.Write([]byte("Node activated as master"))		return	} 	if n.isMaster {		// Handle master-only operations here		n.logOperation(instr)		w.WriteHeader(http.StatusOK)		w.Write([]byte("Operation performed by master"))		return	} 	w.WriteHeader(http.StatusOK)	w.Write([]byte("Operation performed by regular node"))} func (n *Node) verifyInstruction(instr Instruction) bool {	timestampStr := strconv.FormatInt(instr.Timestamp, 10)	data := []byte(fmt.Sprintf("%s%s%s", instr.Type, timestampStr, fmt.Sprintf("%v", instr.Params)))	mac := hmac.New(sha256.New, []byte(masterActivationKey))	mac.Write(data)	expectedMAC := mac.Sum(nil) 	return hex.EncodeToString(expectedMAC) == instr.HMAC} func (n *Node) activateAsMaster() {	n.mu.Lock()	defer n.mu.Unlock() 	if n.isMaster {		return	} 	n.isMaster = true	n.masterTimer = time.AfterFunc(masterDuration, n.deactivateAsMaster)	log.Printf("Node %s activated as master for %v", n.id, masterDuration)} func (n *Node) deactivateAsMaster() {	n.mu.Lock()	defer n.mu.Unlock() 	if !n.isMaster {		return	} 	n.isMaster = false	log.Printf("Node %s deactivated as master", n.id)} func (n *Node) logOperation(instr Instruction) {	// Simple logging to stdout for demonstration	log.Printf("Master node %s performed operation: %v", n.id, instr)	// In a real-world application, log to a file or centralized logging service} func main() {	nodeID := "node1" // For demonstration, use a static ID	node := &Node{id: nodeID} 	// Ensure server certificates and keys are generated and available	if _, err := os.Stat("server.crt"); os.IsNotExist(err) {		log.Fatalf("server certificate not found: %v", err)	}	if _, err := os.Stat("server.key"); os.IsNotExist(err) {		log.Fatalf("server key not found: %v", err)	} 	node.ListenAndServe()}

“github.com/multiformats/go-multiaddr”
实现了多地址(Multiaddr)的编码、解码和解析功能。多地址是一种网络地址格式,旨在以一种统一和可扩展的方式表示各种网络协议和地址信息。这种格式被广泛应用于点对点(P2P)网络、区块链和其他分布式系统中。

#1. 设置DHT网络

使用现有的DHT库(如go-libp2p-dht)来设置DHT网络。

go复制代码import (    "github.com/libp2p/go-libp2p-dht"    // 其他必要的库) func setupDHT() (*dht.Dht, error) {    // 初始化DHT网络    // ...    return dhtInstance, nil}

TokTok/go-toxcore
为用户提供易于获取的安全和隐私保护的点对点(无服务器)即时通讯工具。它使用 libsodium(基于 NaCl)进行加密和身份验证。

go get github.com/quic-go/quic-go

Go语言编写的开源库,它实现了QUIC(Quick UDP Internet Connections)协议。
QUIC是一种在UDP(用户数据报协议)上运行的传输层网络协议,旨在提供低延迟、多路复用和加密的数据传输。这个库使得开发者能够轻松地在自己的Go项目中集成QUIC协议,从而利用该协议的优势来提升应用的性能和安全性。

Golang使用Quic-Go开源库实现Quic客户端和服务端_golang quic-CSDN博客

func setupQUICServer(listener net.PacketConn, dht *dht.Dht) {    config := &quic.Config{        // 配置QUIC参数    }    listener.SetReadDeadline(time.Now().Add(10 * time.Second))    for {        sess, err := quic.Accept(listener, config, nil)        if err != nil {            // 处理错误            continue        }        go handleSession(sess, dht)    }}

#3. 处理QUIC会话

在QUIC会话中处理客户端指令。

go复制代码func handleSession(sess quic.Session, dht *dht.Dht) {    stream, err := sess.AcceptStream()    if err != nil {        // 处理错误        return    }    defer stream.Close()     buf := make([]byte, 1024)    n, err := stream.Read(buf)    if err != nil {        // 处理错误        return    }     // 解析指令    var instruction Instruction    err = json.Unmarshal(buf[:n], &instruction)    if err != nil {        // 处理错误        return    }     // 验证HMAC签名和TLS证书    if !verifyHMAC(instruction, secretKey) || !verifyTLSCertificate(sess) {        // 发送错误响应        return    }     // 激活为master节点(如果需要)    if instruction.Type == "ACTIVATE_MASTER" {        activateAsMaster(dht, sessionID)    }     // 处理其他指令    // ...}

#4. 激活为Master节点

设置定时器以限制master权限的持续时间。

go复制代码var masterTimer *time.Timer func activateAsMaster(dht *dht.Dht, sessionID string) {    if masterTimer != nil {        return // 已经有一个master节点在运行    }    masterTimer = time.NewTimer(masterDuration)    go func() {        <-masterTimer.C        deactivateMaster(sessionID)    }()    // 执行master节点的操作    // ...} func deactivateMaster(sessionID string) {    // 撤销master权限    // ...}

#5. 安全措施和日志记录

确保所有通信都经过加密,并记录所有操作。

go复制代码func verifyHMAC(instruction Instruction, secretKey []byte) bool {    // 计算并验证HMAC签名    // ...    return true // 或 false} func verifyTLSCertificate(sess quic.Session) bool {    // 验证TLS证书    // ...    return true // 或 false} func logOperation(operation string, params map[string]interface{}) {    // 记录操作日志    // ...}
package main import (    "crypto/hmac"    "crypto/sha256"    "crypto/tls"    "crypto/x509"    "encoding/hex"    "fmt"    "io/ioutil"    "log"    "net"    "net/http"    "strings"    "time") // LoadTLSConfig loads TLS configuration from certificate and key filesfunc LoadTLSConfig(certFile, keyFile string) (*tls.Config, error) {    cert, err := tls.LoadX509KeyPair(certFile, keyFile)    if err != nil {        return nil, err    }     caCert, err := ioutil.ReadFile("ca.crt")    if err != nil {        return nil, err    }     caCertPool := x509.NewCertPool()    caCertPool.AppendCertsFromPEM(caCert)     tlsConfig := &tls.Config{        Certificates: []tls.Certificate{cert},        RootCAs:      caCertPool,        ClientCAs:    caCertPool,        ClientAuth:   tls.RequireAndVerifyClientCert,        MinVersion:   tls.VersionTLS12,        CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},    }     return tlsConfig, nil} // GenerateHMAC generates HMAC using a secret key and a messagefunc GenerateHMAC(secret, message string) string {    h := hmac.New(sha256.New, []byte(secret))    h.Write([]byte(message))    return hex.EncodeToString(h.Sum(nil))} // VerifyHMAC verifies HMAC using a secret key, a message, and an HMAC valuefunc VerifyHMAC(secret, message, hmacValue string) bool {    expectedHMAC := GenerateHMAC(secret, message)    return hmacValue == expectedHMAC}

#2. DHT节点实现

这里我们简单实现一个DHT节点,使用内存存储哈希表。

type DHTNode struct {    ID          string    Store       map[string]string    Neighbors   []string    MasterKey   string    IsMaster    bool    Server      *http.Server    TLSConfig   *tls.Config} func NewDHTNode(id, certFile, keyFile, masterKey string) (*DHTNode, error) {    tlsConfig, err := LoadTLSConfig(certFile, keyFile)    if err != nil {        return nil, err    }     node := &DHTNode{        ID:          id,        Store:       make(map[string]string),        Neighbors:   []string{},        MasterKey:   masterKey,        IsMaster:    false,        TLSConfig:   tlsConfig,    }     mux := http.NewServeMux()    mux.HandleFunc("/put", node.handlePut)    mux.HandleFunc("/get", node.handleGet)    mux.HandleFunc("/activateMaster", node.handleActivateMaster)     server := &http.Server{        Addr:      ":8080",        Handler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速上手Spring注解、SpringAop

1 Spring 注解的使用 1 IOC 的概念 IOC&#xff08;Inversion of Control&#xff09;&#xff1a;控制反转。 使用对象时&#xff0c;由主动new产生对象转换为由外部提供对象&#xff0c;此过程中对象创建控制权由程序转移到外部&#xff0c;此思想称为控制反转。通俗的讲就…

数据地图怎么做?推荐这款数据可视化地图生成器

在数字化与信息化高速发展的今天&#xff0c;企业迎来了前所未有的发展机遇&#xff0c;规模迅速扩张&#xff0c;市场版图不断延伸。然而&#xff0c;伴随着这种快速的发展&#xff0c;一个不容忽视的问题逐渐浮出水面——如何精准高效地掌握分布在各地的分公司、业务点乃至整…

鸿蒙项目云捐助第九讲鸿蒙App应用的捐助详情页功能实现

鸿蒙项目云捐助第九讲鸿蒙App应用的捐助详情页功能实现 这里接下来继续实现捐助详情页的布局页面&#xff0c;也就是当用户进入到分类页面后&#xff0c;点击分类的每一个商品就进入到捐助商品的详情页&#xff0c;这里的布局可以从下面的模板演化而来。 下面根据这个模板来进…

【数学】矩阵的逆与伪逆 EEGLAB

文章目录 前言matlab代码作用EEGLAB 中的代码总结参考文献 前言 在 EEGLAB 的使用中&#xff0c;运行程序时出现了矩阵接近奇异值&#xff0c;或者缩放错误。结果可能不准确。RCOND 1.873732e-20 的 bug&#xff0c;调查 EEGLAB 后发现是 raw 数据的问题。 matlab代码 A_1 …

华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!

文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器&#xff08;父子单向通信&#xff09;1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器&#xff08;父子双向通信&#xff09;1. Link装饰器的特点3. Link使用示例 四…

Pytorch | 对比Pytorch中的十种优化器:基于CIFAR10上的ResNet分类器

Pytorch | 对比Pytorch中的十种优化器&#xff1a;基于CIFAR10上的ResNet分类器 CIFAR10数据集ResNet提出背景网络结构特点工作原理优势 代码实现分析utils.pymain.py导入必要的库设备选择与数据预处理定义加载训练集和测试集主函数部分训练部分测试部分 结果10种优化器对应的训…

Linux系统操作03|chmod、vim

上文&#xff1a; Linux系统操作02|基本命令-CSDN博客 目录 六、chmod&#xff1a;给文件设置权限 1、字母法 2、数字法&#xff08;用的最多&#xff09; 七、vim&#xff1a;代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…

徐州数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

#徐州数字孪生工业互联网#在当下智能制造的热潮之下&#xff0c;徐州作为中国制造业的重要基地&#xff0c;正积极拥抱数字化转型&#xff0c;通过数字孪生工业互联网可视化技术&#xff0c;赋能新型工业化智能制造工厂&#xff0c;引领制造业向更高效、更智能、更绿色的方向发…

C# 探险之旅:第二十四节 - 类型class基础,一场“类”似的奇妙冒险

嘿&#xff0c;勇敢的探险家们&#xff01;欢迎来到C#王国的“类”似奇妙冒险&#xff01;今天&#xff0c;我们要深入探索一个神秘而强大的领域——class&#xff08;类&#xff09;。想象一下&#xff0c;class就像C#世界里的一块魔法土地&#xff0c;每块土地上都能孕育出独…

(五)机器学习 - 数据分布

数据分布&#xff08;Data Distribution&#xff09;是指数据在不同值或值区间内的分布情况&#xff0c;它描述了数据点在整个数据集中是如何分散或集中的。数据分布可以通过多种方式来分析和表示&#xff0c;包括图形和数值方法。 常见的数据分布特征和描述数据分布的方法&…

基于stm32的红外测温系统设计(论文+源码)

1总体方案设计 本课题为基于STM32的红外测温系统设计&#xff0c;在此将系统架构设计如图3.1所示&#xff0c; 整个系统包括STM32F103单片机&#xff0c;红外测温模块MLX90614&#xff0c;显示模块OLED12864&#xff0c;蜂鸣器以及按键等构成&#xff0c;在功能上&#xff0c;…

排序算法(5):归并排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 归并排序 归并排序采用分治法&#xff0c;将序列分成若干子序列&#xff0c;每个子序列有序后再合并成有序的完整序列。 在数组排序中&#xff0c;如果只有一个数&#xff0c;那么它本身就是有序的。如果有两个数&#xff0…

JSSIP的使用及问题(webRTC,WebSockets)

简介 项目中有一个需要拨打电话的功能&#xff0c;要求实时的进行音频接听&#xff0c;并且可以在电话接听或者挂断等情况下做出相应的操作。jssip作为一个强大的实现实时通信的javascript库&#xff0c;这不门当户对了嘛。 jssip&#xff08;官网&#xff1a; JsSIP - the J…

DP3复现代码运行逻辑全流程(六)—— gen_demonstration_adroit.sh 演示生成与可视化

用于生成演示、培训和评估的脚本都在 Scripts/ 文件夹中 DP3 通过 gen_demonstration 生成演示&#xff0c;即训练数据&#xff0c;例如: bash scripts/gen_demonstration_adroit.sh hammer 这将在 Adroit 环境中生成锤子任务的演示。数据将自动保存在 3D-Diffusion-Policy/…

Python常用字符串排序●sorted()函数--一行语句简洁实现

在Python等编程中&#xff0c;时常会用到字符串排序。 今天在这里只讲讲最常用的Python字符串排序。 同时&#xff0c;只讲sorted()函数方法。 给定一个字符串列表&#xff1a; sl [共和国, 中国, 中华人民共和国, 大中华, 人民共和国]。 第一种排序方法是不使用任何参数…

知从科技总经理受邀参加上海临港新片区商会“湖畔TECS”技术分享沙龙(第五期)

11月26日&#xff0c;上海知从科技有限公司创始人陈荣波先生受邀出席临港新片区商会 “湖畔TECS”技术分享沙龙&#xff08;第五期&#xff09;活动&#xff0c;并在活动上为参会嘉宾们做了主题分享。本次活动由临港新片区商会主办&#xff0c;智能网联汽车创新联盟协办&#x…

【MySQL数据库】Ubuntu下的mysql

目录 1&#xff0c;安装mysql数据库 2&#xff0c;mysql默认安装路径 3&#xff0c;my.cnf配置文件 4&#xff0c;mysql运用的相关指令及说明 5&#xff0c;数据库、表的备份和恢复 mysql是一套给我们提供数据存取的&#xff0c;更加有利于管理数据的服务的网络程序。下面…

Docker与虚拟机:虚拟化技术的差异解析

在信息技术飞速发展的今天&#xff0c;虚拟化技术已成为现代IT架构不可或缺的一部分。而虚拟化从技术层面划分则分为以下几种&#xff1a; 完全虚拟化&#xff1a;虚拟机能够完全模拟底层硬件的特权指令的执行过程&#xff0c;客户操作系统无须进行修改。 硬件辅助虚拟化&#…

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级&#xff0c;我来复盘小林coding的计算机网络的知识点&#xff1a; TCP/IP 网络模型有哪几层? 问大家&#xff0c;为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信&#xff0c;有…

一次Mysql查询踩坑经历(查询索引失效问题)

1、之前的sql建表脚本 CREATE TABLE crm_driver (id bigint(22) NOT NULL AUTO_INCREMENT COMMENT 主键,clue_id bigint(20) NOT NULL COMMENT 线索表id,driver_name varchar(128) NOT NULL COMMENT 试驾人姓名,driver_phone varchar(32) NOT NULL COMMENT 试驾人手机号,drive…