Golang 方法

Golang 方法

方法和函数很像,但是方法多出了一个接收者,其实方法是类似成员函数这的存在。

如下就是一个案例,我们定义了结构Employee并给他增加了一个displaySalary()的方法

package main

import "fmt"

type Employee struct {
	name     string
	salary   int
	currency string
}

// Employee的方法
func (e Employee) displaySalary() {
	fmt.Printf("Salary of %s is %s%d", e.name, e.currency, e.salary)
}

func main() {
	emp := Employee{
		name:     "Zhang san",
		salary:   500,
		currency: "$",
	}
	emp.displaySalary()
}

我们可以看到方法和函数的区别,方法的前面还有一个接收者的存在

函数

func displaySalary() {}

方法

func (e Employee) displaySalary() {}

设置好方法之后,我们就可以使用.运算符来访问该方法

方法的接收

Go语言里有两种类型的接收者:值接收者和指针接收者。

package main

import "fmt"

type person struct {
	name string
	age  int
}

func (p person) modify() {
	p.name = "李四"
	p.age = 10
}

func main() {
	p := person{
		name: "张三",
		age:  20,
	}
	fmt.Println(p) // {张三 20}
	p.modify()
	fmt.Println(p) // {张三 20}
}

可以看到使用值传输,我们在方法内修改并不会影响到外面,说明是拷贝了一个副本

我们改变成指针接收,就可以改变外部,这个时候传递的就不是副本了,而是一个指针。

func (p *person) modify() { // 指针接收者方法
	p.name = "李四"
	p.age = 10
}

而对于指针接收者方法来说,我们有两种方法传递,都可以达到我们想要的效果

p.modify()
(&p).modify()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值