-
sync/atomic是Go中用于无锁线程安全操作的基础工具,支持对int32、int64等基础类型的原子读写与CAS,需确保内存对齐、类型匹配,禁用结构体字段,推荐全局变量或指针声明,配合Load/Store/Add/Swap/CAS实现高效并发控制。
-
值类型传参时进行值拷贝,但非深拷贝;若含引用字段如slice、map,则共享底层数组。示例中Name、Age未变,Tags被修改因指向同一数据。大对象拷贝代价高,建议使用指针传参避免性能开销。
-
Go中动态创建slice需三步:先获取元素类型,再用reflect.SliceOf构造slice类型,最后用reflect.MakeSlice创建值;元素自动初始化为零值,需用Interface()转回原生slice。
-
Golang优化CI/CD的核心是将关键胶水逻辑(如版本生成、Docker标签计算、环境校验等)迁移为可复用、易测试、单文件分发的Go工具,利用其编译快、无依赖、并发强、类型安全等优势提升稳定性与效率。
-
Go错误处理应使用fmt.Errorf(推荐%w包装保留错误链)、%v打印错误、%q安全插值字符串,并统一用log包而非fmt输出错误,确保可调试、类型安全且符合Go习惯。
-
直接用log.Printf在多goroutine中写文件会出问题,因为log.Logger默认不并发安全,格式化与写入非原子操作,易致日志错乱、截断或panic。
-
Go语言crypto包支持SHA-256哈希、AES对称加密和RSA非对称加密;通过sha256.Sum256计算摘要,aes.NewCipher配合cipher.NewCBCEncrypter实现AES加密,rsa.GenerateKey生成密钥对并使用EncryptPKCS1v15进行RSA加密,适用于数据安全、完整性校验与密钥交换场景。
-
不会,未被recover捕获的panic仅终止当前goroutine;须在每个goroutine入口用defer+recover兜底,不可跨goroutine捕获;重试应结合context与select避免泄漏和卡死。
-
GoHTTP服务解析JSON需先用io.ReadAll读取r.Body并defer关闭,检查Content-Type为application/json;结构体字段须用json:"key"显式标记,空值处理用omitempty或指针;遇\u0000错误应预清理控制字符。
-
答案:使用Golang的os、bufio和strings包可实现文件解析工具,先通过os.Open和bufio.Scanner逐行读取文件,用defer确保文件关闭;再用strings.SplitN或正则解析每行数据;最后将结果输出到控制台或写入新文件,支持结构化格式如JSON或CSV。
-
在Go中对指针数组排序需通过sort.Slice或实现sort.Interface,在比较函数中解引用指针获取值进行比较,须检查nil避免panic,且不可在比较中修改值。
-
Go异步事件处理核心是goroutine+channel消息传递模型,通过定义Event结构体、带缓冲channel作为队列实现非阻塞分发与背压控制。
-
Go原生map非并发安全,多goroutine读写会panic;sync.Map适用于读多写少场景,但不支持range遍历、无len且无TTL;手写缓存需用RWMutex+惰性过期;复杂需求应选ristretto或gocache等第三方库。
-
Golang标准库cipher.AES+NewGCM是最稳妥的文件加密方案:需用12字节唯一nonce、32字节随机密钥,文件结构为salt(16B)[ciphertext+tag],解密时必须检查err!=nil而非返回值长度。
-
fmt包是高频高风险I/O工具,误用动词或参数易致乱码、panic;Sprintf静默拼接未用参数;Scan/Scanln换行处理有陷阱;%+v显字段名调试友好,%#v输出Go字面量含类型。