簡體   English   中英

在同一個目錄中有兩個包有意義嗎?

[英]Does it make sense to have two packages in the same directory?

我有一個項目,它提供了一個庫(導出一些函數)並且還必須提供一個命令行界面(必須有一個可執行文件)。

目錄結構示例:

whatever.io/
    myproject/
        main.go
        myproject.go

go 編譯器需要包 mainfunc main才能開始執行。 我的圖書館需要myproject 包,我在上面放東西。 這是 go 工具在我構建另一個嘗試導入 myproject 的項目時所說的:

main.go:5:2: found packages myproject (myproject.go) and main (main.go) in $GOPATH/src/whatever.io/myproject

所以我相信沒有辦法做到這一點。

我應該將庫或 CLI 移動到另一個包嗎?

只需將您的包移動到 main.go 相同目錄中的一個新文件夾中。 請記住從 $GOPATH 的引用中導入新包。

示例:

user@user:~/p/go/test/so-multipack$ ls -R
.:
a  main.go

./a:
a.go
user@user:~/p/go/test/so-multipack$ cat main.go 
package main

import (
    "../so-multipack/a"
)
func main(){
    a.Hello()
}
user@user:~/p/go/test/so-multipack$ cat a/a.go 
package a
import (
    "fmt"
)
func Hello(){
    fmt.Println("hello from a")
}
user@user:~/p/go/test/so-multipack$ go run main.go 
hello from a
user@user:~/p/go/test/so-multipack$ go build 
user@user:~/p/go/test/so-multipack$ ls
a  main.go  so-multipack
user@user:~/p/go/test/so-multipack$ 

有用的鏈接:

go build vs go build file.go

每個目錄不能有兩個包,因此會出現錯誤。 所以@Larry Battle 所說的解決方案將您的myproject.go移動到一個新目錄。

如何編寫 go 代碼

Go 代碼必須保存在工作區中。 工作區是一個目錄層次結構,其根目錄包含三個目錄:

src 包含組織成包的 Go 源文件(每個目錄一個包),

pkg 包含包對象,以及

bin 包含可執行命令。

在大多數情況下,沒有 但是,單元測試有一個例外

工作示例:

這里有兩個不同的包( mypackagemypackage_test在1個目錄() mypackage )。 編譯器不會抱怨這個。

mypackage 文件夾:

mypackage/
  foo.go
  foo_test.go

mypackage/foo.go:

package mypackage

func Add(a int, b int) int {
    return a + b
}

mypackage/foo_test.go:

package mypackage_test

// Unit tests...

規則:

  1. 這兩個包必須具有以下名稱:

    • 目錄名稱。
    • NameOfDirectory + _test
  2. 該文件中的名稱_test包必須以結束_test.go

如果您在found packages "foo" and "bar"收到令人困惑的編譯器錯誤,則您可能違反了這些規則中的一個或多個。

一個目錄中不能有兩個 golang 文件和兩個包。 所以你需要將main.go移出myproject

移動前的目錄結構

whatever.io/
    go.mod
    myproject/
        main.go
        myproject.go

搬家后

whatever.io/
    go.mod
    main.go
    myproject/
        myproject.go

您需要更改main.go的導入路徑。 如果模塊名稱是aaa

之前

import "aaa"

需要改變這個

import "aaa/myproject"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM