2016-07-22 81 views
3

相對進口我有以下目錄結構在goLang

utils(pkg) 
    | auth.go (has a function names test1) 
controllers(pkg) 
    | login.go (has a function names test2) 

我試圖從login.go訪問功能Test1的去項目。這是我所做的

import "../utils" 

func test2(c *gin.Context) bool{ 
     utils.test1() 
} 

但我總是得到Unresolved reference test1。我是新來的。任何人都可以幫助我爲什麼得到這個錯誤?

回答

11

不,在Golang沒有相對的進口。
您應該使用考慮GOPATH的abs路徑:

GOPATH環境變量指定您的工作空間的位置。這可能是開發Go代碼時需要設置的唯一環境變量。要開始,請創建一個工作空間目錄並相應地設置GOPATH。見:https://golang.org/doc/code.html#GOPATH

導入路徑:

一個導入路徑是唯一標識包的字符串。程序包的導入路徑對應於其在工作區內或遠程存儲庫中的位置(如下所述)。

標準庫中的軟件包被賦予短的導入路徑,如「fmt」和「net/http」。對於你自己的軟件包,你必須選擇一個基本路徑,這個基本路徑不可能與未來添加到標準庫或其他外部庫中相沖突。

如果你把你的代碼的源代碼庫的地方,那麼你應該使用源代碼庫的根目錄下的基本路徑。例如,如果您在github.com/user上有GitHub帳戶,那應該是您的基本路徑

注意,你並不需要在你的代碼發佈到遠程倉庫之前,你可以建造它。組織代碼就好像你將在某天發佈一樣,這只是一個好習慣。在實踐中,您可以選擇任意路徑名稱,只要它是標準庫和更大的Go生態系統所獨有的。

例子:

這個例子假設你已經在你的操作系統環境中設置GOPATH=/goworkdir

文件:goworkdir/src/project1/utils/auth.go

package utils 

func Test1() string { 
    return "Test1" 
} 

文件:goworkdir/src/project1/controllers/login.go

package controllers 

import "project1/utils" 

func Test2() string { 
    return utils.Test1() 
} 

文件:goworkdir/src/project1/main.go

package main 

import (
    "fmt" 
    "project1/controllers" 
) 

func main() { 
    fmt.Println(controllers.Test2()) 
} 

現在,如果你go run main.go你應該看到輸出:

Test1 
0

我想你可以在你的源文件旁邊打一個供應商目錄,這個目錄就像一個相對的GOPATH,然後創建一個相對的符號鏈接,鏈接到你想要在供應商目錄中導入的包,然後像供應商目錄是$ GOPATH/src /那樣導入包。