如何通过包共享变量

How to share variables through packages

我想弄清楚如何 return 一个 package name 文件中函数的值到另一个 package。 例如,假设您有

package main

func main(){
   x := 5
   a := res.Test(x)
}
package res

func Test(x int) (y int){
    y := x*2
    return y
}

如果我编译它,我会得到一个错误:res.Test used as value。我哪里做错了,我怎么能 return y 到 main/ 和其他包? 谢谢

在最基本的情况下,Go 包必须在它们自己的文件目录中。 res 进入 ~/go/src/res/.

// ~/go/src/res/res.go
package res

func Test(x int) (y int){
    // Note that y is already declared.
    y = x*2
    return y
}

那么你的main.go就可以导入这个包了。

package main

import(
    "res"
    "fmt"
);

func main(){
   x := 5
   a := res.Test(x)
   fmt.Println(a)
}

另见


这里针对您的特定错误进行了一些进一步的调试。

请注意,您发布的 res 代码不应编译。您应该会收到类似 ./res.go:4:7: no new variables on left side of :=.

的错误

res.Test used as value 表示 res.Test 不是 return 一个值,但您仍然试图将其用作一个值。您的 res.Test 有 return 值。

此外,您的 main.go 没有导入 res。你应该得到像 undefined: res 这样的错误,但你没有。

这表明 还有另一个 res 包漂浮在某处 具有 Test 功能但没有 return值。