Goでpackageに定義した変数を参照できない

Goで自作packageをimportして使うサンプルを書いていて上手くいかなかったのでメモ

こんなpackageをサンプルで書いてmainでimportして使用しようとした。

package gosample

var message string = "hello world"
package main

import (
    "fmt"
    "gosample"
)

func main() {
    fmt.Println(gosample.message)
}

これで実行するとエラーとなってしまう。

$ go run main.go
# command-line-arguments
./main.go:9: cannot refer to unexported name gosample.message
./main.go:9: undefined: gosample.message

参照できない。 調べるとgoは大文字で指定した場合にエクスポートされるらしい。 messageをMessageに直すとうまく動いた。

参考

ゼロから学ぶGo言語プログラミング(6) A Tour of Go 1~17まで - belbomemo