go - 如何不初始化结构的一部分

标签 go

我想将我认为的分组全局嵌入式锁结合起来,如下所示:

var stats struct {
    sync.RWMutex
    m map[string]statsEntry
}

不幸的是 map 要有用,它必须被制作,所以代码变成:

var stats = struct {
  sync.RWMutex
  m map[string]statsEntry
}
{
  ???,
  make(map[string]statsEntry),
}

用什么代替 ???

最佳答案

你使用类型文字:

stats := struct {
    sync.RWMutex
    m map[string]statsEntry
}{
    sync.RWMutex{},
    make(map[string]statsEntry),
}

但是由于 sync.RWMutex 的零值是有效的,你可以跳过它并指定你正在分配的字段

stats := struct {
    sync.RWMutex
    m map[string]statsEntry
}{
    m: make(map[string]statsEntry),
}

但通常在本地定义类型会更清晰

type s struct {
    sync.RWMutex
    m map[string]statsEntry
}

stats = s{m: make(map[string]statsEntry)}

关于go - 如何不初始化结构的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423058/

相关文章:

在 %PATH% 中找不到 GCC

c++ - 无法在 gRPC 中使用 proto 3.0 缓冲区生成客户端代码

go - 检查Yaml文件中是否存在golang文件中的字符串

random - 将 uint64 转换为 int64 而不丢失信息

go - 如何使 Go append 在范围循环内工作

go - 从错误接口(interface)获取字符串形式的错误

从 C 调用带有字符串参数的 Go 函数?

ssl-certificate - 我可以创建自己的根证书以用于与 Go 的 SSL 连接吗?这样安全吗?

Goji 子路由器返回 404

go - 转到模板: how to pass the variable returned from a function to next command in pipeline