在Golang中使用库

mqu*_*azz 3 dependencies packages go

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

我有一个关于包装系统和导入的小问题,如果我要导入一个使用另一个库的库并且我已经在我的项目中使用该库,我怎样才能消除重复(如果可能的话),

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

然后B也被添加到A中

AProject/
    src/
        LibC/
            src/
                somefiles.go
        LibB/
            src/
                LibC
                somefiles.go
        app.go
Run Code Online (Sandbox Code Playgroud)

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

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

有什么想法吗?

pet*_*rSO 9

在Go中,没有重复的包.

首先,您应该阅读如何编写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
Run Code Online (Sandbox Code Playgroud)

哪里,

gopath/src/projecta/a.go:

package main

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

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

func main() { a() }
Run Code Online (Sandbox Code Playgroud)

gopath/src/projecta/libb/b.go:

package libb

import (
    "projecta/libc"
)

func B() { libc.C() }
Run Code Online (Sandbox Code Playgroud)

gopath/src/projecta/libc/c.go:

package libc

func C() {}
Run Code Online (Sandbox Code Playgroud)


gdg*_*gdg 5

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

import "github.com/somepackage/somelib"
Run Code Online (Sandbox Code Playgroud)

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

go get
Run Code Online (Sandbox Code Playgroud)

库的源代码将下载到$ 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
Run Code Online (Sandbox Code Playgroud)