3

新人注意。

文字列キーと値として「何か」を使用してマップを作成できますか? 目標は、構成データのマップを作成することです。このデータは、単一の文字列 (またはブール値または整数ですが、これを文字列に制限することは問題ありません) の場合もあれば、文字列の配列の場合もあります。例: これらのアイテムを保管したい:

levels = 3
extra-directories = ["foo","bar","baz"]

最初のオプションは常に単一の値です (文字列でも問題ありません)。2 番目のオプションは、0 個以上の値です。

目標は、これらの値を格納できる 1 つのマップを用意することです。マップを見るとswitch x.(type)、値が何であるかを調べるために使用できます。

4

2 に答える 2

4

interface{}任意の型を受け入れる型です。

conf := map[string] interface{} {
    "name": "Default",
    "server": "localhost",
    "timeout": 120,
}

conf["name"]は ではinterface{}なく 、stringは でconf["timeout"]はありinterface{}ませんint。likeconf["name"]を取る関数に渡すことはできますが、 like を取る関数にinterface{}渡すことはfmt.Printlnできません.stringstrings.ToUpperinterface{}string

name := conf["name"].(string)
fmt.Println("name:", strings.ToUpper(name))
server := conf["server"].(string)
fmt.Println("server:", strings.ToUpper(server))
timeout := conf["timeout"].(int)
fmt.Println("timeout in minutes:",  timeout / 60)

あなたの問題に合うかもしれない別の解決策は、構造体を定義することです:

type Config struct {
    Name string
    Server string
    Timeout int
}

構成を作成します。

conf := Config{
    Name: "Default",
    Server: "localhost",
    Tiemout: 60,
}

アクセス構成:

fmt.Println("name:", strings.ToUpper(conf.Name))
fmt.Println("server:", strings.ToUpper(cnf.Server))
fmt.Println("timeout in minutes:",  conf.Timeout / 60)
于 2012-08-03T19:44:09.047 に答える
1

はい、 type を持つマップを使用してそれを行うことができますmap[string]interface{}

于 2012-08-03T19:00:08.653 に答える