i give the all information to create composite literal
:あなたははは、複合リテラルを作成するために必要なすべての情報を与えませんでした。何が必要なのか調べるには、Spec: Composite literalsのセクションをご覧ください。
{1, 2, 3, 4, 5}
このリテラルミスタイプ情報:
このリテラル
。
[]int{}
リテラルの一部でもかまいませんが、
[]float32{}
リテラルの一部でもかまいません。構造体タイプが
int
フィールド(たとえば
type Ints struct{a,b,c,d,e int}
)の構造リテラルの一部であってもかまいません。
はい、この変数宣言で
var ilist [] int = {1, 2, 3, 4, 5} //error
のみ[]int{}
リテラルは理にかなって、それは行くがどのように動作するかではありません。この行を有効にするタイプが1つだけであるため、省略することはできません。
それが初期化式から推測できるので、これらの形態の両方が有効な場合しかし、あなたは宣言からタイプを省略することに注意してください:
var ilist1 []int = []int{1, 2, 3, 4, 5}
var ilist2 = []int{1, 2, 3, 4, 5}
しかし{1, 2, 3, 4, 5}
のタイプがあいまいになる(場合それは有効です)。
はまた、あなたが[][]int
のようなタイプのための複合リテラルを指定している場合、それは、複合リテラルの種類から知られているので、あなたが、要素のリテラル(サブ)からタイプを省略する場合があることに注意しますこれはも有効です。
var iilist = [][]int{
{1, 2, 3},
{4, 5, 6},
}
同じマップリテラルのために行く、これが有効である(Go 1.5に追加されました):
var imap = map[int][]int{
1: {1, 2, 3},
2: {4, 5, 6},
}
は
Go Playgroundにこれらを試してみてください。
私はGoで経験はありませんが、私は言語仕様を簡単に見ました。あなたは 'var ilist [] int = [] int {1、2、3}'を試しましたか?スライスのような複合リテラルには、数値や文字列などの基本リテラルとは対照的に、タイプが必要です。 'var ilist = [] int {1、2、3}'のようにvar名の後に型を省略することもできます。 – JayK
はい、私はすべての情報を宣言(var ilist [] int)の左側に複合リテラルを作成するために与えるので、あなたは正しいが、まだ奇妙です。 – iyasar