goで、関数名は大文字で始まらなければ、外部パッケージの関数は呼び出せない

公開日:2018-08-19 更新日:2020-10-02

Go Mac

t f B! P L

結構ハマったのでメモ。
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

以上

About me

ゆかき(♀)

アラサー駆け出しインフラエンジニア
ど文系営業からSEへ転身し日々奮闘している人

一児の母

#AP応用情報 #HTML5Lv1 #第2種電気工事士 #DCP(Data Center Practitioner) #LPIC Lv2 #VCP6.5 #CCNP #Oracle Bronze #HSKLv5 #TOEIC860

Line stamp

僭越ながら販売中

Green cat & Orange cat

Amazon