2017-09-08 35 views
-3

我必須遵循兩個簡單的去文件如何使用自定義的包

main.go

package main 

import "fmt" 
import "go-package/math" 

func main() { 
    xs := []float64{1, 2, 3, 4} 
    avg := math.Average(xs) 
    fmt.Println(avg) 
} 

mymath.go

package math 
func Average(xs []float64) float64 { 
    total := float64(0) 
    for _, x := range xs { 
     total += x 
    } 
    return total/float64(len(xs)) 
} 

的文件和目錄結構是:

$GOPATH 
    src 
    go-package 
     math 
     mymath.go 
     main.go 

當我導航到$ GOPATH/src/go-打包並打開終端並運行命令:go run main.go,結果打印出來。

然後,我瀏覽到$ GOPATH/src目錄/去封裝/數學和運行命令go install,和包成功安裝在$GOPATH\pkg\windows_amd64\go-package\math.a

然後我導航回到$ GOPATH/src目錄/去包,並刪除math directoy, 我重新運行該命令go run main.go,出現錯誤:

main.go:4:8: cannot find package "go-package/math" in any of: 
     D:\softwareInstalled\Go\src\go-package\math (from $GOROOT) 
     D:\softwareInstalled\Go\GoPath\src\go-package\math (from $GOPATH) 

我已經把數學包在$GOPATH\pkg\windows_amd64\go-package\math.a

我不知道爲什麼Go沒有從這個目錄中拾取包。

我該如何使用math.a?我應該在哪裏放置它?

+3

你爲什麼要使用'math.a'? go工具不使用原始對象文件,它需要構建包。 – JimB

+0

謝謝@JimB。我是Go新手。我認爲math.a是一個編譯的東西,可以導入/用作第三方的東西,比如Java jar文件? – Tom

+2

'/ pkg /'中的預編譯包只是一個緩存。在Go 1.7中引入了僅包含二進制包,但除了提及它們之外,我還沒有看到任何人使用它們。他們的建議是在這裏:https://github.com/golang/proposal/blob/master/design/2775-binary-only-packages.md – Art

回答

0

Golang使用您導入的包的源文件。所以當你想在你的main.go中使用包go-package/math時,你不應該從src/go-package/math刪除源文件。把它們留在你的項目中,一切都很好。

此外,go get還將源文件加載到您的$GOPATH/src文件夾中。希望這可以幫助。

相關問題