質問: os.Getenv("sheetId") return nil, token, secret, id, sheetId } ``` ディレクトリ構成 -------- project_name * main.go * sample.csv * schools + school.go * .env 環境 -- * EC2(無料枠) + t2.micro + Amazon Linux 2 AMI + MySQLの設定完了(RDSは使わない) + GOPATHは`~/go`に設定
回答: > > `os.Open("sample.csv")` を `os.Open("~/go/src/project_name/sample.csv")` に変更しても変わらず > > > `~`(tilde,チルダ)に関しては以下の回答で詳しく述べられていますので参照して下さい。 チルダ と $HOME の違いってなんでしょうか? `~` という文字はシェルにおいては特殊な意味を持つ場合がありますが、golang では `~` という文字そのものでしかありませんので、置き換える必要があります。具体的には実ユーザ(この場合は `ec2-user`)のホームディレクトリに相当しますので、環境変数 `HOME` を使います。 ``` os.Open(filepath.Join(os.Getenv("HOME"), "go/src/project_name/sample.csv")) ``` **crontab(5)** > > Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh, and LOGNAME and HOME are set from the /etc/passwd line of the crontab's owner. > > > ところで、本題とは関係ありませんが、以下の事が少し気になっています。 * `go build` で作成した実行形式ファイルではなく、`go run` でプログラムを実行している * CSV ファイルのパスをプログラムの中に直接記述している(`hard coding`) `go build` で作成した実行形式ファイルを使うのであれば、`filepath.Join(os.Getenv("HOME"), "go/src/project_name/sample.csv")` などとしなくても済むのですが。。。