开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:方法介绍和使用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9675
方法介绍和使用
内容介绍:
一、方法的应用场景
二、方法的定义
三、方法的使用举例
四、对案例的总结
一、方法的应用场景
在某些情况下,我们要需要声明(定义)方法。比如 Person 结构体:除了有一些字段外(年龄,姓名...)Person 结构体还有一些行为比如:可以说话、跑步...通过学习,还可以做算术题,这时就要用方法才能完成。
二、方法的定义
Golang 中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,即通过 type 定义的类型都可以有方法,而不仅仅是 struct(结构体)
三、方法的使用
1.说明
func (n Numben) Int64(0 (int64, error)
该函数只能够与 number 相互关联,该函数就称作方法。因此方法和函数有很多相似的地方,但概念上还是有区别的。
type A struct {
Num int}
func (a A)test(){
fmt.PrintIn(a.Num)}
对上述语法的说明:
1) func (a A)test{} 表示 A 结构体有一方法,方法名为 test
2) (aA) 体现 test 方法是和 A 类型绑定的
2.举例
新建一个文件夹文件夹,命名为 methodDemo,新建一个文件 main.go。将通用代码(package main import "fmt")复制粘贴到新建文件 main.go 中,新建一个结构体type Person,字段为 string 类型,然后给 Person 类型绑定绑定一个方法:func (p Person) test(){fmt.Println("test()",p.Name)},该方法输出了其名字,可以定义一个 person 实例来验证。var p Person p.test() 为调用方法
,p变量会在调用的时候把自己传入到func (p Person) 中,类似于函数的传参由于输出时没有给p赋值,可以运行起来,但是没有名字。此时若给p赋值(p.Name = "tom"),相当于这个时候P的字段中存有值,此时输出就会有内容等于汤姆。
核心代码:
package main
import (
"fmt"
)
Type A struct{
Num int
}
//给A类型绑定一份方法
func (a A) test() {
fmt.Print1n("test() name=", a.num)
}
func main() {
}
为了方便学习,修改成如下:
package main
import (
"fmt"
)
type Person struct{
Name string
}
func (p Person) test() {
fmt.Print1n("test() name=", p.Name)
}
func main() {
var p Personp.Name = "tom"
p.test()
}
四、对案例的总结
1. test 方法和 Person 类型绑定
2.test 方法只能通过 Person 类型的变量来调用,而不能直接调用,也不能使用其它类型变量来调用,下面的调用方式都是错误的 var dog Dog 、dog.test() 、test()
3.func (p Person) test) f..p 表示哪个Person变量调用,这个p就是它的副本,这点和函数传参非常相似。
1.p这个名字,有程序员指定,但不是固定的,比如修改成 person 也是可以的。