2016-02-13 106 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