カテゴリー:
学習
閲覧数:292 配信日:2018-05-01 09:12
動作確認開始作業
ディレクトリ作成
$ pwd
/home/★★/go/src
$ mkdir 20180501
$ cd 20180501/
$ pwd
/home/★★/go/src/20180501
1ファイル内で関数呼出
$ vi main.go
package main
import "log"
func main() {
a()
b()
}
func a() {
log.Print("Hello func a")
}
func b() {
log.Print("Hello func b")
}
実行してみる
$ go run main.go
2018/05/01 09:01:27 Hello func a
2018/05/01 09:01:27 Hello func b
異なるファイルの関数呼出
分割してみる
$ mkdir b
関数は大文字から始めるようにする
・大文字から始まる関数は外部に公開される
$ vi b/b.go
package b
import "log"
func B() {
log.Print("Hello func b")
}
$ vi main.go
package main
import "./b"
import "log"
func main() {
a()
b.B()
}
func a() {
log.Print("Hello func a")
}
$ go run main.go
2018/05/01 09:14:15 Hello func a
2018/05/01 09:14:15 Hello func b
build結果ファイルより、異なるファイルの関数呼出
$ go build main.go
$ ls -l
合計 2060
drwxrwxr-x 2 ★★ ★★ 17 5月 1 09:07 b
-rwxrwxr-x 1 ★★ ★★ 2105323 5月 1 09:15 main
-rw-rw-r-- 1 ★★ ★★ 120 5月 1 09:11 main.go
$ ./main
2018/05/01 09:17:01 Hello func a
2018/05/01 09:17:01 Hello func b
build実行後に、異なるファイルの関数処理内容を変更した場合、反映されるか
$ vi b/b.go
package b
import "log"
func B() {
log.Print("Hello func b15")
}
反映されない
$ ./main
2018/05/01 09:20:05 Hello func a
2018/05/01 09:20:05 Hello func b
$ go run main.go
2018/05/01 09:22:49 Hello func a
2018/05/01 09:22:49 Hello func b15
$ ./main
2018/05/01 09:22:56 Hello func a
2018/05/01 09:22:56 Hello func b
・Go言語のpackageの作り方: 長くなったコードを別ファイルに切り出す方法
go言語の学習メモ9(ファイルを分割)
go runしても分割したファイルが認識されない
・build後に「分割したファイル内容を変更した場合」でも、build結果に反映させたい
go buildでは指定されたパッケージの依存関係を解決していきながらビルドしていくのでGoで書かれていれば含まれる
・この逆をやりたい
・パッケージの依存関係を動的対応したい
下記結果のmainファイルはバイナリ
・バイナリからgoファイル呼び出したい
・どうやら無理っぽい
$ go build main.go
調査した結果分かったこと
go buildでコンパイルした結果作成されたバイナリファイルは、実行時にソースコードを読んでいない
今の方式だと、1アプリ毎にサービス登録必須
・そんなのやってられない