2013-07-08 10 views
21

Ich habe den Fehler:Golang: Installationsverzeichnisfehler?

go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH 

Ich bin mit Go-Version 1.1 unter OS X.

ich & Lauf bauen kann, aber keine Pakete installieren.

Meine Umgebung:

GOPATH=/Users/xwilly/Dropbox/go/project 
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/go/bin:/Users/xwilly/Dropbox/go/project/bin 

Projektbaum:

/Users/xwilly/Dropbox/go/project 
bin 
pkg 
src 

ich ohne Fehler bauen:

..:src xwilly$ go build test.go 
..:src xwilly$ go install test.go 
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src outside GOPATH 

Hier ist ein einfaches Beispiel:

xwilly$ cat test.go 
package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("Bonjour") 
} 
xwilly$ go run test.go 
Bonjour 
xwilly$ go install test.go 
go install: no install location for directory /Users/xwilly/Dropbox/go/project/src/learning outside GOPATH 
+0

Wie lautet der Paketname in test.go? – thwd

+0

der Paketname ist => Paket Haupt – Xwilly

+0

Sie können 'Paket Haupt' nicht installieren. Lesen Sie [Wie schreibe ich Go Code] (http://golang.org/doc/code.html). – thwd

Antwort

31

Command go

GOPATH environment variable

Each directory listed in GOPATH must have a prescribed structure:

The src/ directory holds source code. The path below ' src ' determines the import path or executable name.

The pkg/ directory holds installed package objects. As in the Go tree, each target operating system and architecture pair has its own subdirectory of pkg (pkg/GOOS_GOARCH).

If DIR is a directory listed in the GOPATH , a package with source in DIR/src/foo/bar can be imported as " foo/bar " and has its compiled form installed to " DIR/pkg/GOOS_GOARCH/foo/bar.a ".

The bin/ directory holds compiled commands. Each command is named for its source directory, but only the final element, not the entire path. That is, the command with source in DIR/src/foo/quux is installed into DIR/bin/quux, not DIR/bin/foo/quux . The foo/ is stripped so that you can add DIR/bin to your PATH to get at the installed commands. If the GOBIN environment variable is set, commands are installed to the directory it names instead of DIR/bin .

Here's an example directory layout:

GOPATH=/home/user/gocode 

/home/user/gocode/ 
    src/ 
     foo/ 
      bar/    (go code in package bar) 
       x.go 
      quux/    (go code in package main) 
       y.go 
    bin/ 
     quux     (installed command) 
    pkg/ 
     linux_amd64/ 
      foo/ 
       bar.a   (installed package object) 

Ihre Verzeichnisstruktur ist falsch. Sie versuchen, einen Befehl zu installieren (package main). Es sollte sich in einem Quellverzeichnis befinden, das nach Ihrem Befehl benannt ist. Siehe oben den Befehl quux.

In Ihrem Fall wird angenommen, dass Ihr Befehl billy heißen wird.

$ mkdir -p /Users/xwilly/Dropbox/go/project/src/billy 

das ist in Ihrem GOPATH. Verschieben Sie Ihre test.go Datei in dieses Verzeichnis.

laufen
$ go install billy 

Der Befehl billy sollte, es sei denn, Sie GOBIN gesetzt haben, in der in Ihrem GOPATH

/Users/xwilly/Dropbox/go/project/bin 

Verzeichnis installiert werden, die in Ihrer PATH sein sollte.

+1

Danke Peter, für die klare Erklärung :). – Xwilly

+1

+1 danke für großartige Erklärung. Ich habe das 'gobin'-Bit in den Dokumenten verpasst – Rippo