go - 测试使用var声明来模拟结果的函数

标签 go

我正在测试一个在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/

相关文章:

Go:使用 strconv.ParseFloat 将字符串转换为 float 返回 0

json - 获取值 JSON 以在 golang 中创建嵌套

generics - 如何获取 map 的key

Golang gRPC 无法保持事件状态 : the client connection is closing

go - golang中如何获取bufio.Writer缓冲的数据

去1.17 : How to log error with the stack trace

go - AWS Cognito 的 SMS 多因素身份验证返回无效代码或身份验证状态

go - Redigo 多请求

google-app-engine - 目前在谷歌应用引擎中获得递增数字的最佳接受方式是什么?

go - 如何处理未知变量或如何处理多个数据库