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()