2017-11-30 4 views
4
「ゴーのツアー」は、

thereトップレベルのタイプがちょうどタイプの名前である場合は、リテラルの 要素からそれを省略することができGoにタイプ名の代わりにマップリテラルで使用できるものは?

なフレーズです。

私はGoの新機能ですので、省略できない場合は気になりますか?コメント投稿@TimCooperで述べたようにVertexがインタフェース型であれば、コンパイラは合理的にあなたは、を参照している実装を推測できなかったので、

var m = map[string]Vertex{ 
    "Bell Labs": {40.68433, -74.39967}, //top-level type is omitted 
    "Google": {37.42202, -122.08408}, 
} 
+3

を入力'Vertex'はインタフェース型です。構造体、配列、スライス、またはマップコンポジットリテラルの型を含める必要があります。 –

答えて

4

することは、あなたが明示的インターフェイスを実装し、具体的なタイプに名前を付ける必要があります例:

type NoiseMaker interface { MakeNoise() string } 

type Person struct {} 
func (p Person) MakeNoise() string { 
    return "Hello!" 
} 

type Car struct {} 
func (c Car) MakeNoise() string { 
    return "Vroom!" 
} 

// We must provide NoiseMaker instances here, since 
// there is no implicit way to make a NoiseMaker... 
noisemakers := map[string]NoiseMaker{ 
    "alice": Person{}, 
    "honda": Car{}, 
} 
+0

ありがとうございます。私はちょうどそのトップレベルのタイプが何か異なっていると思った。 –

0

もあれば、最も一般的な例は、おそらくだろう文字通りのマップでは省略することができますに匿名の構造体がある

import (
    "fmt" 
) 

func main() { 
    var m = map[string]struct{ Lat, Long float64 }{ 
     "Bell Labs": {40.68433, -74.39967}, 
     "Google": {37.42202, -122.08408}, 
    } 
    fmt.Println(m) 
} 
関連する問題