2013-07-28 23 views
14
type A struct { 
    B struct { 
     Some string 
     Len int 
    } 
} 

Basit soru. Bu yapı nasıl başlatılır? Böyle bir şey yapmak istiyorum:Bileşik literalde eksik tür

missing type in composite literal 

Tabii, ben ayrı bir yapı B oluşturmak ve bu şekilde başlatabilir:

type Btype struct { 
    Some string 
    Len int 
} 

type A struct { 
    B Btype 
} 

a := &A{B:Btype{Some: "xxx", Len: 3}} 

a := &A{B:{Some: "xxx", Len: 3}} 

Beklenildiği i bir hata alıyorum

Ancak ilk yoldan çok kullanışlı değil. Anonim yapıyı başlatmak için kısayol var mı?

cevap

11

assignability rules, A özgün tanımını koruyabileceğiniz ve bu tür yazının kısa yazımsal hazırlamasına olanak tanıyan başka bir olasılığa yol açan anonim türler için bağışlayıcıdır. Gerçekten B alan için isimsiz türüne ısrar ederse, muhtemelen yazabiliriz:

package main 

import "fmt" 

type (
     A struct { 
       B struct { 
         Some string 
         Len int 
       } 
     } 

     b struct { 
       Some string 
       Len int 
     } 
) 

func main() { 
     a := &A{b{"xxx", 3}} 
     fmt.Printf("%#v\n", a) 
} 

Playground


Çıktı

&main.A{B:struct { Some string; Len int }{Some:"xxx", Len:3}} 
İlgili konular