go - 将结构体初始化为指针的目的是什么?

标签 go grpc-go go-zap

Zap 初始化其默认选项结构,如下 its grpc interceptor :

var (
    defaultOptions = &options{
        levelFunc:       DefaultCodeToLevel,
        shouldLog:       grpc_logging.DefaultDeciderMethod,
        codeFunc:        grpc_logging.DefaultErrorToCode,
        durationFunc:    DefaultDurationToField,
        messageFunc:     DefaultMessageProducer,
        timestampFormat: time.RFC3339,
    }
)

还有later zap performs a copy of values :

*optCopy = *defaultOptions

将变量 defaultOptions 声明为指针,然后取消引用它以进行复制的目的是什么?我想知道不使用指针是否有任何问题:

   defaultOptions = options{
        levelFunc:       DefaultCodeToLevel,
        shouldLog:       grpc_logging.DefaultDeciderMethod,
        codeFunc:        grpc_logging.DefaultErrorToCode,
        durationFunc:    DefaultDurationToField,
        messageFunc:     DefaultMessageProducer,
        timestampFormat: time.RFC3339,
    }

    optCopy = &options{}
    *optCopy = defaultOptions
   

最佳答案

使用指针的一个可能的优点是您可以将该指针设置为 nil;显然,如果它为零,你就不能取消引用它;但这可能用于指示没有选项,并且可能有代码来处理此问题。

警告:我不是 Go 程序员。

关于go - 将结构体初始化为指针的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73409733/

相关文章:

go - 如何使用 go.uber.org/zap lib 以不同的日志级别打印不同的颜色,并根据日志级别将日志附加到不同的文件?

google-app-engine - Google App Engine 下载数据验证错误

go - 如何迭代列表并使用 goterm 包绘制表格?

go - 我无法在Go中的 slice 中更改struct变量的值

go - gRPC 服务器无故停止

go - Go 如何将字符串解码为包装的原子 int ?

mysql - 包含属性的Upsert已更新

go - 尝试将 golang 中的值分配给类型指针的 slice 时遇到无效的内存地址

ssl - 使用 TLS 从 Go 客户端进行 gRPC 调用 - GCP 云功能