2012-09-21 5 views

答えて

10

+1

自分自身を初期化したくないフィールドがある場合、たとえばsync.Mutex型のファイルはどうでしょうか?ミューテックスの –

+0

ゼロ値は、すぐに使用ミューテックスでなければなりません、あなたは良いしているので、単純に埋め込まれた値と、それを含む: 'varが構造体{ sync.Mutex N int型} ヒットを打ちます。ロック() hits.n ++ ヒット.Unlock() ' ([あなたがたぶんGoについて知らなかった10のもの](https://talks.golang.org/2012/10things.slide#3)) – Alaska

24
req := new(MyRequest) 
req.PathParams = pathParams 
req.Request = origRequest 

か...

req := &MyRequest{ 
    PathParams: pathParams 
    Request: origRequest 
} 

参照:埋め込み、フィールドがどのように名前の取得に関する詳細についてhttp://golang.org/ref/spec#Struct_types

func New(origRequest *http.Request, pathParams map[string]string) *MyRequest { 
     return &MyRequest{*origRequest, pathParams} 
} 

それは代わりに

New(foo, bar) 

のあなたは直接だけ

&MyRequest{*foo, bar} 

を好むかもしれないことを示していますについてどう

+0

私はコンパイルエラー '代入でhttp.Request型としてorigRequest(type * http.Request)を使用できません。 'というメッセージが表示されます。これは 'Request'が名前付きフィールドではないからだと思います。 – deamon

+3

これは、フィールドの型がorigRequestの型と同じではないためです。代わりに* origRequestを使用すれば、問題は解決します。 –

+0

あなたは正しいです:アスタリスクを取り除くか、または構造体の参照を使用すると役立ちます。ありがとう。 – deamon

6

Jeremyが上に示したように、匿名フィールドの「名前」はフィールドのタイプと同じです。したがって、xの値が匿名のintを含む構造体だった場合、x.intはそのフィールドを参照します。

関連する問題