7

Have just started learning about Go (do people say "Go" or "Golang"?)

I got the hello world example running. I have my GOROOT AND GOPATH set up.

Now I want to do something bit more advanced, for example open csv file, for which I found a tutorial to do that here

In order to make this script work, I need the packages that are being imported eg "bufio", "encoding/csv", etc.

Do I have to manually search https://github.com/golang/go/wiki/Projects or some other repository, download and unzip these into my GOPATH "pkg" directory?

Or does Go/Golang have something equivalent to Python's "pip install" that would do this for me?

import (
    "bufio"
    "encoding/csv"
    "os"
    "fmt"
    "io"
)

func main() {
    // Load a TXT file.
    f, _ := os.Open("C:\\Users\\bb\\Documents\\Dropbox\\Data\\bc hydro tweets\\bchtweets.csv")

    // Create a new reader.
    r := csv.NewReader(bufio.NewReader(f))
    for {
    record, err := r.Read()
    // Stop at EOF.
    if err == io.EOF {
        break
    }
    // Display record.
    // ... Display record length.
    // ... Display all individual elements of the slice.
    fmt.Println(record)
    fmt.Println(len(record))
    for value := range record {
        fmt.Printf("  %v\n", record[value])
    }
    }
}
curtisp
  • 2,227
  • 3
  • 30
  • 62
  • 1
    The assumption I did not do any research is incorrect. I did and after 60 minutes asked an earnest question and received two good answers. What else is SO for? – curtisp Jan 04 '16 at 00:46
  • 2
    Genaki, forgive me, but on [golang.org->Documents->Learning Go the second document is "How to Write Go Code"](https://golang.org/doc/code.html) which has a section called [Remote packages](https://golang.org/doc/code.html#remote) which deals with exactly your question. Can we agree that your research was probably a bit fluffy? ;) Read the docs. Thoroughly. Really, they are worth it. – Markus W Mahlberg Jan 04 '16 at 01:14
  • 1
    I did see that. One of it's first sentences "An import path can describe" makes it seem "optional" or "alternate" method of getting packages and method appeared reliant on GitHub and Mercurial which also makes it seem exceptional. I earnestly needed more. Patrick's answer nailed it for me unambiguously which is what I needed. Earnest question after earnest research. Frankly I think question is good as it relates Go to Python (cool to see Glide mentioned which supports benefit). Net effect of negative points will be to drive people away from this question which now has good replies. – curtisp Jan 04 '16 at 01:30
  • Well, people are free to voice their opinion. Do not kill the messenger ;) – Markus W Mahlberg Jan 04 '16 at 01:32
  • And messenger shouldn't kill the message either ; ) – curtisp Jan 04 '16 at 01:37
  • 1
    Only answering your first doubt. The name of the language is just Go, but you use golang on online documentation to allow proper search – PerroVerd Feb 01 '16 at 16:33

3 Answers3

11

Go has go get which is similar to pip install in Python. (ref)

UPDATE: Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.(ref)

Ruan Spies
  • 25
  • 3
Patrick Lee
  • 1,990
  • 1
  • 19
  • 24
5

Read every single line of this beautiful documentation's section: https://golang.org/doc/code.html#Organization

BTW, all packages you have in your import section are from standard library. So you don't have to install anything for this example.

Best way to install a package is go get which simply clones a git repo to your $GOPATH/src and you should stick to it as long as you can. If you must use some package version you can create fork for a specified commit and go get that fork or use one of many vendoring toolds https://github.com/golang/go/wiki/PackageManagementTools

kopiczko
  • 3,018
  • 1
  • 17
  • 24
  • Ah ok I see those packages in the GOPATH src folder. I was expecting to get them into my app's GOROOT/myapp/src folder. Getting clearer thanks. – curtisp Jan 03 '16 at 21:15
  • 1
    @genoki go trough that Organization doc and all should be clear. I don't know why you expected the lib to be there. You can read about GOROOT and GOPATH there: http://stackoverflow.com/questions/7970390/what-should-be-the-values-of-gopath-and-goroot – kopiczko Jan 03 '16 at 21:19
4

The Glide package manager is maybe your closest option to pip. You have config (and lock) files, can specify versions, etc.

Until Go 1.6 is out you'll need to set the environment variable GO15VENDOREXPERIMENT=1 for the go tool to pickup the packages in the vendor/ folder. In Go 1.6 this will be on by default. Glide stores packages in a vendor/ folder instead of the GOPATH (even though the root project needs to be in the GOPATH) so that different applications can have and regularly use different versions of dependencies.

If you want something a little different there are numerous package managers listed on the wiki.

Disclosure: I'm on of Glide's developers. Pip was one of the inspirations for it.

Matt Farina
  • 597
  • 4
  • 12