V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
fumeboy
V2EX  ›  Go 编程语言

分享一个 Go 方法调用姿势

  •  
  •   fumeboy · 2022-07-16 19:18:52 +08:00 · 2302 次点击
    这是一个创建于 869 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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()})

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

    9 条回复    2022-08-22 12:51:59 +08:00
    lloovve
        1
    lloovve  
       2022-07-16 19:24:36 +08:00 via iPhone
    类似函数指针,很多地方用
    Mark24
        2
    Mark24  
       2022-07-16 19:35:40 +08:00
    Golang 不懂。

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

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

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

    不就是这种调用方法吗,记得在 V2EX 里被问了不止一次了
    pastor
        4
    pastor  
       2022-07-17 13:25:20 +08:00
    看样子像是:类方法如果不是通过对象实例调用,则首个参数作为对象实例,其他一些语言有类似的
    lysS
        5
    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
        6
    kkeep  
       2022-07-30 19:31:16 +08:00
    不是,你这能编译通过么?
    interface { A() } 这里面 A 是哪来的
    kkeep
        7
    kkeep  
       2022-07-30 19:34:55 +08:00
    我的,有意思,是临时定义了一个 interface
    var IA interface {
    A()
    }

    var ai IA

    var method = ai.A
    kkeep
        8
    kkeep  
       2022-07-30 19:38:21 +08:00
    (有一说一,第一次见这种用法, 有点意思 https://go.dev/play/p/Qrabk1b7WI3
    voidmnwzp
        9
    voidmnwzp  
       2022-08-22 12:51:59 +08:00 via iPhone
    interface.a 相当于
    func (impl interface{A()}){
    impl.A()}
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.