2013-06-03 10 views
28

Non è chiaro per me dal tutorial di Golang come mettere il codice Golang su Github per poter importare quel codice come pacchetto da Github in seguito.Come posizionare il progetto Golang (una serie di pacchetti) su Github?

Questo è un esempio di progetto-lavoro (struttura di directory) dal tutorial Golang http://golang.org/doc/code.html:

bin/ 
    hello    # command executable 
pkg/ 
    linux_amd64/  # this will reflect your OS and architecture 
     github.com/user/ 
      newmath.a # package object 
src/ 
    github.com/user/ 
     hello/ 
      hello.go # command source 
     newmath/ 
      sqrt.go # package source 

Allora, che cosa devo fare, dove devo git init in questo spazio di lavoro, per essere in grado più avanti:

  1. Per importare solo il pacchetto newmath nel mio progetto separato. In questo modo:

    import "github.com/user/newmath" 
    
  2. di ottenere solo hello.exe eseguibile.

  3. Per ottenere l'intero spazio di lavoro del progetto (tutte le directory: bin, pkg, src).

risposta

33
  1. Per il pacchetto newmath è lo stesso di (in seguito 2.)

    $ mkdir $GOPATH/src/github.com/username/newmath 
    $ cd $GOPATH/src/github.com/username/newmath 
    $ git init 
    $ ... more git setup 
    $ touch sqrt.go 
    $ gvim sqrt.go 
    $ git add sqrt.go 
    $ git commit -a -m 'Inital commit' 
    $ git push 
    

    Ora le persone possono fare

    $ go get github.com/username/newmath 
    

    e

    import "github.com/username/newmath"

    dovrebbe ora funzionare nelle loro fonti. Il pacchetto verrà installato automaticamente sulla richiesta .

  2. darò per scontato che il comando hello e il pacchetto newmath sono non correlati, o non abbastanza strettamente legato a far parte di un unico repository .

    $ mkdir $GOPATH/src/github.com/username/hello 
    $ cd $GOPATH/src/github.com/username/hello 
    $ git init 
    $ ... more git setup 
    $ touch hello.go 
    $ gvim hello.go 
    $ git add hello.go 
    $ git commit -a -m 'Inital commit' 
    $ git push 
    

    Ora le persone possono fare

    $ go get github.com/username/hello 
    $ go install github.com/username/hello 
    

    per installare il comando di hello.

    • Non fa quasi non ha senso pubblicare il contenuto di $GOPATH/pkg al il servizio di hosting.
    • Fa sì che alcuni senso per pubblicare il contenuto di $GOPATH/bin al servizio di hosting. Ma scoraggio questa pratica per ovvi motivi . Inoltre, se stai pubblicando le fonti - i binari non sono necessari e tutti possono creare il loro (fidato) proprio.

ti sembra di essere forse ancora un po 'confuso con il termine 'lavoro'.Uno spazio di lavoro è abbastanza spesso esistente solo una volta sul computer dello sviluppatore, ma in genere contiene diversi repository. Alcuni sono stati creati dallo sviluppatore, altri "sono stati acquisiti" da Internet. Pubblicare un intero wokspace in questo caso ha poco senso.

Tuttavia, ci sono persone che utilizzano uno spazio di lavoro separato per progetto o per archivio o forse anche per pacchetto. Non so quali sono i benefici. O meglio detto, penso che non ci siano nessuno rispetto al singolo spazio di lavoro, definito da, per esempio export GOPATH=$HOME (come è il mio caso per anni senza alcun problema con esso per anni).

2

controllare questo link per maggiori informazioni:

github go wiki on github code layout

sotto è una sezione permanente:

L'applicazione e entrambe le librerie in diretta su Github, ciascuno nel proprio repository. $ GOPATH è la radice del progetto - ciascuno dei tuoi repository Github sarà controllato diverse cartelle sotto $ GOPATH.

Il layout codice sarebbe simile a questa:

$GOPATH/ 
src/ 
    github.com/ 
     jmcvetta/ 
      useless/ 
       .git/ 
       useless.go 
       useless_test.go 
       README.md 
      uselessd/ 
       .git/ 
       uselessd.go 
       uselessd_test.go 
       README.md 

Ogni cartella sotto src/github.com/jmcvetta/è la radice di un checkout git separata.

0

Se non sei un fan di git cli allora tutto quello che devi fare è caricare su github repo tramite l'interfaccia web. Assicurati di avere lo stesso nome del pacchetto con il repository (in minuscolo) e dovresti essere pronto. Ho fatto lo stesso con github.com/Digitalblueeye/enroute per la mia libreria API REST.

Problemi correlati