制作切片或地图时......
type myType []map[string]someType
v = make(myType, 1)
v[0] = make(map[string]someType)
https://play.golang.org/p/Af9b0n0ykT
...我总是要指定两次类型。 make
可以不推断它吗?
当type是匿名结构时,这将特别有用。
例如在Java中,可以省略对类型的第二次提及:
HashMap<String, SomeType> v = new HashMap<>();
答案 0 :(得分:5)
不,这是不可能的。 make
需要一个类型作为其第一个参数,并且只有两种方式来指定类型:作为名称(例如:myType
)或作为类型文字(例如:[]int
)。
原则上,您可以使用reflect
:
package main
import (
"fmt"
"reflect"
)
type someType struct{}
type myType []map[string]someType
func main() {
var v = make(myType, 1)
reflect.ValueOf(v).Index(0).Set(reflect.MakeMap(reflect.TypeOf(v).Elem()))
fmt.Println(v)
}
但这对我来说根本不是一个好主意。
答案 1 :(得分:-3)
type myType []map[string]someType
你定义了一个切片的地图,它是不同的类型
https://play.golang.org/p/rElNLx0H0S
package main
type someType int
type mymap map[string]someType
type myType []mymap
func main() {
v := make(myType, 1)
v[0] = make(mymap)
// HashMap<String, SomeType> v = new HashMap<>();
var _ mymap = make(mymap)
}
运行完全正常