分享一个 Go 方法调用姿势

2022-07-16 19:18:52 +08:00
 fumeboy
package main

import "fmt"

type a int

func (a) A() {
	fmt.Println("a")
}

func main() {
	var method = interface{ A() }.A
	var aa a = 1
	method(aa)
}

其中 method 的类型是 func(interface{A()})

暂时不清楚这个操作的意义在哪

2298 次点击
所在节点    Go 编程语言
9 条回复
lloovve
2022-07-16 19:24:36 +08:00
类似函数指针,很多地方用
Mark24
2022-07-16 19:35:40 +08:00
Golang 不懂。

动态语言里面,可以“裁剪”方法。

以动态性很高的 Ruby 为例:可以通过 method 获得任意对象方法的指针。

方法本质上就是可以被复用的逻辑。如果方法可以被“裁剪” 就可以在需要他的地方使用。非常灵活。
BeautifulSoap
2022-07-16 19:55:35 +08:00
https://www.v2ex.com/t/712577

不就是这种调用方法吗,记得在 V2EX 里被问了不止一次了
pastor
2022-07-17 13:25:20 +08:00
看样子像是:类方法如果不是通过对象实例调用,则首个参数作为对象实例,其他一些语言有类似的
lysS
2022-07-27 10:19:07 +08:00
type S struct{}

func (s S) A(x int) {}

func main() {
var method = (S{}).A
method(1)
}

还有这样呢
kkeep
2022-07-30 19:31:16 +08:00
不是,你这能编译通过么?
interface { A() } 这里面 A 是哪来的
kkeep
2022-07-30 19:34:55 +08:00
我的,有意思,是临时定义了一个 interface
var IA interface {
A()
}

var ai IA

var method = ai.A
kkeep
2022-07-30 19:38:21 +08:00
(有一说一,第一次见这种用法, 有点意思 https://go.dev/play/p/Qrabk1b7WI3
voidmnwzp
2022-08-22 12:51:59 +08:00
interface.a 相当于
func (impl interface{A()}){
impl.A()}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX