Go语言基础(七)
一、自定义类型和类型别名
二、结构体定义&初始化
三、结构体内存布局
四、构造函数
五、方法和接收者
六、练习
一、自定义类型和类型别名
// 1。自定义类型和类型别名
package main
import "fmt"
type myInt int // 自定义类型
type yourInt = int // 类型别名
func main() {
var n myInt
n = 100
fmt.Println(n)
fmt.Printf("%Tn", n)
var m yourInt
m = 100
fmt.Println(m)
fmt.Printf("%Tn", m)
}
// 100
// main.myInt
// 100
// int
自定义类型是为了方便给某种类型数据单独添加方法时会用到。
而类型别名的用处,举个例子:rune,byte。其实rune=int32,这样做的目的是为了区分,当看到rune类型就知道是在定义一个字符。
二、结构体定义&初始化
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象概念,Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。
Go语言中的基础数据类型可以表示一些事物的基本属性,但是想要表达一个事物的全部或部分属性时,这个时候再用单一的数据类型就明显无法满足需求了。Go提供了一种自定义数据类型,可以封装多个基本数据,叫做结构体。
package main
import "fmt"
type person struct {
name string
age int
gender string
hobby []string
}
func main() {
var p person
p.name = "mogul"
p.age = 25
p.gender = "boy"
p.hobby = []string{
"篮球", "乒乓球"}
fmt.Println(p)
fmt.Println(p.name)
fmt.Printf("%Tn", p)
}
1、匿名结构体
package main
import "fmt"
func main(){
// 匿名结构体,用于临时场景
var s struct {
x string
y int
}
s.x = "嘿嘿"
s.y = 18
fmt.Printf("type:%T value:%vn", s, s)
}
2、创建指针类型结构体
package main
import "fmt"
// 结构体是值类型
type person struct {
name, gender stri