interface{}
是接受任何類型的類型。
conf := map[string] interface{} {
"name": "Default",
"server": "localhost",
"timeout": 120,
}
conf["name"]
是interface{}
不是string
,和conf["timeout"]
是interface{}
不是int
。您可以通過conf["name"]
受到充分interface{}
像fmt.Println
功能,但你不能把它傳遞給需要string
像strings.ToUpper
,除非你知道interface{}
的價值是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-04 00:59:56
@JeremyWall我仍然需要這麼多的學習。謝謝! – topskip 2012-08-05 18:39:13