>

在 Go 语言中,可以为一个已有的类型指定一个别名,其语法格式是:

1
type myint int

这样就把 myint 定义为了 int 类型的一个别名。需要注意的是,一旦定义了一个类型别名,它与原有的类型就是完全两个类型。
由于 Go 语言中禁止类型的自动隐式转换,因此,别名和原类型之间不能相互赋值比较等等操作,需要显示类型转换才可以使用。
比如,在做参数传递时,如果类型不匹配,将会提示编译错误。

1
2
3
4
5
6
7
8
9
10
type myint int

func test(a int) {
fmt.Println(a)
}

func main() {
var a myint = 9
test(a)
}

上述代码在编译时报错,提示: cannot use a (type myint) as type int in argument to test

因此,需要显示类型转换,test(int(a))

需要注意:如果是 map 类型的话,则不需要做显示转换。见下述例子:

1
2
3
4
5
6
7
8
9
10
11
12
type columnmap map[string][]string

func testmap(field_map map[string][]string) {
fmt.Println("field_map: ", field_map)
}

func main() {
var myfs columnmap = columnmap{
"user_message_t": []string{"name"},
}
testmap(myfs)
}

输出结果:

field_map: map[user_message_t:[name]]

可见,可以编译通过,并且运行正确。