ホームページ >バックエンド開発 >Golang >Go プロジェクトでは、同じディレクトリにライブラリと CLI の両方を含めることはできますか?

Go プロジェクトでは、同じディレクトリにライブラリと CLI の両方を含めることはできますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 16:28:13926ブラウズ

Can a Go Project Have Both a Library and a CLI in the Same Directory?

2 つのパッケージは同じディレクトリに存在できますか?

ライブラリとコマンドライン インターフェイス (CLI) の両方を必要とするプロジェクトを開発する場合、同じディレクトリに存在する 2 つのパッケージ間で競合が発生することがよくあります。 Go コンパイラでは、エントリ ポイントとして「func main」を持つ「main」という名前のパッケージが必要であるため、ライブラリと CLI の両方に個別のパッケージを用意することは不可能であると考えられています。

解決策: ネストされたパッケージ構造

ただし、両方のパッケージを同じディレクトリ内の新しいフォルダーに移動することで、この問題を回避できます。 「main.go」ファイル。重要なのは、新しいパッケージが「$GOPATH」内の正しいパスからインポートされていることを確認することです。

例:

更新されたディレクトリ構造を検討してください:

whatever.io/
    myproject/
        a/                # New folder
            a.go
        main.go

「main.go」で、ネストされたパッケージから新しいパッケージをインポートしますパス:

package main

import (
    "../myproject/a"
)

func main() {
    a.Hello()
}

「a.go」で、ライブラリの関数を定義します:

package a

import (
    "fmt"
)

func Hello() {
    fmt.Println("hello from a")
}

ビルドと実行:

今、プロジェクトを正常にビルドして実行できます:

go run main.go
# Prints "hello from a"

go build
# Creates the executable without errors

このソリューションでは、両方のライブラリを使用できます。 (パッケージ "a") と CLI (パッケージ "main") を同じディレクトリに配置し、同じディレクトリに同じ名前の 2 つのパッケージがあることによって生じる競合を解決します。

以上がGo プロジェクトでは、同じディレクトリにライブラリと CLI の両方を含めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。