在Golang中使用库

时间:2015-03-12 09:33:06

标签: go dependencies packages

首先,要清楚我来自Java世界,我已经编程了一段时间,我真的很喜欢它。

我对包装系统和导入有一个小问题,如果我要导入使用其他库的库并且我已经在我的项目中使用该库,我该如何消除重复(如果可能的话),< / p>

换句话说: A是主程序,C和B是库,然后: C被添加到A中 B使用C

然后 B也加入了A

AProject/
    src/
        LibC/
            src/
                somefiles.go
        LibB/
            src/
                LibC
                somefiles.go
        app.go

所以现在我从A开始有两个C语言库,一个在B中,因为B依赖于C。

我知道它有点令人困惑但是在Java世界中我们有Ant和Maven,而那些构建工具使我们很容易处理依赖项。

有什么想法?

2 个答案:

答案 0 :(得分:9)

在Go中,没有重复的包。

首先,您应该阅读How to Write Go Code中的Go工作区。

根据您的问题,您的目录结构应如下所示:

gopath (gopath is the path of a directory in your $GOPATH list)
├── bin
│   └── projecta
├── pkg
│   └── linux_amd64
│       └── projecta
│           ├── libb.a
│           └── libc.a
└── src
    └── projecta
        ├── a.go
        ├── libb
        │   └── b.go
        └── libc
            └── c.go

其中,

gopath/src/projecta/a.go

package main

import (
    "projecta/libb"
    "projecta/libc"
)

func a() {
    libb.B()
    libc.C()
}

func main() { a() }

gopath/src/projecta/libb/b.go

package libb

import (
    "projecta/libc"
)

func B() { libc.C() }

gopath/src/projecta/libc/c.go

package libc

func C() {}

答案 1 :(得分:5)

如果您正在谈论第三方库,那么go非常简单, 只需将导入放在源代码中,例如:

import "github.com/somepackage/somelib"

并从工作目录中的命令行运行:

go get

库的源代码将下载到$ GOPATH的src目录中。 如果你想创建自己的lib,只需在$ GOPATH / src中创建名为lib的文件夹,然后将代码放在这个文件夹中。

文件夹结构是:

$GOPATH/
src/
    github.com/
        somepackage/
            somelib/
                somelib.go
    yourlibB/
        yourlibB.go -> //import somelib here
    yourlibC/
        yourlibC.go -> //import libB here
    yourmainprogramA/
        yourmainprogramA.go -> //import somelib, libC and libB here