2016-02-13 110 views
-1

正常方式初始匿名成员的struct是这样的:如何使用指针类型的匿名成员来初始化Go结构?

package main 

import "fmt" 


type AA struct { 
     int 
     xx string 
} 

func main() { 
     a := &AA{ 
       int : 1, 
       xx : "2", 
     } 
     fmt.Println(a) // &{1 2} 
} 

但是,如果类型是一个指针,不能做到这一点任何更多

package main 

import "fmt" 


type AA struct { 
     *int 
     xx string 
} 

func main() { 
     i := 1 
     a := &AA{ 
       *int : &i, 
       xx : "2", 
     } 
     fmt.Println(a) 
} 
// .\hello.go:14: invalid field name *int in struct initializer 

有没有更好的办法?

回答

1

*int字段的名字只是int

package main 

import "fmt" 

type AA struct { 
    *int 
    xx string 
} 

func main() { 
    i := 1 
    a := &AA{ 
     int: &i, 
     xx: "2", 
    } 
    fmt.Println(a) 
} 
+1

Specced [这里](https://golang.org/ref/spec#Struct_types)。软件包也不会成为该字段名称的一部分。请注意,如果您嵌入像int这样的小写类型名称,它将关闭一个未导出的字段,即,您将无法从另一个包中执行'a.int'。 – twotwotwo