go(新) - 结构体
1. 自定义类型与别名
1. 自定义类型 type myInt int // 指定一个新类型myInt为int类型 var a myInt // 声明a为myInt类型 2. 别名 type xInt = int // 给int类型取个别名 rune就是int32的别名
2. 结构体语法结构
1. 定义
type person struct {
name string
age int
hobby []string
}
// 使用
func main{}
var p person
p.name = '张三'
p.age = 33
p.hobby = []string{'篮球','足球','双色球'}
2. 匿名结构体(临时使用)
var s struct {
name string
age int
}
3. go语言中,函数传参,永远是拷贝。想要改原变量的值,应该传内存地址
1. 传变量名
2. 传变量地址
3. 结构体占用一块的内存空间
4. 构造函数
Python中构造函数的含义:构造函数也被称为构造器,当创建对象的时候第一个被自动调用的函数(类中的init函数)
package main
import "fmt"
// 构造函数
type person struct {
name string
age int
}
// 构造函数:约定成俗用new开头
// 当结构体比较大的时候尽量使用结构体指针,较少程序的内存开销
func newPerson(name string, age int) *person {
return &person{
name: name,
age: age,
}
}
func main() {
p1 := newPerson("aa", 18)
p2 := newPerson("bb", 29)
fmt.Println(p1, p2)
}
5. 方法与接收者
给接收者类型增加方法,即可以通过 接收者实例.方法名 的形式调用新加的方法
格式如下:
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { 函数体 }
----------------------
代码示例:
package main
import "fmt"
type dog struct {
name string
}
// 构造函数
func newDog(name string) dog {
return dog{
name: name,
}
}
// 方法是作用于特定类型的函数
// 接收者是调用该方法的具体类型变量,多用类型名首字母小写表示
func (d dog) wang() {
fmt.Printf("%s:汪汪汪~", d.name)
}
func main() {
d1 := newDog("aa")
d1.wang()
}
6. 给类型添加方法示例
1. 注意函数传值是copy一份,并对copy后的数据进行处理 package main import "fmt" type person struct { name string age int8 } // 构造person函数 func newPerson(name string, age int8) *person { return &person{ name: name, age: age, } } // 给person类型添加dream方法 func (p person) ageAdd() { p.age++ } func (p *person) ageAddTrue() { p.age++ } func main() { p1 := newPerson("aa", 34) fmt.Println(p1.age) // 结果34 p1.ageAdd() fmt.Println(p1.age) // 结果34,调用函数时,p1会被copy一份,函数处理的时copy出来的实例,所以应该传指针 p1.ageAddTrue() fmt.Println(p1.age) // 结果35 } 2. 重写内置类型,并新加方法 package main import "fmt" // 给自定义类型加方法 type myInt int func (m myInt) hello() { fmt.Println("我是一个int") } func main() { m := myInt(100) m.hello() }