作者:看那个码农
公众号:看那个码农
上期内容介绍了Go语言学习之使用结构体|Go主题月
- 结构体是什么
- 结构体的定义格式
- 嵌套结构体
- 比较结构体
- 匿名结构体
本篇内容将继续带领大家走进Go语言的世界。
1.方法的来源
在上一节中,我们可以使用点表示法
来访问结构体中的数据,然而,涉及到更复杂的数据操作时,处理数据时就会不那么容易。Go语言提供了另一种数据操作的方式——通过方法
来操作。
Go语言中的方法
是一种作用于特定类型变量
的函数。这种特定类型变量叫做接收器
。
接收器的类型可以是任何类型
,不仅仅是结构体,任何类型
都可以拥有方法。
2.使用方法
方法类似函数,但有一点不同:
方法是在关键词func
后面添加了另一个参数部分
,我们称之为接收器
,用于接受单个参数。
如下面案例所示,即为创建方法的过程:
package main
import "fmt"
type number struct {
length int
width int
}
func (n *number) area() int{
return n.length*n.width
}
func main() {
sum :=number{3,5}
fmt.Printf("面积为:%v",sum.area())
}
输出为:
简单点来说:方法是接收器内部的函数。可以通过接收器,调用其内部的函数
常见的接收器类型为结构体。
3.创建方法集
方法集是可对特定数据类型
进行调用的一组方法
。在Go语言中,任何数据类型
都可有相关联的方法集。
例如在球形问题时,需要计算表面积和体积。在这种情况下,非常适用使用结构体和方法集。
具体案例如下:
package main
import (
"fmt"
"math"
)
type number struct {
radius float64
}
func (n *number) surfacearea() float64{
return float64(4) * math.Pi * (n.radius*n.radius)
}
func (n *number) volume() float64{
radius3:= n.radius * n.radius * n.radius
return (float64(4)/float64(3)) * math.Pi * radius3
}
func main() {
r :=number{3}
fmt.Printf("该球体表面积为:%v\n",r.surfacearea())
fmt.Printf("该球体的体积为:%v",r.volume())
}
输出为:
4.使用方法和指针
方法是一个接收被称为接收者的特殊参数
的函数,接收者可以是指针
,也可以是值
。
1.指针参数
func (n *number) surfacearea() float64{}
2.值参数
func (n number) surfacearea() float64{}
我们来看看二者的区别
案例如下:
package main
import (
"fmt"
)
type Human struct{
Name string
Age int
}
func (this *Human) setName(name string){
this.Name = name
fmt.Println(this)
}
func (this Human) setAge(age int){
this.Age = age
fmt.Println(this)
}
func main(){
var people Human
people.setName("Peter")
people.setAge(25)
}
输出为:
我们用一个对比案例,看看值类型
和指针类型
的区别
当
func (this *Human) setName(name string)
的接收器类型换为值参数
当
func (this Human) setAge(age int)
的接收器类型换为指针参数
案例如下:
package main
import (
"fmt"
)
type Human struct{
Name string
Age int
}
func (this Human) setName(name string){
this.Name = name
fmt.Println(this)
}
func (this *Human) setAge(age int){
this.Age = age
fmt.Println(this)
}
输出为:
我们可以发现
当接收器的的类型为值参数
时,此时不会改变调用对象的值,也就是结构体原有的值不会改变
。
当接收器的的类型为指针参数
时,此时会改变调用对象的值,也就是结构体原有的值会改变
。
5.方法和函数的区别
方法是特殊的函数,定义在某一特定的类型
上,通过类型的实例来进行调用,这个实例被叫接收者
。
接收器的类型可以是任何类型
,不仅仅是结构体,任何类型
都可以拥有方法。
- 函数将变量作为参数:
Function1(recv)
- 方法在变量上被调用:
recv.Method1()
如果你觉得这篇内容对你有帮助的话:
1、点赞支持下吧,让更多的人也能看到这篇内容
2、关注公众号:看那个码农,我们一起学习一起进步。