この記事は3年以上前に書かれた記事で内容が古い可能性があります
goで、関数名は大文字で始まらなければ、外部パッケージの関数は呼び出せない
2018-08-19
結構ハマったのでメモ。
goで、関数名は大文字で始まらなければ、外部パッケージの関数は呼び出せない。
例えば以下のような構造のファイルがあるとする。
main-package.go内で、sub-package.go内の関数を呼び出したい。
% tree . ├── main-package.go └── packages └── sub-package.go 1 directory, 2 files
sub-packageの中身は以下の通り。
大文字で始まるHellohello()は呼び出せるが、小文字で始まるhellohello()は呼び出せないことを確認する。
% cat packages/sub-package.go package hogehoge import ( ) func Hellohello() string { line := "Hello hello" return line } func hellohello() string { line := "hello hello" return line }
まずは、大文字で始まるHellohello()をお呼び出し。
% cat main-package.go package main import ( "fmt" "./packages" ) func main() { line := hogehoge.Hellohello() fmt.Println(line) }
正常に実行できる。
% go run main-package.go Hello hello
次に、小文字で始まるhellohello()をお呼び出し。
% cat main-package.go package main import ( "fmt" "./packages" ) func main() { line := hogehoge.hellohello() fmt.Println(line) }
参照できないと怒られる。。。
% go run main-package.go # command-line-arguments ./main-package.go:9:11: cannot refer to unexported name hogehoge.hellohello ./main-package.go:9:11: undefined: hogehoge.hellohello
以上