概述:
在面向对象编程中,一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些函数,这种带有接收者的函数,我们称为方法(method)。 本质上,一个方法则是一个和特殊类型关联的函数。
一个面向对象的程序会用方法来表达其属性和对应的操作,这样使用这个对象的用户就不需要直接去操作对象,而是借助方法来做这些事情。
//在go语言中,可以给任意的自定义类型(包括内置类型,但不包括本身是指针类型),添加相应的方法
//方法总是绑定对象实例,并隐式的将实例作为第一参数(receiver)
//格式如下: func (receiver ReceiverType)funcName(parameter)results{}
//值传递
代码如下:
package main
import "fmt"
type Student struct {
//和变量定义不同,不要写var关键字
Id int
Name string
Sex byte
Age int
Addr string
}
func (s Student) PrintInfo() {
fmt.Println("该学生姓名为:", s.Name)
s.Name = "steven"
fmt.Println("该学生姓名为:", s.Name) //steven
}
func (s *Student) PrintInfoName() {
s.Name = "steven"
fmt.Println("该学生姓名为:", s.Name)
}
func main() {
var s1 Student = Student{1, "zhao", 'm', 24, "js"}
s1.PrintInfo()
fmt.Println("该学生姓名为:", s1.Name) //zhao
//引用传递
var s2 *Student
s2 = new(Student) //如果不开辟空间的话,没有赋值的成员,会没有地址,从而报错 invalid memory address or nil pointer dereference
s2.Name = "zhao"
(s2).PrintInfoName()
fmt.Println("该学生姓名为:", s2.Name)
}