Go中方法是作用在指定的数据类型上的,因此自定义类型都可以有方法。

方法的声明

  1. func (recevier type) methodName(参数列表) (返回值列表){
  2. 方法体
  3. return 返回值
  4. }
  1. 方法与 type 类型进行绑定,该方法作用于 type 类型
  2. 使用 type 类型的 recevier.methodName() 来调用对应方法
  3. 结构体类型是值类型,在方法调用中遵循值类型的传递机制,即值拷贝
  4. 为了提高效率,通常方法和结构体的指针类型进行绑定
  5. 如果一个类型实现了 String()方法,那么fmt.Println默认会调用这个变量的String()进行输出
  1. package BasicLearn
  2. import "fmt"
  3. type Car struct {
  4. brand string
  5. speed int
  6. }
  7. func (car Car) drive() {
  8. car.speed = 100000
  9. fmt.Println("drive方法中输出",car.brand,car.speed)
  10. }
  11. func (car *Car) drive2() {
  12. //标准应该是
  13. //(*car).speed = 666
  14. //fmt.Println("drive2方法中输出",(*car).brand,(*car).speed)
  15. //编译器优化后 可直接写作 car.speed
  16. car.speed = 666
  17. fmt.Println("drive2方法中输出~~~",car.brand,car.speed)
  18. }
  19. func TestMethod() {
  20. var c Car
  21. c.brand = "奔驰"
  22. c.speed = 5000 /**/
  23. c.drive()
  24. fmt.Println("main方法中输出",c.brand,c.speed)
  25. //drive方法中输出 奔驰 100000
  26. //main方法中输出 奔驰 5000
  27. c.drive2()
  28. fmt.Println("main方法中输出",c.brand,c.speed)
  29. //drive2方法中输出 奔驰 666
  30. //main方法中输出 奔驰 666
  31. }