目录
go语言中没有“类”的概念,也不支持类的继承
但是go语言可以通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性
类型别名和自定义类型
自定义类型:
在go语言中有一些基本的数据类型,比如string int,bool等,也可以使用type关键字来定义自定义类型,语法:type 类型 基本数据类型
// 将myInt定义为int类型
type myInt int
PS:通过type关键字定义,Myint就是一种新的类型,它具有int的特性
类型别名
编写代码时,可以让自己的定义更清晰
//类型别名
type yourInt = int
自定义类型和类型别名的区别:
- 自定义类型在编译完成后还保留自己的类型
- 类型别名只会在代码中生效,编译后打印类型还是原类型,比如rune在打印类型时还是int32
举例:
package main
import "fmt"
// type后边跟一个类型,自定义类型
type myInt int
//类型别名
type yourInt = int
func main() {
var n myInt
n = 100
fmt.Println(n)
fmt.Printf("type:%T\n", n)
var m yourInt
m = 100
fmt.Println(m)
fmt.Printf("type:%T\n", m)
// rune就是默认的int32的类型别名,方便区分,表示字符
var c rune
c = '中'
fmt.Println(c)
fmt.Printf("type:%T\n", c)
}
输出:
100
type:main.myInt
100
type:int
20013
type:int32
结构体
go语言中基础数据类型可以表示一些事物的基本属性,但是想表达一个事物的全部属性或者不分属性时,可以提供一种自定义事件类型,封装多个数据类型,这种数据类型叫做结构体,用struct表示
- 类型名:标示自定义结构体的名称,在同一个包内不能重复
- 字段名:表示结构体的字段名,结构体中的字段名必须唯一
- 字段类型:表示结构体字段的具体类型
定义:
type 类型名 struct{
字段名 字段类型
字段名 字段类型
......
}
package main
import "fmt"
type person struct {
name string
age int
gender string
hobby []string
}
func main() {
var p person
p.name = "zhangsan"
p.age = 20
p.gender = "boy"
p.hobby = []string{"play", "movie"}
fmt.Println(p)
fmt.Printf("type:%T", p)
}
创建指针类型的结构体
var p2 = new(person)
fmt.Printf("p2 type:%T", p2)
p2.name = "lisi"