変数がスライスであるか配列であるかを判断する Go 言語の方法: 1. 変数の長さが決定されたときに変更できないかどうかを判断します。変更できない場合は、その変数が配列 array; 2. 括弧内で長さを定義します。長さの値がある場合は配列配列、長さの値がない場合はスライス スライスになります。
このチュートリアルの動作環境: Windows 7 システム、Go1.11.2 バージョン、Dell G3 コンピューター。
推奨: 「go 言語チュートリアル 」
golang で変数が配列かスライスかを判断する
Array Slice と Slice の違い
この 2 つの最大の違いは、配列の長さが決定されると、変更したり、長くしたり、短くしたりできないことです。スライススケールの容量。また、配列は値型であり、ある配列を別の配列に代入すると値のコピーが発生しますが、スライスはポインタ型であり、ポインタがコピーされます。
以下を例で説明します。
コードは以下のようになります。 (1)[3]int型の配列を定義し、1,2に値を代入します。 、3 を順に実行します。 (2) 配列 a を b に代入すると、値のコピーが発生します。 (3) 配列 a の添字 2 の要素に値 4 を代入しても、配列 b の内容には影響しません。 (4) 状況を説明するために結果を印刷します。
別のコードを見ています: (1) 長さを指定しない、(2) 結果を出力し、 a の変更が内容に影響を与えることを示しています。 b.
#微妙な変更がなぜこれほどの違いを生むのでしょうか? これは、配列とスライスを定義するときの構文の微妙な違いです。
括弧内で長さの値を定義することは、コンパイラーが変数 a,# のデータ型を区別するための唯一の基準です。 ##長さの値がある場合は配列ですが、長さの値がない場合はスライスです。 質問に戻り、次の変数を区別する方法:
var a1 []int ---> 長さの定義はなく、Slice
var a2 [ 2]int ---> Array
var a3 [3]*int---> Array
という長さの定義があります。 var a4 [4][ 3]int ---> これは長さの定義があり、単なる 2 次元配列である Array です。
プログラミング関連の知識について詳しくは、
プログラミング教育以上がGo言語で変数がスライスか配列かを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。