Go 如何使用自定义包

Go 如何使用自定义包,go,Go,我有两个简单的go文件 梅因,加油 package main import "fmt" import "go-package/math" func main() { xs := []float64{1, 2, 3, 4} avg := math.Average(xs) fmt.Println(avg) } 我的数学 package math func Average(xs []float64) float64 { total := float64(0)

我有两个简单的go文件

梅因,加油

package main

import "fmt"
import "go-package/math"

func main() {
    xs := []float64{1, 2, 3, 4}
    avg := math.Average(xs)
    fmt.Println(avg)
}
我的数学

package math
func Average(xs []float64) float64 {
    total := float64(0)
    for _, x := range xs {
        total += x
    }
    return total / float64(len(xs))
}
文件和目录结构为:

$GOPATH
  src
    go-package
       math
         mymath.go
       main.go
当我导航到$GOPATH/src/go-package,打开终端并运行命令:go-run-main.go时,结果会打印出来

然后,我导航到$GOPATH/src/go-package/math,运行命令go-install,包成功安装在$GOPATH\pkg\windows\u-amd64\go-package\math.a

然后我导航回$GOPATH/src/go包,并删除math directoy, 我重新运行命令go run main.go,出现错误:

main.go:4:8: cannot find package "go-package/math" in any of:
        D:\softwareInstalled\Go\src\go-package\math (from $GOROOT)
        D:\softwareInstalled\Go\GoPath\src\go-package\math (from $GOPATH)
我已将数学包放在$GOPATH\pkg\windows\u amd64\go package\math.a

我想知道为什么Go不从这个目录中取包裹


我如何使用math.a?我应该把它放在哪里?

Golang使用您导入的软件包的源文件。因此,当您想在main.go中使用包go-package/math时,不应该从src/go-package/math中删除源文件。把它们留在你的项目里,一切都会好起来的


此外,go get还将源文件加载到$GOPATH/src文件夹中。希望这有帮助。

你为什么要用数学。a?go工具不使用原始对象文件,它需要包来构建。谢谢@JimB。我是新来的。我认为math.a是一个编译过的东西,可以作为第三方东西导入/使用,比如JavaJAR文件?/pkg/中的预构建包只是一个缓存。Go1.7中引入了纯二进制软件包,但除了提到它们的存在之外,我还没有看到任何人使用它们。给他们的建议如下:提示:不要刻意装腔作势,只需像其他人一样使用围棋工具。保留来源并阅读。尝试非标准方法绝对不会带来任何好处。仅二进制软件包的文档如下:。这些软件的唯一用户通常是无法发布源代码但仍希望分发软件包的公司。