用户自定义类型有两种方式:
1,结构体 (类似python和java中的类,又类似组合模式)
2,另一种声明用户定义的类型的方法时,基于一个已有的类型,将其作为新类型的类型说明
// 通过结构体自定义类型(类似组合模式)
type user struct{
name string,
mail string,
// name, mail string
ext int
}
type admin struct{
person user,
// user
level string
}
// 通过自已有类型
type duration int64
int64 和 duration是两种不同类型,互不兼容。
- 结构体初始化
// struct定义的三种形式
type Student struct {
Name string
age int
}
// 对于上面这个结构体,我们定义的三种方式有:
var stu student
var stu *Student = new(Student)
var stu *Student = &Student
- 结构体方法
type user struct {
name string
email string
}
func (u user) notify(email string) {
u.email = email
fmt.Println("Email 1 is %d", u.email)
}
func (u *user) changeEmail(email string) {
u.email = email
fmt.Println("Email 2 is %d", u.email)
}
func main(){
/*
Email 3 is %d aaa@163.com
Email 1 is %d ccc@163.com
Email 4 is %d aaa@163.com
Email 2 is %d bbb@163.com
Email 5 is %d bbb@163.com
*/
u := user{name: "aaa", email: "aaa@163.com"}
fmt.Println("Email 3 is %d", u.email)
u.notify("ccc@163.com")
fmt.Println("Email 4 is %d", u.email)
u.changeEmail("bbb@163.com")
fmt.Println("Email 5 is %d", u.email)
}