厦门企业如何建网站,网站制作aqq,网站制作宜昌怎么做?,简速做网站工作室文章目录 方法:one: 方法的概念:star2: 内嵌类型的方法和继承:star2: 多重继承 #x1f4c5; 2024年5月9日 #x1f4e6; 使用版本为1.21.5
方法
1️⃣ 方法的概念
⭐️ 在Go语言中没有类这个概念#xff0c;可以使用结构体来实现#xff0c;那类方法呢#xff1f;Go也… 文章目录 方法:one: 方法的概念:star2: 内嵌类型的方法和继承:star2: 多重继承 2024年5月9日 使用版本为1.21.5
方法
1️⃣ 方法的概念
⭐️ 在Go语言中没有类这个概念可以使用结构体来实现那类方法呢Go也同样的实现那就是方法
⭐️ 方法和函数长得很像但是它多出来了一个接收者的选项我也不知道为啥要这么高大上的名字看书的时候都给我看蒙蔽了其实就是和一个结构体(类)或者一个类型进行绑定比如下面的列子
this表示one这个类和java中的this或者python的self类似表示当前类也就是表示这个方法是属于one类的
type one struct {a intb int
}func (this one) GetA() {//this类似于java中的this表示这个类println(this.a)
}func main() {one : one{1, 2} //这里有没有很像创建一个类one.GetA() //然后调用类方法
}
⭐️ 接收者的类型可以是int,bool,string,数组函数的别名(经过type定义的)类型但是不能是一个接口类型接口是一个抽象定义方法是具体的实现而且还不能是一个指针类型但是可以是可以是前面几种类型的指针类型
⭐️ 在go中方法和类可以不用写在一个源代码(体现的很明显了)可以分开写但是必须在同一个包内
⭐️ 方法在一个接收者类型中只能存在一个(名字)不能存在多个但是可以在不同接收者类型中多个(名字)
//不同的接收者类型
func (this two) GetA() { println(this.a)
}func (this one) GetA() { println(this.a)
}⭐️ 如果想定义的方法可以在外部调用(你可以发现Go中已经实现的方法如fmt.Println它们都是开头首字母大写)前面说过需要首字母大写
⭐️ 绑定类型(传入接收者)最好是使用指针类型否则传入的接收者类只是类的一个拷贝下面这个列子就体现出来了 ps: 这里的Set和Get很像java对不对 type one struct {a intb int
}func (this one) GetA() {println(this.a)
}
func (this one) SetA(i int) int { //修改athis.a ireturn this.a
}func main() {one : one{1, 2} one.GetA() //输出1one.SetA(3) //使用Set方法修改为 3one.GetA() //输出1
}如果换成指针
type one struct {a intb int
}func (this *one) GetA() {println(this.a)
}
func (this *one) SetA(i int) int { //使用指针类型this.a ireturn this.a
}func main() {one : one{1, 2}one.GetA() //输出1one.SetA(3) //使用Set方法修改为 3one.GetA() //输出3
} 学到这里我直接懂了这玩意和类差不多甚至可以可以定义自己的get、set方法包括toString也可以(幸好之前学完了java)
type Person struct {Name stringage intsex string
}func (this *Person) GetName() { //get方法println(this.Name)
}
func (this *Person) SetName(i string) string { //set方法this.Name ireturn this.Name
}
func (this *Person) ToString() { //Tostring方法fmt.Println(name :, this.Name,, age :, this.age,, sex :, this.sex,)
}func main() {p1 : Person{zhangsan, 18, man}p1.ToString()
}⭐️ 对象的字段不应该由2个或2个以上的不同线程在同一时间去改变(在后面会学解决办法) 内嵌类型的方法和继承
⭐️ 一个匿名类型被嵌入到结构体中匿名类型的可见方法也同样被内嵌相当于继承 多重继承
⭐️ 简单来说就是一个一个子类可以继承多个父类在Java中是不被允许的但是在Go结构体匿名字段下可以实现只需要通过内嵌两个就好了
type Person struct { //人的基本Name stringage intsex string
}type Student struct { //学生School stringscore intranked int
}
type You struct { //你Person //你是个人也是一个学生Student
}func main() {p1 : You{Person: Person{lisi, 18, 男},Student: Student{茶啊二中, 99, 1},}fmt.Println(p1)
}