buildした実行ファイルから、buildしていない、かつ不定期で内容が変更するgoファイルを呼び出せるか

カテゴリー: 学習  閲覧数: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アプリ毎にサービス登録必須
・そんなのやってられない