質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

3回答

739閲覧

Go言語でmainパッケージがないコードはどうやって実行している?

Fushihara

総合スコア52

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2023/02/19 01:42

実現したいこと

Go言語でpackage mainが書かれていないコードをどうやって実行しているのか教えて欲しい

前提

Go言語の解説記事ではgo run .した時、カレントディレクトリにあるpackage mainファイルのmain()関数を実行すると書かれています。
1ディレクトリにある*.goファイルは全て同じpackageである必要があります。

ですが、世に出ているサードパーティのパッケージでは、トップディレクトリのgoファイルでpackage mainではない独自の値になっている事が多いです。
例えば自分が気になった第三者のライブラリですが、ファイルを見るとpackage boxpackage isattyと記載されています。
https://github.com/nyaosorg/go-box
https://github.com/mattn/go-isatty

これらのライブラリも作者さんは開発中に何度か実行し、動作のトライ&エラーを繰り返していると思うのですが
どうやって実行しているのでしょうか?
package boxと書かれているのでgo run .は使えない認識です。
まさか、開発時のローカルではpackage mainに一時的に書き換えて、コミット時に毎回戻す という面倒な事をしているとは思えないですし、
開発中であればデバッグ実行等もしたいはずなので、何らかの方法でgo run .をしていると思うのですが。

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

パッケージとは別にパッケージを使うプロジェクトを作ればいいだけ。

  • /package_a/
  • /package_a_project/ mainがあるのはこっち。ローカルのpackage_aをimportできる。使い方のサンプルとして公開してもいい。

投稿2023/02/19 02:40

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kenji.Noguchi

2023/06/22 07:57

ベストアンサーよりこの回答の方が質問に答えていると思います。質問者さんはトップディクトリにmainパッケージを置くのが一般的と思っているフシがありますが、そういうプロジェクトはむしろ少数派でしょう。なんなら複数mainパッケージがあるプロジェクトもありますよね。
guest

0

ベストアンサー

そもそもライブラリってのは、誰かが作ったmainから呼び出して使うもんなんだから、mainが最初から存在していたらまずいでしょうに

開発中は開発者が作った(自分の都合のいいような)mainを作ってそれで動作検証を行ってるんで、それをわざわざつけられても、ユーザにとっては迷惑でしかないでしょう

投稿2023/02/19 02:07

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ファイルを見るとpackage boxやpackage isattyと記載されています。

package mainの書かれたファイルも別に存在しています(go-box)。

投稿2023/02/19 01:46

編集2023/02/19 01:47
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fushihara

2023/02/19 02:03

boxの場合、`package main`と書かれているファイルはトップディレクトリではありませんので、`go run .`では実行されませんでしたし、カレントディレクトリを移動しても同じでした。 また、isattyは改めて確認しましたが`package main`と書かれたファイルは存在しません。 個別のパッケージと言うより、go言語で第三者のモジュールを開発するにあたってどうしているのが普通なのか?が知りたいです。 https://github.com/deckarep/golang-set https://github.com/levigross/grequests 他にも色々なパッケージをランダムで見ていますが、ルートディレクトリのgoファイルで`package`はそのプロジェクトの名前を記載している物が圧倒的に多いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問