下面程序,先用InitReqData函数初始化一个map(map的value是一个struct指针),然后用freeReqData函数回收map中指定key的内容。
freeReqData函数应该怎么写,才既能把指定key从map中去掉,又保证相应的struct指针的释放,避免内存泄露?
```
package main
type ReqData struct {
Logid string
}
var(
ArrReqData = make(map[string]*ReqData)
)
func InitReqData(key string, logid string){
ArrReqData[key] = &ReqData{
Logid:logid,
};
}
func freeReqData(key string){
delete(ArrReqData, key);
}
func main() {
InitReqData("key1", "123");
freeReqData("key1");
}
```
go的解决方法是:这不关你事。
因为 C代码中,申请释放什么的是bug窝,内存泄露什么的,程序员都快被折磨疯了。
所以 go有 垃圾收集机制 GC,大家一律假装都忘记了有 “释放”这回事就 天下太平了。
只“申请”不“释放”,从C/C++转移来的童鞋都快疯了。 我们go程序员倒都很淡定。
你相信go编译器吗? 你信任go编译器吗?你信仰 go编译器吗?
C/C++程序员 大摇其头, go程序员笑而不语。
万一出了 内存泄露的问题, 你还可以推给 go语言身上。何乐而不为呀?
#1