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

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

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

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

Q&A

解決済

1回答

2267閲覧

Golang ターミナルで実行できない。

enokia

総合スコア23

Go

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

0グッド

1クリップ

投稿2021/09/23 08:27

編集2021/09/24 08:26

自分の環境にフォルダを作成してその中にmain.goファイルを作成しました。
go run main.goを実行しましたがmain.go:4:2: package config is not in GOROOT (/usr/local/go/src/config)というメッセージが出てしまい実行することができません。
わかる人いましたらご教授お願いしたいです。

package main import ( "config" "fmt" ) func main() { fmt.Println("テスト") fmt.Println(config.Config.Port) fmt.Println(config.Config.SQLDriver) fmt.Println(config.Config.DbName) fmt.Println(config.Config.LogFile) }

config.ini

[web] port = 8080 logfire = webapp.logfire [db] driver = sqllite3 name = webapp.sql

config.go

package config import "log" type ConfigList struct { Port string SQLDriver string DbName string LogFile string } var Config ConfigList func init () { LoadConfig() } func LoadConfig() { cfg, err := ini.Load("config.ini") if err != nil { log.Fatalln() } Config = ConfigList{ Port: cfg.Section("web").Key("port").MustString("8080"), SQLDriver: cfg.Section("db").Key("driver").String(), DbName: cfg.Section("db").Key("name").String(), LogFile: cfg.Section("web").Key("logfile").String(), } }

イメージ説明

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

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

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

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

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

episteme

2021/09/23 08:32

メッセージの言うとおりなのでは? configパッケージはどこにありますか?
enokia

2021/09/23 08:34

画像を追加しました。 config.goはconfigフォルダの中にあります
enokia

2021/09/24 08:26

追記しました!
guest

回答1

0

ベストアンサー

コードを見る限りだと config は使っていないので、import から削除すれば動くのかなと思っています。
(仮に Go が package を見つけられても、使っていないモジュールがあると Go はコンパイルエラーになるかと思います)

元の質問とずれてしまうのですが、
ディレクトリ構造をみるに、自前の config パッケージを利用したいのかなと思うのですが、
go の探せる場所(GOROOTなど)に無いので見つけられていないのではと思います。

go で import するパッケージは go が見えるところにないといけないのですが、
デフォルトではカレントディレクトリなどは探してくれないので、
GOPATHやGOROOTの下で作業をするか、go module を使う必要性がある認識です。

最近の Go(Go 1.11 以降)であれば、go module を使うのが一般的な気がしますので、
go module を利用すれば解決できそうに思います。
https://go.dev/blog/using-go-modules

投稿2021/09/23 12:44

kiino

総合スコア539

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

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

enokia

2021/09/23 14:46

ありがとうございます。 go moduleを使ってみたのですが全然理解できず、、、 config/config.goをmain.goで使いたいのですがどうすれば読み込むことができるのかがわかりません。
kiino

2021/09/23 18:11

> config/config.goをmain.goで使いたい どのように使いたいのでしょうか? main.go のコード上ではconfig が使われてないと思うのですが、 使われた場合はどのようになるのか、質問文に記載いただきたく思います。
enokia

2021/09/24 08:19

追記しました!!
kiino

2021/09/24 08:32

ターミナルから main.go のあるプロジェクトで以下のコマンドを実行すると go mod できると思います。 > go mod init <任意のモジュール名> 任意のモジュール名は好きな文字に変えてください(Java とか PHP でいうプロジェクト名とかパッケージ名になります) go mod した後は main.go で import してる `config` を `<設定したい Ppackage 名>/config` に変えてください。 上のがしっくりこない場合は、作業ディレクトリーを `/usr/local/go/src` いかにコピーすると動作すると思います
enokia

2021/09/24 08:51 編集

ありがとうございます。 go mod init <任意のモジュール名>を実行した後にgo run main.goを実行しましたがbuild command-line-arguments: cannot find module for path _/Users/***/dev/golang_todo_app/configというエラーが発生しました
kiino

2021/09/24 08:45

> `config` を `<設定したい Ppackage 名>/config` これを実行されましたでしょうか? 以下のようになっているか気になっています ```go import( "<設定したpackage 名>/config" ) ```
enokia

2021/09/24 09:00

できました。ありがとうございます。 go.modというファイルが新しく作れれたのですがこれはライブラリを管理するファイルなんでしょうか? また上記で上のがしっくりこない場合は、作業ディレクトリーを `/usr/local/go/src` いかにコピーすると動作すると言っていますが一般的にはgo modで行うのが普通なのでしょうか? 質問した内容ではないことを聞いて申し訳ないです
kiino

2021/09/24 09:10

> go.modというファイルが新しく作れれたのですがこれはライブラリを管理するファイルなんでしょうか? こちらの認識で問題ないかと思います。 また、go.mod を作った後に go install や go build した後に go.sum というファイルも作成されると思うのですが、こちらも go が依存するパッケージを管理するためのファイルです。 モジュールのハッシュ値をみて正常性の確認をするために記録しているファイルです。 > 一般的にはgo modで行うのが普通なのでしょうか? その認識です。 go が 1.11 以前は GOROOT 以下に作業ディレクトリーを置かないといけないという制限があったのですが、 go mod ができた際にその問題を解決しましたので、今ではgo mod を使うのが一般的な認識です。
enokia

2021/09/24 09:11

とてもわかりやすく説明していただきありがとうございます!! 理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問