[TOC]

Komenda go

uwaga komenda go jest dostępna na razie tylko w wersjach Go, które ukazały się po 2011-12-22 (weekly builds i tzw.tip

) Za pośrednictwem komendy go możemy wywołać jedno z wielu narzędzi. Ograniczę ten artykuł do tych, które służą instalacji pakietów i kompilacji projektu

Budowanie i instalacja pakietów

Istnieją trzy główne źródła pakietów:

  • biblioteka standardowa, znajdują się w głównym repozytorium projektu (i są domyślnie instalowane)
  • pakiety ze społeczności, dostępne są na githubie, code.google.com i innych tego typu serwisach
  • pakiety własne

O pakiety, z biblioteki standardowej nie musimy się martwić, bo one są w każdej dystrybucji Go.

go get

Pakiety ze środowiska, możemy zainstalować za pomocą wywołania go get <ścieżka>. To polecenie ściągnie kod z repozytorium i skompiluje.

Dla przykładu, użytkownik githuba foo stworzył repozytorium z pakietem bar. Aby go ściągnąć i móc używać należy wywołać go get następująco:

go get github.com/foo/bar

Od tej pory możemy importować go do swoich modułów np. tak import foobar "github.com/foo/bar"

.

go build, go install

Niestety sprawa się komplikuje, gdy chcemy pracować z własnymi pakietami. Nie jest to już tak intuicyjne jak w pozostałych przypadkach, a przynajmniej dopóki nie dowiemy się gdzie i jak trzymane są pakiety w go.

Katalog z pakietami Go posiada podkatalogi: src, pkg, bin. Jak łatwo się domyślić w src znajdują się źródła pakietów, w pkg pakiety trzymane są w postaci binarnej (skompilowane). Żeby rozdzielić systemy pod jakie pakiety zostały skopilowane pojawia się dodatkowy poziom zagłębienia (katalog, którego nazwa składa się z nazwy systemu i architektury). W katalogu bin znajdują się gotowe programy w go. Przykładowa struktura:

src/
    goplay/
        goplay.go
        program.go
bin/
    goplay
pkg/
    linux_amd64/
        goplay.a

Jest wiele miejsc, w których trzymane są pakiety, ale wszystkie mają powyższy schemat. W jednym z nich znajdują się pakiety standardowe. Niestety nie ma narzędzia, które nam ją w łatwy sposób wskaże.

Dla Go instalowanego za pomocą pakietu deb z launchpada to /usr/lib/go/, a dla go budowanego ze źródeł to $GOROOT (warto tam zajrzeć ze wględów poznawczych)

Aby zdefiniować dodatkowe lokalizacje pakietów należy stworzyć zmienną środowiskową $GOPATH, w której wpisujemy ścieżki tak jak zmiennej $PATH w naszym systemie operacyjnym.

Aby zbudować pakiet lub program, kod musi być umiejscowiony w jednej ze ścieżek w $GOPATH.

Przykładowe wywołania go install, go build go dla projektu o strukturze katalogów takiej jak powyżej wyglądają tak (zakładam, że jesteśmy w jednym z katalogów $GOPATH):

go build goplay

Zbuduje paczkę, w katalogu src/goplay pojawią się plik wykonywalny i spakowany plik pakietu (z rozszerzeniem .a)

go install goplay

Zbuduje paczkę i skopije binaria: program do bin, a .a do pkg w odpowiadającym katalogu z $GOPATH

go test goplay

Spróbuje uruchomić testy, których w powyższym przykładzie nie ma, przez co zwróci komunikat "? goplay [no test files]".

Jeśli chcesz odseparować kod swojego projektu w Go masz dwa wyjścia: albo pisać Makefile (inne skrypty budujące), albo dostosować jego strukturę pod działanie programów go.

Jeśli pracujesz nad wieloma projektami równolegle dobrze jest posiadać skrypt, który odpowiednio ustawia $GOPATH - z doświadczenia: tak jest wygodnie.

go tool

Jeśli potrzebujesz samego kompilatora, musisz użyć komendy go tool 6g (lub go tool 8g, w zależności czy masz architekturę 64 czy 32 bitową), aby zlinkować program wystarczy użyć go tool 6l (8l), a aby spakować pakiety go tool pack grc <archiwum> <lista skompilowanych plików>

go fix

To program, który stara się naprawić szkody powstałe w wyniku rozwoju języka. Jeśli jakiś pakiet zmienił lokalizację, albo api, to o ile jest to możliwe go fix poprawi automatycznie kod. Nie mniej czasem jest to niemożliwe.

Użycie

go fix github.com/foo/bar

Jeśli ściągaliśmy pakiet github.com/foo/bar a jego instalacja nie przebiegła pomyślnie warto spróbować tego wywołania - najczęściej pomaga.