在任何程序中都会存在一些变量有着相同的内部结构,但是却表示完全不同的概念。 一个类型声明语句创建了一个新的类型名称,和现有类型具有相同的底层结构。
type 类型名字 底层类型
例如:
type Age int //年龄
type Height int //身高
type Grade int //分数
type绝不只是对应于C/C++中的typedef,它不是用于定义一系列的别名。更关键的是,它定义了一系列互不相干的行为特征:通过这些互不相干的行为特征,本质上相同的事物表现出不同事物的特征:整数还是整数,但年龄却不是高度也不是分数。我们可以分别为Age、Height、Grade定 义出下列不同的行为(表示为方法或者函数):
type Age int //年龄
type Height int //身高
type Grade int //分数
func (a Age) IsOld() bool {
// 超过50岁算老年
return a > 50
}
func (h Height ) NeedTicket() bool {
// 高于120cm需要买票
return h > 120
}
func (g Grade) Pass() bool {
// 60分及格
return g >= 60
}
类型声明语句一般出现在包一级,因此如果新创建的类型名字首字母大写,则在包外可以使用。对于每一个类型T,都有一个对应的类型转换操作T(x),用于将x转换为T类型。
package main
import (
"fmt"
)
type Integer int
func (a Integer) Less(b Integer) bool {
return a < b
}
func main() {
var a Integer = 1
fmt.Println(a.Less(2))
var b int
//不能直接赋值,需要T(x)类型转换
b = a
b = int(a)
fmt.Println(b)
}
2.6作用域