Go中方法是作用在指定的数据类型上的,因此自定义类型都可以有方法。
方法的声明
func (recevier type) methodName(参数列表) (返回值列表){
方法体
return 返回值
}
- 方法与 type 类型进行绑定,该方法作用于 type 类型
- 使用 type 类型的 recevier.methodName() 来调用对应方法
- 结构体类型是值类型,在方法调用中遵循值类型的传递机制,即值拷贝
- 为了提高效率,通常方法和结构体的指针类型进行绑定
- 如果一个类型实现了 String()方法,那么fmt.Println默认会调用这个变量的String()进行输出
package BasicLearn
import "fmt"
type Car struct {
brand string
speed int
}
func (car Car) drive() {
car.speed = 100000
fmt.Println("drive方法中输出",car.brand,car.speed)
}
func (car *Car) drive2() {
//标准应该是
//(*car).speed = 666
//fmt.Println("drive2方法中输出",(*car).brand,(*car).speed)
//编译器优化后 可直接写作 car.speed
car.speed = 666
fmt.Println("drive2方法中输出~~~",car.brand,car.speed)
}
func TestMethod() {
var c Car
c.brand = "奔驰"
c.speed = 5000 /**/
c.drive()
fmt.Println("main方法中输出",c.brand,c.speed)
//drive方法中输出 奔驰 100000
//main方法中输出 奔驰 5000
c.drive2()
fmt.Println("main方法中输出",c.brand,c.speed)
//drive2方法中输出 奔驰 666
//main方法中输出 奔驰 666
}