
值传递
Go中map是引用类型,传递的是底层指针的副本,因此修改元素(如m[key]=v)无需指针参数即可生效;只有替换整个map实例(如赋值或置nil)时才需*map。
WaitGroup必须先wg.Add(n)再启动goroutine,且Done()须在goroutine内且仅调用一次;必须传指针避免复制;常与channel配合实现结果收集;复杂场景推荐errgro...
大结构体传参必须用指针,因Go按值传递会复制整个结构体,导致高内存分配和GC压力;超64字节或含[]byte、map等字段时应优先用指针,并注意可寻址性与只读约定。
std::thread析构前必须调用join()或detach(),否则触发std::terminate()崩溃;默认参数按值拷贝,传引用需std::ref();join()同步等待,detach()...
Go中数组是值类型,传参时完整拷贝底层数组;切片是含指针、长度、容量的结构体,仅拷贝header且共享底层数组。数组修改互不影响,切片或数组指针修改会影响原数据。
Go编译器的逃逸分析自动决定变量是否堆分配,关键在于识别并规避强制堆分配的代码模式:返回局部变量指针、传地址给*T形参函数、赋值给全局变量或interface{}。
关键信息是识别“escapestoheap”等提示以定位堆分配变量,真正逃逸取决于是否可能被外部访问而非仅取地址;高频逃逸模式包括返回局部指针、存入map/slice/channel、闭包捕获变量等,...
std::thread构造后必须join或detach,否则析构时调用std::terminate终止程序;传参默认拷贝,引用需std::ref;共享数据须用mutex等同步机制避免datarace。
std::decay模拟函数值传递时的参数类型变换规则;它将数组转指针、函数转函数指针、去除引用及顶层cv限定符。
优先接收T,除非结构体大或需修改原值;返回值同理,仅当需表达“无值”或避免大对象复制时用T;JSON字段用string仅当需区分“未提供”与“空字符串”。