在Go中构建和引用我自己的本地包

gss*_*der 17 compilation package go

我正在玩Google Go,我很开心(!),但是我遇到了包子系统的一些问题.

我在Mac OS X Lion上运行Go 1.0.1.我还构建了各种单个文件程序而没有问题(我还使用html/templates构建一个小的webapp而没有任何问题,它编译并运行没有任何错误).

我已经定义了一个"可重用"的包(even.go):

package even

func Even(i int) bool {
    return i % 2 == 0
}

func Odd(i int) bool {
    return i % 2 == 1
}
Run Code Online (Sandbox Code Playgroud)

和消费者计划(useeven.go):

package main

import (
    "./even"
    "fmt"
)

func main() {
    a := 5
    b := 6

    fmt.Printf("%d is even %v?\n", a, even.Even(a))
    fmt.Printf("%d is odd %v?\n", b, even.Odd(b))
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用编译"库"时

go build even.go
Run Code Online (Sandbox Code Playgroud)

我什么都没有......没有错误,没有消息......会发生什么?

我该怎么做?

Son*_*nia 11

你的问题的答案,"我该怎么做?" 在如何编写Go代码中进行了解释. 这是非常重要的东西,值得一看.

的行为go build似乎令人费解,但实际上是传统的命令行程序-无输出意味着程序成功运行.那它做了什么?为此你的回答是go help build

...否则,build会编译软件包但会丢弃结果,仅用于检查是否可以构建软件包.

什么,你想要更多?当然."如何编写Go代码"解释了这样做的好方法.为了快速修复程序,我将解释go命令期望每个包和每个可执行程序都在一个单独的目录中.如果你只是在useeven.go的位置下创建一个名为even的目录,并将even.go移动到它,那么就go run useeven.go应该像你拥有它一样运行.

  • 不行。无论如何,目前 Go 程序始终是静态链接的,无法在运行时动态链接 Go 包。`go install` 使用 `GOPATH`,如文档中所述,因此可以在导入路径中避免使用“./”等文件系统规范。 (2认同)

Cod*_*der 5

go build仅在构建“单个主包”时生成输出文件。如果你想为你的其他包输出一个文件,你应该使用go install. 这将构建该软件包并将其安装到您的pkgs目录中。


归档时间:

查看次数:

21112 次

最近记录:

6 年,7 月 前