Open wtysos11 opened 3 years ago
今天在阅读go-redis源代码的时候发现了这个用法,即使用一个函数(而不是结构体)可以作为receiver。 地址:github.com/go-redis/redis/v8/commands.go
github.com/go-redis/redis/v8/commands.go
写了一个小demo
package main import ( "fmt" "strconv" ) type cmdable func(a int) string func (c cmdable) Test(b int) string{ str1 := c(b+5) return "test" + str1 } func main() { var a cmdable = func(a int) string { return strconv.Itoa(a) } fmt.Println(a.Test(5)) b := func(a int) string { return strconv.Itoa(a) } //b.Test(6) var c cmdable = b fmt.Println(c.Test(7)) }
上述代码是可以运行的,b中的数据需要通过一个显式的类型转换才能够执行。
问题在于:receiver是什么?
扩展问题:接口能否作为receiver https://stackoverflow.com/questions/45652560/interfaces-and-pointer-receivers
今天在阅读go-redis源代码的时候发现了这个用法,即使用一个函数(而不是结构体)可以作为receiver。 地址:
github.com/go-redis/redis/v8/commands.go
写了一个小demo
上述代码是可以运行的,b中的数据需要通过一个显式的类型转换才能够执行。
问题在于:receiver是什么?
扩展问题:接口能否作为receiver https://stackoverflow.com/questions/45652560/interfaces-and-pointer-receivers