01、自定义类型 -- type
--使用内置的类型来定义一个自己的类型
--自定义类型使用%T打印出来后,类型名称
--代码示例如下:
// 自定义类型
type MyInt int
// 给类型起别名
type anotherInt = int
func main(){
var m MyInt // 自定义类型
m = 100
fmt.Println("m值为:", m) // m值为: 100
fmt.Printf("%T %d\n", m, m) // main.MyInt 100
var n anotherInt // 给类型起别名
n = 200
fmt.Println("n值为:", n) // n值为: 200
fmt.Printf("%T %d\n", n, n) // int 200
// 在go的库中builtin中可以查看rune
// rune就是类型别名 == int32
// type rune = int32
var p rune
p = '中'
fmt.Println("n值为:", p) // n值为: 20013
fmt.Printf("%T %d\n", p, p) // int32 20013
}
02、结构体 -- struct 和 type
--type是用来自定义类型,但是如果想要定义一个包含多种基本类型的复杂类型仅靠type并不够。
还需要type 和 struct配合使用
--使用type和struct关键字来定义结构体,具体代码格式如下:
type 类型名 struct {
字段名 字段类型
字段名 字段类型
…
}
--类型名:标识自定义结构体的名称,在同一个包内不能重复。
--字段名:表示结构体字段名。结构体中的字段名必须唯一。
--字段类型:表示结构体字段的具体类型。
--代码示例:
type person struct{
name string
city string
age int8
}
// 相同属性的字段可以放置在一行
type person struc{
name, city string
age int8
}
--使用结构体初始化变量:
var 变量名 结构体类型
--代码示例:
func main(){
type person struct{
name string
city string
age int8
gender string
hobby []string
}
var p1 person
p1.name = "liming"
p1.city = "shanghai"
p1.age = 18
p1.gender = "男"
p1.hobby = []string{"篮球", "足球", "双色球"}
fmt.Println(p1)
fmt.Println(p1.hobby)
}
--代码结果:
{liming shanghai 18 男 [篮球 足球 双色球]}
[篮球 足球 双色球]
03、匿名结构体
--匿名结构体:就是直接把申明拿来用
--var 结构体名 struct{
...
...
}
--代码示例:
func main(){
var s struct{
x string
y int
}
s.x = "liming"
s.y = 18
fmt.Println(s.x)
fmt.Printf("type:%T, value:%v\n", s, s)
}
04、