web-dev-qa-db-ja.com

golangの辞書

私はGoから始めて、Pythonから来ています。Pythonでdictに相当するものを見つけようとしています。Pythonこの:

d = {
    'name': 'Kramer',  # string
    'age': 25          # int
}

私は最初にmapタイプを見つけましたが、それは1つのタイプの値しか許可しません(それはintsstringsの両方を処理できません。このようなことをしたいときはいつでもstructを作成する必要がありますか?または、タイプ行方不明ですか?

すべてのヒントは大歓迎です!

7
kramer65

基本的に問題は、実際のコードで同じマップインスタンスに異なるタイプの値を格納する要件に遭遇するのが難しいことです。

あなたの特定のケースでは、次のように構造体タイプを使用するだけです:

type person struct {
  name string
  age  int
}

それらを初期化することは、いわゆる「リテラル」のおかげで、マップよりも難しくありません。

joe := person{
  name: "Doe, John",
  age:  32,
}

個々のフィールドへのアクセスは、マップを使用するよりも難しくありません。

joe["name"] // a map

versus

joe.name // a struct type

全体として、Goの問題を解決しようとするGo along の紹介本を読むことを検討してください。動的型付け言語の実用的な知識を厳密に型指定されたものなので、基本的にPythonをGoで記述しようとしていますが、これは逆効果です。

The Goプログラミング言語 で始めることをお勧めします。

Goに関する無料の本 もあります。

13
kostix

それはおそらく最良の決定ではありませんが、interface{}マップがすべてのタイプを受け入れるようにします。

package main

import (
    "fmt"
)

func main() {
    dict := map[interface{}]interface{} {
        1: "hello",
        "hey": 2,
    }
    fmt.Println(dict) // map[1:hello hey:2]
}
3
skovorodkin