小编Mau*_*cio的帖子

Golang 带有接收器的函数映射

无论如何,是否可以制作函数指针的映射,但是需要接收器的函数?我知道如何使用常规函数来做到这一点:

package main

func someFunc(x int) int {
    return x
}

func main() {
    m := make(map[string]func(int)int, 0)
    m["1"] = someFunc
    print(m["1"](56))
}
Run Code Online (Sandbox Code Playgroud)

但是你能用接收器的函数做到这一点吗?像这样的东西(虽然我试过这个但它不起作用):

package main

type someStruct struct {
    x int
}

func (s someStruct) someFunc() int {
    return s.x
}

func main() {
    m := make(map[string](someStruct)func()int, 0)
    s := someStruct{56}
    m["1"] = someFunc
    print(s.m["1"]())
}
Run Code Online (Sandbox Code Playgroud)

一个明显的解决方法是将结构作为参数传递,但这比我希望的要脏一点

go

4
推荐指数
1
解决办法
3712
查看次数

if作为表达式和if作为语句之间的区别

所以我在Go语言上看这个视频 - https://www.youtube.com/watch?v=p9VUCp98ay4,并且在6:50左右,一个人问一个关于为什么他们实现的问题,如果是语句而不是表达式.这两个实现有什么区别?据我所知,我从来没有必要改变我使用基于语言的条件的方式.

编辑:他的问题是什么意思是"你需要价值而不是变数"?

compiler-construction language-design go

2
推荐指数
1
解决办法
583
查看次数

如果我在同一个Go包中的2个文件的顶部导入"fmt",它会编译两次吗?

我正在使用去1.6(我需要更新).假设我在一个包中有2个文件,我在两个文件fmt中都使用了这个包.您必须fmt在这两个文件中显式导入,或者编译器抛出和错误,这是否意味着它将fmt二进制文件存储在我的可执行文件中两次?

build go

1
推荐指数
1
解决办法
71
查看次数