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

सरल प्रश्न में गुम प्रकार। इस संरचना को कैसे प्रारंभ करें? मैं कुछ इस तरह करना चाहते हैं:मिश्रित शाब्दिक

missing type in composite literal 

ज़रूर, मैं एक अलग struct बी बना सकते हैं और इसे इस तरह से प्रारंभ कर सकते हैं::

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}} 

उम्मीद के मुताबिक मैं एक त्रुटि हो रही है

लेकिन यह पहली तरह से इतना उपयोगी नहीं है। अज्ञात संरचना शुरू करने के लिए कोई शॉर्टकट है?

उत्तर

11

assignability rules गुमनाम प्रकारों के लिए क्षमा कर रहे हैं जो एक और संभावना की ओर जाता है जहां आप A की मूल परिभाषा को बनाए रख सकते हैं जबकि उस प्रकार के संक्षिप्त समग्र अक्षर लिखे जाने की अनुमति देते हैं। क्या तुम सच में B क्षेत्र के लिए एक गुमनाम प्रकार पर जोर देते हैं, तो मैं शायद कुछ ऐसा लिखना होगा:

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


आउटपुट

&main.A{B:struct { Some string; Len int }{Some:"xxx", Len:3}} 
संबंधित मुद्दे