-
Go中数组赋值是值拷贝(类似深拷贝),切片赋值是头信息拷贝(浅拷贝),底层数组共享;深拷贝切片需make+copy或append(nil,s...);嵌套指针或切片需递归处理。
-
Go函数参数传递永远是值传递,即funcf(xT)的x始终是传入值的副本;传指针时副本存的是地址,解引用后修改的是原内存,而非传递方式改变。
-
Go并发测试需验证goroutine启动、同步、竞态避免及超时控制:用sync.WaitGroup确保完成,-race检测竞态,select+time.After防死锁。
-
Go标准库mime包核心功能是解析、匹配与注册MIME类型,不处理完整邮件或HTTP报文;需配合net/mail、net/http等包使用,主要提供ParseMediaType、IsMedia、TypeByExtension及AddExtensionType等函数。
-
Go中降低锁开销应优先选用原子操作和Channel:原子操作适用于基础类型单次读写,零调度开销;Channel天然适合资源排队与状态同步,如用带缓冲Channel管理连接池。
-
Go中无动态对象,但可用reflect.New在运行时创建指定类型零值指针实例,返回*Type的reflect.Value,需.Interface()转为实际指针,常用于配置驱动或插件化场景。
-
Go语言encoding/base64包提供标准与URL安全Base64编解码:EncodeToString将[]byte转Base64字符串,DecodeString反向解析并需检查错误;URLEncoding用-/_替代+/且默认无填充;二进制数据推荐流式处理。
-
Go中重命名或移动文件统一用os.Rename,同磁盘原子操作,跨磁盘需copy+remove;要求路径完整、目标不存在、父目录存在,且须检查错误。
-
GoWeb应用需分层防御XSS与CSRF:XSS防护靠输入校验+html/template自动转义+JSON响应头加固;CSRF防护依赖gorilla/csrf令牌机制+SameSiteCookie+安全响应头组合实施。
-
Go中用ticker实现周期性协程需防堆积、泄漏和竞态:Ticker仅发信号,任务需手动控制并发;可用信号量限流、atomic.Bool防重入;必须调用Stop()并结合context优雅退出。
-
使用指针传递数组可避免复制,提升性能。通过指向数组的指针(如*[5]int)传参,函数直接操作原数据,减少内存开销;结合切片指针可修改切片结构;在高频调用中显著降低资源消耗,适用于大数组或密集计算场景。
-
Go项目应封装数据库操作以剥离连接管理、错误处理、事务控制和SQL组织;用sqlx替代database/sql提升开发效率,注意正确初始化、命名参数和结构体映射;SQL应外置到文件并用embed加载;事务需显式传递*sqlx.Tx;推荐用Querier接口统一DB与Tx调用。
-
Go模块缓存默认存储于$GOPATH/pkg/mod,通过gomodtidy等命令自动下载并复用依赖,提升构建效率;可通过GOPROXY配置代理加速下载,GOSUMDB控制校验,GOCACHE管理编译缓存;使用goclean-modcache清理缓存,gomoddownload预下载依赖;在CI/CD中结合actions/cache@v3基于go.sum缓存依赖,显著缩短构建时间。
-
Golang实现Web表单多步骤提交需以Session管理状态、统一路由控制流程、结构体规范数据、隐藏字段保障步骤一致性。使用gorilla/sessions存储各步数据,/apply统一入口解析step参数,POST处理提交并校验,最终合并入库后清空Session。
-
虚假共享是多个线程修改不同变量但位于同一缓存行,导致频繁触发缓存一致性协议而影响性能。检测方法包括使用perf、pprof工具观察缓存一致性开销和进行变量间隔对比测试。解决方式是通过填充使变量独占缓存行,如定义结构体时添加padding字段确保每个变量占满一个缓存行,例如typePaddedIntstruct{valueint64;[56]byte}。实际应用如并发计数器数组可定义为typePaddedCounterstruct{countint64;[56]byte}。注意事项包括Go编译器可能重排字段