2016-07-01 16 views
18

値がない場合は、空の配列を返す関数を呼び出しています。空のスライスを確認するにはどうすればよいですか?

私はそれが動作しません。これを行うとき:

if r == [] { 
    fmt.Println("No return value")    
} 

を私が使用している回避策は次のとおりです。

var a [0]int 
if r == a { 
    fmt.Println("No return value")    
} 

しかし、単に戻り値をチェックするために、変数を宣言することはありませんそう思える。これを行うためのより良い方法は何ですか?

+2

Goはjavascriptではありません!基本を読む:https://golang.org/doc/effective_go.html –

+4

その他のもの - 最初の配列はスライスではありません。配列は型であり、要素の数が固定されているので、スライスに対してのみ質問が理にかなっています。第二に、それらのスライスを初期化すれば、うまくいきません。 3番目 - len(a)== 0の場合はどうですか? – lofcek

+0

回避策はコンパイルしますか? 'r 'も' [0] int'型でなければどうなるか分かりませんが、その場合は2つの(空の)配列は常に等しいと見なされます。 –

答えて

24

len()は、スライスまたは配列内の要素の数を返します。

r := whatever() 
if len(r) > 0 { 
    // do what you want 
} 

たり、アイテム

if len(whatever()) > 0 { 
    // do what you want 
} 
6

を必要としない場合は、ちょうどlen機能を使用することができます。whatever()と仮定すると

はあなたのような何かを行うことができ、あなたが呼び出す関数です。

if len(r) == 0 { 
    fmt.Println("No return value")    
} 

もしアレイを用いているので、タイプ[0]int(サイズ0の整数のアレイ)のアレイが[n]intとは異なるが(Nサイズnの整数の配列)と相互に互換性がありません。

長さの異なる配列を返す関数を使用する場合、関数は特定の長さの配列戻り型(たとえばfunc f() [n]int,nは定数)でしか宣言できず、配列にはn関数がその配列に何も書き込まない場合でも、値はゼロになります。

関連する問題