为什么要在go中分配对结构的引用?

lau*_*ent 6 struct initialization reference go

我正在查看此页面上的代码:

http://golang.org/pkg/net/http/

还有一件事我不明白 - 在某些时候,新的结构被创建并初始化如下:

client := &http.Client{
    CheckRedirect: redirectPolicyFunc,
}
Run Code Online (Sandbox Code Playgroud)

为什么&在创建这个结构时使用?

我也阅读了这篇博文,结构体初始化如下:

r := Rectangle{}
Run Code Online (Sandbox Code Playgroud)

两者之间有什么区别?如何知道使用哪一个?

Den*_*ret 6

不同之处在于变量的类型.

client := &http.Client{
Run Code Online (Sandbox Code Playgroud)

制造client类型*http.Client

client := http.Client{
Run Code Online (Sandbox Code Playgroud)

建立一个http.Client.

  • 指针很轻.如果没有指针,则每次将结构分配给变量时都要复制结构.这意味着您可以对结构的副本进行操作,而不是对原始结构进行操作,这可能很重.您应该使用指针来表示最复杂的结构.另见[此相关问题](http://stackoverflow.com/questions/13760793/go-tour-when-to-not-use-pointer-to-struct-literal-in-a-variable). (5认同)