Golang使用New()返回结构指针,而不是直接创建一个

时间:2019-05-03 03:42:18

标签: pointers go struct new-operator dereference

我正在阅读此repo单元测试代码,并且以前所未有的方式创建了Client结构。

type Client struct {
    // client stuff
}

// In client_test.go
// Creating default client for testing
c := dc()

// In resty_test.go
func dc() *Client {
    DefaultClient = New()
    DefaultClient.SetLogger(ioutil.Discard)
    return DefaultClient
}

我的问题是返回New()的目的是什么? 以下代码的行为与New()样式相似吗?为什么要选择一个?

func dc() *Client {
    DefaultClient := Client{}
    return &DefaultClient
}

1 个答案:

答案 0 :(得分:0)

New()函数是Client的构造函数:

https://github.com/go-resty/resty/blob/63ac6744519b3b3e976256d87d7b097c3a2c8dbc/default.go#L25

使用构造函数可以使用默认值设置构造结构,而不是像对Client{}那样对所有内部字段使用零值。例如,在这种情况下,最大主体大小设置为math.MaxInt32而不是0。