LoginSignup
0
0

More than 1 year has passed since last update.

go言語のインポートについて(「Go言語でつくるインタプリタ」の1.3字句解析器のエラー対処)

Last updated at Posted at 2022-04-16

概要

「Go言語でつくるインタプリタ」の1.3字句解析器を実行中にエラーで躓いたので備忘録
対象者は

  • 解析のためにこの本を買ったけどgo言語がわからずに躓いた人
  • go言語のインポート関係で躓いてる人

環境

win11
go 1.18
書籍に記載のあったdirenvは未使用

エラー内容

lexer_test.goで以下のエラー。ヒントで隠れてるのでコードを以下に記載。
image.png

import (
	"testing"
	"monkey/token"
)

解決方法

shellで

#PROJECT_NAMEじゃなくてもなんでもいいかも
go mod init PROJECT_NAME(サンプルプログラム試しているルートフォルダ)

その後import文のmonky/tokenをプロジェクトルートを含めたパスにしてください。
image.png

なんで動かなかったのか

2021年2月にgo言語はver1.16がリリースされました。
その時に環境変数であるGO111MODULEのデフォ値がautoからONになりました。
Go言語にはモジュールのインポート方法にモジュール対応モードとGOPATHモードがありまして、

  • GO111MODULE=ON(モジュール対応モード)
    • go.modにかかれたものをもとにインポート
  • GO111MODULE=OFF(GOPATHモード)
    • GOPATHに指定されたディレクトリをもとにインポート
  • GO111MODULE=auto
    • go.modがあればONのときの挙動、なければOFFの挙動

この本の場合だとおそらくGO111MODULE=autoの挙動を想定していたのですが、アプデによって動かなくなった、ということだと思います。
(この本の初版は2018年6月のため、おそらくコードが古い)

また、go言語では相対パスではなくてプロジェクトルートフォルダ(go.modのあるディレクトリ)を基準とした絶対パスが推奨されています。

参考URL

GO111MODULEについて
https://text.baldanders.info/golang/manage-modules/

相対パスについて
https://teratail.com/questions/297324
https://selegee.com/7188/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0