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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

解決済

Goの環境構築ができない

aaaa____
aaaa____

総合スコア2

Go

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

1回答

0評価

1クリップ

652閲覧

投稿2022/06/22 12:14

編集2022/06/23 21:58

質問内容

「Go言語でつくるインタプリタ」という参考書をもとに行っているのですが,

% go test ./lexer

という命令を実行すると

go: go.mod file not found in current directory or any parent directory; see 'go help modules'

というように出力され,実行されません.どこを修正すればよいのでしょうか.

正しい出力は以下のようになるようです.

ok monkey/lexer 0.007s

lexer.go

Go

package lexer import "monkey/token" type Lexer struct { input string position int //入力における現在の位置(現在の文字を指し示す) readPosition int //これから読み込む位置(現在の次の文字) ch byte //現在検査中の文字 } func New(input string) *Lexer { l := &Lexer{input: input} l.readChar() return l } func (l *Lexer) readChar() { if l.readPosition >= len(l.input) { l.ch = 0 } else { l.ch = l.input[l.readPosition] } l.position = l.readPosition l.readPosition += 1 } func (l *Lexer) NextToken() token.Token { var tok token.Token switch l.ch { case '=': tok = newToken(token.ASSIGN, l.ch) case ';': tok = newToken(token.SEMICOLON, l.ch) case '(': tok = newToken(token.LPAREN, l.ch) case ')': tok = newToken(token.RPAREN, l.ch) case ',': tok = newToken(token.COMMA, l.ch) case '+': tok = newToken(token.PLUS, l.ch) case '{': tok = newToken(token.LBRACE, l.ch) case '}': tok = newToken(token.RBRACE, l.ch) case 0: tok.Literal = "" tok.Type = token.EOF } l.readChar() return tok } func newToken(tokenType token.TokenType, ch byte) token.Token { return token.Token{Type: tokenType, Literal: string(ch)} }

現状1

MacOSで,ディレクトリ構成は以下のようになっています.

~/Go/monkey/lexer

monkeyディレクトリ,lexerディレクトリで上記の命令を実行しても同じ文が表示されます.

現状2

,以下に示す,hello.goを次のように命令した場合はきちんと望み通りの出力が出てきます.

Go

package main import "fmt" func main() { fmt.Printf("hello, world\n") }
% go run hello.go hello, world

やったこと

やったこと

・Homebrewのインストール
https://brew.sh/index_ja

・% brew -v
Homebrew 3.5.2
で入ったことの確認

・% brew install direnv
でdirenvのインストール

・~/.zshrcに
export GOPATH=$HOME/go
export EDITOR=vi
eval "$(direnv hook bash)"
を書き込む

・source .zshrc

https://qiita.com/hinastory/items/336c2d944fdb8ae11efb
を確認したがあまり対処方法がわからなかった.

追記

.zshrcに次のものを書き加えた.

export GO111MODULE=off

こののち,実行してみると以下のようになりました.

monkey % go test ./lexer found packages main (hello.go) and lexer (lexer.go) in /Users/SSS/Go/monkey/lexer lexer/lexer.go:4:2: cannot find package "monkey/token" in any of: /usr/local/go/src/monkey/token (from $GOROOT) /Users/SSS/go/src/monkey/token (from $GOPATH)

packageが見つからないのは何故?
tokenディレクトリはmonkeyディレクトリの下,つまりlexerディレクトリと同じ階層にあります.

~/Go/monkey/lexer, token

追記2

vscode上でそもそも
import "monkey/token"
がエラーとして強調されていて

could not import monkey/token (cannot find package "monkey/token" in any of /usr/local/go/src/monkey/token (from $GOROOT) /Users/SSS/go/src/monkey/token (from $GOPATH))

となっているが,これはなぜなのでしょうか.
イメージ説明

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

melian

2022/06/22 12:33

「Go言語でつくるインタプリタ」(の原書)は Go Modules が正式導入される前に執筆されましたので、 export GO111MODULE=off としておくとよいかもしれません。
aaaa____

2022/06/22 12:41

ご回答ありがとうございます. ~/.zshrcにという認識であっていますでしょうか. 試しに.zshrcに記述し,source .zshrcをしたのち,実行してみたところ次のようになりました ``` monkey % go test ./lexer found packages main (hello.go) and lexer (lexer.go) in /Users/SSS/Go/monkey/lexer lexer/lexer.go:4:2: cannot find package "monkey/token" in any of: /usr/local/go/src/monkey/token (from $GOROOT) /Users/SSS/go/src/monkey/token (from $GOPATH) ```
melian

2022/06/22 13:18

一応、原書の著者がコードを公開してくれています。 https://interpreterbook.com/waiig_code_1.3.zip 中身を眺めると、direnv を利用して GOPATH を適切に設定する様な構成になっています。こちらをダウンロードして試してみてはどうでしょうか。
aaaa____

2022/06/23 11:01

全部の章をダウンロードしてやってみましたが同じような結果になってしまいました.

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Go

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。