我知道还有很多其他这样的问题,但是它们都是关于从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。
答案 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
// ...
}
}