go语言开发基础28 - 之go语言里的方法定义与方法使用
1.Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。
2.方法名是小写时只可以在当前包里调用,如果想在其他包里调用方法需要将方法名首字母写成大写。
3.方法的定义格式如下:
func (形参 *接收的参数类型) 定义的方法名(参数列表) (返回值列表) {
方法逻辑代码部分
}
说明:
- 形参和参数类型表示这个方法是给那个变量定义的方法。
- 定义的方法名就是这个方法的名字,通过变量.方法名调用这个方法。
- 参数列表表示这个方法的接收参数列表。
- 返回值列表表示这个方法的返回值列表。
说明:
3.1、方法接收的参数如果是值类型时:方法里修改的只是参数的副本,不会修改参数本身。
3.2、方法接收的参数如果是指针类型时:方法里修改操作会直接作用到参数本身。
3.3、当方法接收的参数是指针时的调用:当方法接收的参数是指针是,调用需要传地址(&参数),Go已经做了优化,直接写参数即可不用加&Go会自己识别,下面是具体例子:
结构类型的变量实现方法的示例:
package main
import "fmt"
// 1.自定义Student类型的结构体
type Student struct {
Name string
Age int
Score int
Sex string
}
// 2.给Student结构体定义init方法(接收一个Student指针类型参数,方法里的所有操作会作用到参数本体),同时init方法接收(name string, age int, score int)参数,init方法没有返回值
func (self *Student) init(name string, age int, score int) { // 需要接受指针,如果不接收指针函数内部的修改只是修改的副本,修改不到本体
self.Name = name
self.Age = age
self.Score = score
fmt.Println("init:",self)
}
// 3.给Student结构体定义get方法(接收一个Student值类型参数,方法里的所有操作都是作用到参数的副本上),get方法没有接收参数,返回值为Student类型
func (self Student) get() Student {
return self
}
func main() {
// 1.定义Student类型的变量,变量名为stu
var stu Student
// stu变量执行init方法执行初始化
stu.init("Dream", 18, 200) // 执行结果为:init: &{Dream 18 200 }
stu1 := stu.get() // stu变量通过get方法获取自己的初始化结果
fmt.Println("Get:",stu1) // 打印获取的结果,执行结果为:Get: {Dream 18 200 }
}
说明:给Student结构体定义了init和get方法,后面所有定义的Student类型的变量都可以调用init和get方法。
自定义类型的变量实现方法示例
package main
import "fmt"
// 1.自定义integer类型
type integer int
// 2.给integer类型实现一个print方法(方法的参数类型是值类型,方法里的所有操作都会作用到参数的副本上),print方法没有接收参数也没有返回值。
func (self integer) print() {
fmt.Println("this is:",self)
}
// 3.给integer类型实现一个set方法(方法的参数类型是指针类型,方法里的所有操作都会作用到参数本身),set方法需要一个(new integer)参数,没有返回值
func (self *integer) set(new integer) {
*self = new
}
func main() {
var a integer // 1.定义integer类型的变量a
a = 100 // 给变量初始化,值为100
a.print() // 2.a调用print方法,执行结果:this is: 100
// set方法
a.set(20) // 3.a调用set方法,修改自己的值为:20
a.print() // 4.a调用print方法,执行结果:this is: 20
}
说明:给integer类型定义了print和set方法,后续所有自定义的integer类型的变量都可以使用print和set方法。

浙公网安备 33010602011771号