golang 中关于结构体组合的初始化问题

对于Golang的struct组合的初始化存在问题

现在有一个struct是Engine,它组合了sync.RWMutex

type Engine struct {
    sync.RWMutex

    ID     string
    IP     string
    Addr   string
}

在构建的时候,可以不用传入sync.RWMutex的对象

func main() {
    engine := &Engine {
            ID   : "111",
            IP   : "192.168.59.103",
            Addr : "localhost"}
}

为什么在这里不用对于syncRWMutex进行初始化,在Doc里看到如果组合的是Pointer的化,需要初始化。这个为什么呢,能不能有大拿来讲解一下Go的内存管理在组合的情况下到底是怎么样的,如果我不初始化sync.RWMutex,那么在调用它的方法的时候,传入的receiver是什么呢?

阅读 16k
2 个回答

在没有指定初始化值时会默认初始化为对应类型的零值,对应到读写锁就是读写均未加锁状态。

golang sync.RWMutex 直接声明不用初始化就可以直接用,比如

var mutex sync.RWMutex
mutex.Lock()

但是如果是指针的话,不对指针初始化,指针就是一个空指针,空指针当然不能直接用啦

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题