2016-05-30 118 views
-2

試圖在Golang包裹包裹。Go子包裝功能沒有正確導入

這是我的工作區

/bin 
/pkg 
/src 
    /github.com 
    /esbenp 
     /testrepo 
     /subpackage 
      somefuncs.go 
     main.go 

main.go

package main 

import "github.com/esbenp/testrepo/subpackage" 

func main() { 
    Somefunc() 
} 

somefuncs.go

package subpackage 

import "fmt" 

func Somefunc() { 
    fmt.Printf("yo") 
} 

我的印象是,由於Somefunc它將以一個大寫字母開始,它將被導出用於導入它的其他文件。我在控制檯中獲得的輸出是。

main.go:4: imported and not used: "github.com/esbenp/testrepo/subpackage" 
main.go:8: undefined: Somefunc 

有人能指出我在正確的方向嗎?

+0

不要把它稱爲「分裝」,甚至沒有精神。沒有「子」包裝的真正概念。包必須在某個地方居住,這些目錄嵌套在文件系統中。但是這個文件系統嵌套對於你如何使用,導入和訪問軟件包沒有意義。 (Nitpick:go工具將某些文件系統文件夾視爲vendor,internal或testdata special,並具有子包的概念)。 – Volker

回答

5

你必須通過包名前綴的函數屬於:subpackage.Somefunc()

在你有幾個子包具有相同名稱的情況下,你必須別名他們同時導入它們,否則會有衝突:

import (
    xapi "x/xx/xxx/api" 
    yapi "y/yy/yyy/api" 
) 
2

當您導入一個包時,它將在其名下提供。

爲了解決Somefunc在main.go你必須做

subpackage.Somefunc()