• go gc

    1. 什么是GC GC,全称 Garbage Collection,即垃圾回收,是一种自动内存管理的机制。 2. 为什么GC 程序向操作系统申请的内存不再需要时 3. 怎么GC 赋值器(Mutator):用户代码,负责修改对象引用关系。 回收器(Collector):负责标记和回收无用内存。 4. GC 可观测 GODEBUG=gctrace=1 debug.ReadGCStats runtime.ReadMemStats 5. 为什么会出现内存泄漏 - 预期能被快速释放的内存因被根对象引用而没有得到迅速释放 - 指针 - 全局变量 - Goroutine 泄漏 Goroutine 作为一种逻辑上理解的轻量级线程,需要维护执行用户代码的上下文信息。在运行过程中也需要消耗一定的内存来保存这类信息,而这些内存在目前版本的 Go 中是不会被释放的。因此,如果一个程序持续不断地产生新的 goroutine、且不结束已经创建的 goroutine 并复用这部分内存,就会造成内存泄漏的现象. eg: 曾经项目中遇到的,mock了一个链接,忘记关闭 ``` // FillArgsInSQL 使用 mock db 将参数填回 SQL func FillArgsInSQL(sql string, args ...any)...

  • golang package sort

    https://www.notion.so/sort-23f21f3fbf218042a172fcee79ac3d8b?source=copy_link

  • exec.Command 与 os.StartProcess 有什么不一样

    exec.Command 与 os.StartProcess 有什么不一样 这是一个非常经典的问题:exec.Command 和 os.StartProcess 都可以启动新进程,但功能和易用性完全不同。我给你详细拆解一下: 1. os.StartProcess 特点 Go 最底层的 进程创建 API,是对系统调用 fork + exec(类 Unix)或 CreateProcess(Windows)的直接封装。 调用麻烦,需要手动准备命令参数、环境变量、标准输入输出、文件描述符等。 返回 *os.Process,只能用它做简单的进程管理(等待、杀死)。 用法示例 package main import ( "os" "syscall" ) func main() { // argv 必须是完整路径 + 参数数组 procAttr := &os.ProcAttr{ Dir: "", Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},...