The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
fumeboy

分享一个 Go 方法调用姿势

  •  
  •   fumeboy · Jul 16, 2022 · 2784 views
    This topic created in 1407 days ago, the information mentioned may be changed or developed.
    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 replies    2022-08-22 12:51:59 +08:00
    lloovve
        1
    lloovve  
       Jul 16, 2022 via iPhone
    类似函数指针,很多地方用
    Mark24
        2
    Mark24  
       Jul 16, 2022
    Golang 不懂。

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

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

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

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

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

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

    还有这样呢
    kkeep
        6
    kkeep  
       Jul 30, 2022
    不是,你这能编译通过么?
    interface { A() } 这里面 A 是哪来的
    kkeep
        7
    kkeep  
       Jul 30, 2022
    我的,有意思,是临时定义了一个 interface
    var IA interface {
    A()
    }

    var ai IA

    var method = ai.A
    kkeep
        8
    kkeep  
       Jul 30, 2022
    (有一说一,第一次见这种用法, 有点意思 https://go.dev/play/p/Qrabk1b7WI3
    voidmnwzp
        9
    voidmnwzp  
       Aug 22, 2022 via iPhone
    interface.a 相当于
    func (impl interface{A()}){
    impl.A()}
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2967 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 42ms · UTC 08:56 · PVG 16:56 · LAX 01:56 · JFK 04:56
    ♥ Do have faith in what you're doing.