我是Golang的新工作,在这种情况下我有一个map [string],它有一个struct.在这一点上,一切都是有效的.
但是我希望有一个map [string],我可以在其中同时访问另一个具有self结构的map [string].
这是我正在努力工作的代码.
type myStruct struct{
atrib1 string
atrib2 string
}
var apiRequest map[string] map[string]myStruct
Run Code Online (Sandbox Code Playgroud)
我想访问这样的东西:
func main() {
apiRequest = make(map[string] map[string]myStruct)
apiKeyTypeRequest["Key"]["MyFirstOption"].atrib1 = "first Value first op"
apiKeyTypeRequest["Key"]["MyFirstOption"].atrib2 = "second Value first op"
apiKeyTypeRequest["Key"]["MysecondtOption"].atrib1 = "first Value second op"
}
Run Code Online (Sandbox Code Playgroud)
在地图中使用地图的另一种方法是使用单个map[mapKey]where mapKey作为结构:
type mapKey struct {
Key string
Option string
}
Run Code Online (Sandbox Code Playgroud)
好处是您在搜索a时只需执行一次查找myStruct,而您只需创建一个映射.
缺点是你需要能够获得选项map[string]myStruct映射,因为它不存在.此外,您无法检查某个键是否存在,因为键和选项成对存在.
工作范例:
package main
import "fmt"
type myStruct struct {
atrib1 string
atrib2 string
}
type mapKey struct {
Key string
Option string
}
func main() {
apiKeyTypeRequest := make(map[mapKey]myStruct)
apiKeyTypeRequest[mapKey{"Key", "MyFirstOption"}] = myStruct{"first Value first op", "second Value first op"}
apiKeyTypeRequest[mapKey{"Key", "MysecondtOption"}] = myStruct{atrib1: "first Value second op"}
fmt.Printf("%+v\n", apiKeyTypeRequest)
}
Run Code Online (Sandbox Code Playgroud)
游乐场: http ://play.golang.org/p/tGd7ja7QI2
要扩展先前的答案,必须声明和实例化每个映射(以及映射末尾的结构),这意味着您需要实例化"外部"映射
mapOfMaps := make(map[string]map[string]myStruct)
Run Code Online (Sandbox Code Playgroud)
以及每个键的"内部"地图.
mapOfMaps[key] = make(map[string]myStruct)
Run Code Online (Sandbox Code Playgroud)
您遇到的一个明显问题是如何动态检查mapOfMaps[key]是否已经实例化?您可以使用以下语法执行此操作:
if _, ok := mapOfMaps[key]; !ok {
mapOfMaps[key] = make(map[string]myStruct)
}
Run Code Online (Sandbox Code Playgroud)
此语法检查是否mapOfMaps已经具有该键的实例化值,如果没有实例化它.类似地,您可以使用相同的语法通过检查mapOfMaps[key][key2]已实例化的实例来实例化您正在使用的结构.
if _, ok := mapOfMaps[key][key2]; !ok {
mapOfMaps[key][key2] = new(myStruct)
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过调用2个键和结构的属性来访问结构
fmt.Println(mapOfMaps[key][key2].atrib1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20487 次 |
| 最近记录: |