相关疑难解决方法(0)

函数声明语法:函数名前的括号内的东西

对不起,我不能在问题标题中更具体,但我正在阅读一些Go代码,我遇到了这种形式的函数声明:

func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

来自https://github.com/mattermost/platform/blob/master/api/context.go

func (s *GracefulServer) BlockingClose() bool {
    ...
}
Run Code Online (Sandbox Code Playgroud)

来自https://github.com/braintree/manners/blob/master/server.go

什么是(h handler)(s *GracefulServer)括号之间是什么意思?考虑到括号之间事物的含义,整个函数声明意味着什么?

编辑

与Go的功能和方法的区别什么不重复:这个问题来找我,因为我不知道函数名之前括号中的内容是什么,不是因为我想知道函数和方法之间有什么区别......如果我知道这个声明是一种方法我就不会'我们首先提出了这个问题.如果某人有一天和我有同样的疑问,我不相信她会去寻找"golang方法",因为她不知道情况就是这样.这就像想知道"sigma"字母在数学表达式之前的含义(不知道它意味着求和),并且有人说它是总和与其他事物之间差异的重复.

此外,这个问题的简短回答("它是接收者")无法回答"功能和方法之间的区别".

go

196
推荐指数
3
解决办法
3万
查看次数

Golang猴子修补

我明白,如果代码的结构使得它被编程为接口,那么模拟它是微不足道的; 但是,我正在使用一个我无法改变的代码库(这不是我的代码库),事实并非如此.

这个代码库是高度互联的,没有任何东西被编程到接口,只有结构,所以没有依赖注入.

结构本身只包含其他结构,所以我也不能这样做.我不相信我可以对方法做任何事情,并且存在的少数函数不是变量,所以我不知道将它们交换掉.继承在golang中不是一件事,所以这也是不行的.

在像python这样的脚本语言中,我们可以在运行时修改对象,也就是猴子补丁.在golang中我能做些什么吗?试图找出一些方法来测试/基准测试而不触及底层代码.

monkeypatching mocking go

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

标签 统计

go ×2

mocking ×1

monkeypatching ×1