mquemazz
mquemazz

Reputation: 823

using libraries in Golang

First of all and to be clear I come from the Java world, and I have been programming on go for a while and I really love it.

I have a small question about the packaging system and the imports, if I am importing a library which uses another library and I am already using that library in my project, how can I eliminate the duplication(if its possible),

in other words: A is a the main program, C and B are libraries, and then: C was added to A B uses C

and then B was also added to A

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

So now I have two libraries of C one in A since the beginning and one in B because B is dependent on C.

I know its a little bit confusing but in the Java world we have Ant and Maven and those build tools make it really easy to us to handle the dependencies.

Any thoughts?

Upvotes: 3

Views: 6390

Answers (2)

peterSO
peterSO

Reputation: 166569

In Go, there is no duplication of packages.

First, you should read about Go workspaces in How to Write Go Code.

From your question, your directory structure should look something like this:

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

Where,

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() {}

Upvotes: 9

gdg
gdg

Reputation: 587

If you are talking about third-party libraries, in go is very simple to do that, just put the import in your source code, like:

import "github.com/somepackage/somelib"

and from the command line in your working directory run:

go get

the the source code of the libraries will be downloaded in the src directory of your $GOPATH. If you want to create your own lib instead, just create the folder named as the lib in $GOPATH/src and put the code in this folder.

The folders structure is:

$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

Upvotes: 6

Related Questions