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

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


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 中的变量 IR 和 ISS 。所以当一个函数被调用时:


if IR == true {

            fmt.Println(pathID, pth.sentPacketHandler.GetCongestionWindow(), pth.sentPacketHandler.GetBytesInFlight(), pth.rttStats.SmoothedRTT(), time.Now().UnixNano(), "SS")

} else if ISS == true {

            fmt.Println(pathID, pth.sentPacketHandler.GetCongestionWindow(), pth.sentPacketHandler.GetBytesInFlight(), pth.rttStats.SmoothedRTT(), time.Now().UnixNano(), "IR")

}

我怎样才能做到这一点?


*编辑:我已经导入了包,其中file2.go中有file1.go。


隔江千里
浏览 105回答 1
1回答

天涯尽头无女友

InRecovery似乎被声明为 的方法*cubicSender,而不是函数。您不能仅通过指定声明方法的包来调用方法,您需要声明该方法的类型的实例,然后可以通过使用实例变量的名称限定该方法来调用该方法。请注意,如果您想在声明该方法的包外部使用该方法InRecovery,则需要导出定义该方法的类型(即cubicSender),或者需要以某种方式提供对未导出的实例的访问类型,例如通过导出的变量或函数。例如在congestion/file1.go:package congestiontype cubicSender struct {&nbsp; &nbsp; // ...}// exported function to provide access to the unexported typefunc NewCubicSender() *cubicSender {&nbsp; &nbsp; return &cubicSender{&nbsp; &nbsp; &nbsp; &nbsp; // ...&nbsp; &nbsp; }}func (c *cubicSender) InRecovery() bool {&nbsp; &nbsp; return false}并在quic/file2.go:package quicimport "path/to/congestion"func foobar() {&nbsp; &nbsp; c := congestion.NewCubicSender() // initialize an instance of cubicSender&nbsp; &nbsp; if c.InRecovery() { // call InRecovery on the instance&nbsp; &nbsp; &nbsp; &nbsp; // ...&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go