方法接收器上的golang函数别名

前端之家收集整理的这篇文章主要介绍了方法接收器上的golang函数别名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以为常用方法创建方法别名:
  1. func method1() {
  2. fmt.Println("method1")
  3. }
  4.  
  5. var Method1 = method1

但是对于方法接收器不能做同样的事情:

  1. type Person struct {
  2. Name string
  3. }
  4.  
  5. func (p *Person) methodReciver() {
  6. fmt.Println("method reciver")
  7. }
  8.  
  9. var MethodReciver = methodReciver

在这种情况下,我得到了行var MethodReciver = methodReciver的错误

  1. undefined: methodReciver

完整代码

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. type Person struct {
  8. Name string
  9. }
  10.  
  11. func method1() {
  12. fmt.Println("method1")
  13. }
  14.  
  15. var Method1 = method1
  16.  
  17. func (p *Person) methodReceiver() {
  18. fmt.Println("method receiver")
  19. }
  20.  
  21. var MethodReceiver = methodReceiver
  22.  
  23. func main() {
  24. method1()
  25. Method1()
  26. p := Person{"Nick"}
  27. p.methodReceiver()
  28. p.MethodReceiver()
  29. }

Playground

是否可以为methodReceiver创建方法别名?

是.您可以创建一个这样的别名:
  1. var MethodReceiver = (*Person).methodReceiver

当你调用它时,你必须提供一个指向person对象的指针作为第一个参数:

  1. MethodReceiver(&p)

你可以see this in action on the Go Playground.

猜你在找的Go相关文章