package main
import (
"fmt"
)
type Tint int
type Tstring string
type Tmap map[string]string
type Tmaps []map[string]string
func fooTint() int {
return 1
}
func fooTstring() string {
return "abc"
}
func fooTmap() map[string]string {
return map[string]string{
"id": "sss",
}
}
func fooTmaps() []map[string]string {
return []map[string]string{
map[string]string{
"id": "sss",
},
}
}
func main() {
var tint Tint
//这里不可以赋值,因为类型不一样
tint = fooTint()
fmt.Println(tint)
var tstring Tstring
//这里不可以赋值,因为类型不一样
tstring = fooTstring()
fmt.Println(tstring)
var tmap Tmap
//What?,可以赋值
tmap = fooTmap()
fmt.Println(tmap)
var tmaps Tmaps
//What?,可以赋值
tmaps = fooTmaps()
fmt.Println(tmaps)
}
为什么map类型可以赋值,而int string不可以,甚是奇怪
因为在Go里面分为命名类型(named,所有使用type定义的类型都是命名类型,如int int64 string bool)和非命名类型(unamed map slice array),一个非命名类型可以赋值给一个命名类型,只要他们的结构相同
详见下面链接
https://stackoverflow.com/que...