我正在测试一个在Go中调用另一个函数的函数。这就是我所拥有的
package b
type b struct {...}
func (b *b) functionB(){...}
package a
import "b"
type a struct {...}
func (a *a) functionA() {
b := b{...}
b.functionB()
...
}
我想像这样修改
b
中的函数声明:package b
type b struct {...}
var functionB = b.FuncInB
func (b *b) FuncInB(){...}
这样我就可以模拟
functionB
的返回。但是,我在a中收到一条错误消息,指出b.functionB
未定义,因为它应该是b对象的功能。我该如何工作?
最佳答案
如果要在另一个软件包中使用一个软件包的定义,则必须将其导出。通过使定义以大写字母开头来完成此操作。您的类型应定义如下:
type B struct {...}
您不能通过其类型访问功能。这条线
var functionB = b.FuncInB
将不起作用,因为您只能从现有结构中引用该函数。您应该删除此行并以其他方式调用它(请参见下文)。
您的套件a现在有两个小问题。当您想使用
B
包中的struct b
时,必须像b.B
这样引用它import "b"
b.B{...}
或对包b进行点导入:
import . "b"
B{...}
最后一件事是,在分配与包相同名称的变量时,您会遮盖包名称。在这种情况下,您应该使用其他变量名称:
func (a *a) functionA() {
myB := b{...}
myB.FunctionB()
...
}
因此,最后,您的软件包应如下所示:
package b
type B struct {
// ...
}
func (b *B) FuncInB() {
// ...
}
package a
import "b"
type a struct {
// ...
}
func (a *a) functionA () {
myB := B {
// ...
}
myB.functionB()
// ...
}
关于go - 测试使用var声明来模拟结果的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929348/