登录
首页 >  Golang >  Go问答

函数切片/数组所包含的内容是什么?

来源:stackoverflow

时间:2024-02-12 23:39:23 477浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《函数切片/数组所包含的内容是什么?》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

我似乎无法在文档中的任何地方找到答案

给定一个像这样的切片:

var funcs []func()

底层支持数组是什么?

起初我以为它是一个函数指针数组,但后来我发现这是可能的:

funcs = append(funcs, f.somefunc)
funcs[0]() // calls somefunc on the f

其中 f 是为其定义了方法/接收器函数的任何类型。

那么底层实现是什么?

示例程序

package main

import "fmt"

func printstandalone() {
    fmt.println("standalone")
}

type point struct {
    x int
    y int
}

func (p *point) printpoint() {
    fmt.println("x: ", p.x, " y: ", p.y)
}

type coordinate struct {
    lat  int
    long int
}

func (c coordinate) printcoordinate() {
    fmt.println("lat: ", c.lat, " long: ", c.long)
}

func main() {

    p := point{x: 1, y: 2}
    c := coordinate{lat: 3, long: 4}

    var funcs []func()

    funcs = append(funcs, printstandalone)
    funcs = append(funcs, p.printpoint)
    funcs = append(funcs, c.printcoordinate)

    for _, fn := range funcs {
        fn()
    }

    p = point{x: 5, y: 6}
    c = coordinate{lat: 7, long: 8}

    for _, fn := range funcs {
        fn()
    }
}

运行时,该程序打印

Standalone
X:  1  Y:  2
Lat:  3  Long:  4
Standalone
X:  5  Y:  6
Lat:  3  Long:  4

表明,根据接收者方法是通过指针还是通过值,函数是在“同一对象”或其副本上调用的。


正确答案


它是func()

您似乎面临的概念问题是,方法(或多或少)是 Go 中的普通函数,只是有一个额外的接收器,该接收器不是(调用)签名的一部分。有关此方法值的详细信息可以在此处找到:https://go.dev/ref/spec#Method_values

今天关于《函数切片/数组所包含的内容是什么?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>