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