2017-05-22 2 views
2

私は行くには、次のしている:連鎖呼び出しで変数の「無関心」を伝播する方法はありますか?

checkItemState := action.Data.CheckItem.State 
if checkItemState != "" { 
      fmt.Printf("checklist item state: %s", action.Data.CheckItem.State) 
} 

今チェーンaction.Data.CheckItem内のアイテムのいずれかが空/ nilのであれば、私は理にかなってはnilポインタ参照エラーを取得。

nilでない場合はcheckItemStateを取得する言語レベルの方法があります。チェーン内の項目のいずれかがnil/emptyの場合は""になります。

(私はnilnessが伝播のObj-C /スウィフト土地から来た)

+3

いいえありません。 – Volker

答えて

5

あなたには、いくつかのゲッターをコーディングする場合は、うまくこれを扱うことができます。メソッドのレシーバは、単に通常の関数の引数で行くので、nilをレシーバに何かを呼び出すために、完全に大丈夫だ:このトリックは、例えば使用されている

type Foo struct { 
    Name string 
} 

func (f *Foo) GetName() string { 
    if f == nil { 
     return "default name" // or "", whatever 
    } 
    return f.Name 
} 

https://play.golang.org/p/Q20lSo65Kx

Goのprotobuf実装によって。

+0

ありがとう、これは厄介なようです。 – sdgandhi

関連する問題