无法将函数中的变量从另一个包调用到另一个非主函数golang

时间:2019-09-14 12:54:24

标签: go import package

我知道还有很多其他这样的问题,但是它们都是关于从main.go调用函数的,这不是我的情况。在file1.go中,我具有这样的功能:

token = string(ctx.FormValue("token"))

我想将这些功能分配给file2.go中的变量IR和ISS。因此,当调用一个函数时:

func (c *cubicSender) InRecovery() bool {
    return c.largestAckedPacketNumber <= c.largestSentAtLastCutback && c.largestAckedPacketNumber != 0
}

func (c *cubicSender) InSlowStart() bool {
    return c.GetCongestionWindow() < c.GetSlowStartThreshold()
}

我该怎么做?

*编辑:我已经导入了该软件包,该软件包在file2.go中具有file1.go。

1 个答案:

答案 0 :(得分:0)

InRecovery似乎被声明为*cubicSender的方法,而不是函数。您不能仅通过指定在其中声明方法的包来调用方法,您需要在其上声明方法的类型的实例,然后可以通过用实例变量的名称限定该方法来调用该方法。

请注意,如果要在声明了包的方法之外使用方法InRecovery,则需要 export 定义该方法的类型(即cubicSender),或者您需要以某种方式提供对未导出类型的实例的访问权限,例如通过导出的变量或函数。

例如在congestion/file1.go中:

package congestion

type cubicSender struct {
    // ...
}

// exported function to provide access to the unexported type
func NewCubicSender() *cubicSender {
    return &cubicSender{
        // ...
    }
}

func (c *cubicSender) InRecovery() bool {
    return false
}

quic/file2.go中:

package quic

import "path/to/congestion"

func foobar() {

    c := congestion.NewCubicSender() // initialize an instance of cubicSender
    if c.InRecovery() { // call InRecovery on the instance
        // ...
    }

}