2013-01-19 14 views
5

Sto cercando di creare una semplice calcolatrice in Go. Lo sto progettando in modo tale che io possa prima costruire un'interfaccia a riga di comando e facilmente passare un'interfaccia GUI. La posizione del progetto è $GOPATH/src/gocalc (tutti i percorsi qui di seguito sono relativi alla posizione del progetto). La logica dell'interfaccia della riga di comando è memorizzata in un file gocalc.go. La logica della calcolatrice è memorizzata nei file calcfns/calcfns.go e operations/operations.go. Tutti i file hanno nomi dei pacchetti identici a loro nome (estensione sans) ad eccezione del programma principale, gocalc.go, che è nelle package mainStruttura pacchetto pacchetto con pacchetti figlio/sottoreport

calcfns.go importazioni operations.go via import "gocalc/operations"; gocalc.go importazioni calcfns.go via import "gocalc/calcfns"

Per riassumere:

  • $GOPATH/src/gocalc/
    • gocalc.go
      • package main
      • import "gocalc/calcfns"
    • calcfns/
      • calcfns.go
        • package calcfns
        • import "gocalc/operations"
    • operations/
      • operations.go
        • package operations

Quando provo ad go build operations (dal dir del progetto), ho la risposta: can't load package: package operations: import "operations": cannot find package Quando provo go build gocalc/operations, ottengo can't load package: package gocalc/operations: import "gocalc/operations": cannot find package Quando provo go build operations/operations.go , compila bene

Quando provo a go build calcfns o go build gocalc/calcfns, ricevo i messaggi can't load package..., simili a quelli delle operazioni; tuttavia, quando provo a costruire calcfns/calcfns.go soffoca sulla dichiarazione di importazione: import "gocalc/operations": cannot find package

Infine, quando provo go build . dal dir progetto, soffoca simile al precedente paragrafo: import "gocalc/calcfns": cannot find package

Come devo strutturare il mio bambino pacchetti e/o dichiarazioni di importazione in modo tale che go build non avrà esito negativo?

risposta

6

Stupido, ho dimenticato di esportare la mia variabile GOPATH, quindi visualizzato "" per GOPATH. (grazie a jnml per aver suggerito di stampare go env; +1).

Dopo aver eseguito (e spostato il programma principale nella propria cartella {project-dir}/gocalc/gocalc.go), è possibile creare/installare il programma tramite go install gocalc/gocalc.

Morale della favola, assicurarsi che si digita export GOPATH=... invece di GOPATH=... quando si imposta il proprio ambiente GOPATH variabile $

1

Si prega di provare anche a aggiungere l'output di $ go env per fornire ulteriori indizi.In caso contrario, la struttura delle directory e (le istruzioni di importazione mostrate su) sembrano OK.

Tuttavia la frase

Quando provo ad andare costruire operazioni (dal dir del progetto), ho la risposta: non è possibile caricare il pacchetto: le operazioni della confezione: importazione "operazioni": non riesce a trovare pacchetto

suoni strani. Sembra suggerirti di avere

package operations 

import "operations" 

in 'operations.go', che sarebbe il colpevole allora ...?

+0

No, 'operations' non era il tentativo di importare in sé. ;) Ma il tuo "go env" mi ha mostrato che ho usato 'GOPATH = $ HOME/Projects/Go' invece di esportare GOPATH = $ HOME/Projects/Go', che era il vero colpevole. È interessante notare che 'echo $ GOPATH' produce ancora" '[abs path to ~]/Projects/Go'"; tuttavia, 'go env' mostra' GOPATH = "" 'o alcuni di questi. Grazie per il suggerimento. +1 – weberc2

-1

Molto facile:

Diciamo che ho un progetto/applicazione denominata: golang-playground

  1. Inserire la directory principale sotto GOPATH/src/, nel mio caso GOPATH=~/go/src (eseguire il comando go env per ottenere il numero GOPATH). percorso in modo completo per la mia app è ~/go/src/golang-playground enter image description here

  2. Diciamo che si desidera utilizzare la funzione Index() all'interno di file di: router.go dal mio main.go file (che ovviamente è sulla directory di root). così in main.go:

    import (
        ... 
        "golang-playground/router" 
    ) 
    
    func main() { 
        foo.Bar("/", router.Index) // Notice caps means its public outside of file 
    } 
    
Problemi correlati