分享一个 Golang Go语言中的方法调用姿势

发布于 1周前 作者 caililin 来自 Go语言
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()})

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


分享一个 Golang Go语言中的方法调用姿势

更多关于分享一个 Golang Go语言中的方法调用姿势的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

类似函数指针,很多地方用

更多关于分享一个 Golang Go语言中的方法调用姿势的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 不懂。

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

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

方法本质上就是可以被复用的逻辑。如果方法可以被“裁剪” 就可以在需要他的地方使用。非常灵活。

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

不就是这种调用方法吗,记得在 V2EX 里被问了不止一次了

看样子像是:类方法如果不是通过对象实例调用,则首个参数作为对象实例,其他一些语言有类似的

type S struct{}

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

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

还有这样呢

不是,你这能编译通过么?
interface { A() } 这里面 A 是哪来的

我的,有意思,是临时定义了一个 interface
var IA interface {
A()
}

var ai IA

var method = ai.A

(有一说一,第一次见这种用法, 有点意思 https://go.dev/play/p/Qrabk1b7WI3

interface.a 相当于
func (impl interface{A()}){
impl.A()}

在Golang(Go语言)中,方法调用是一种非常常见的操作,它允许你通过接收者(receiver)来调用绑定到特定类型(包括结构体、指针等)的函数。以下是一些关键的方法和调用姿势:

  1. 值接收者的方法

    type Rectangle struct {
        Width, Height float64
    }
    
    func (r Rectangle) Area() float64 {
        return r.Width * r.Height
    }
    
    rect := Rectangle{Width: 3, Height: 4}
    fmt.Println(rect.Area()) // 输出 12
    
  2. 指针接收者的方法: 使用指针接收者可以修改接收者指向的值。

    func (r *Rectangle) Scale(factor float64) {
        r.Width *= factor
        r.Height *= factor
    }
    
    rect.Scale(2)
    fmt.Println(rect.Area()) // 输出 96
    
  3. 方法调用的简写: Go支持通过点操作符.直接调用绑定到类型的方法。

  4. 接口中的方法调用: 接口定义了方法集,任何实现了这些方法的类型都可以赋值给接口变量,并通过接口变量调用方法。

    type Shape interface {
        Area() float64
    }
    
    var s Shape = rect
    fmt.Println(s.Area()) // 输出 96
    

这些方法和调用姿势展示了Go语言中方法调用的灵活性和强大功能,无论是值接收者还是指针接收者,都能很好地满足不同的编程需求。希望这些示例能帮助你更好地理解Go语言中的方法调用。

回到顶部