go: ソースファイルの分割
今まで宗教的な理由から避けてた go 言語を、今日から勉強し始めることにしてみた。
しばらく使ってて、include や import みたくお手軽なソースの分割が必要になってきたので、そのやり方について簡単に書いときます。
● ひとつのソース
まずは基本。一個のソースだけの場合。
//
// main.go
//
package main
import (
"fmt"
)
func main() {
fmt.Printf("hello, world.\n")
}
これをビルドして、ちゃんと動くか確認します。タイプミスが無い限り、まず問題はないと思います。
$ go build main1.go
$ ./main1
hello, world.
● ふたつのソースに分割
先ほどのソースをあえて2つに分割します。注意点は、両方とも package main とすることです。
//
// main2.go
//
package main
func main() {
hello()
}
//
// mylib.go
//
package main
import (
"fmt"
)
func hello() {
fmt.Printf("hello, world.\n")
}
そしてビルドコマンドはこうなります。必要なソースファイル名を全部書くことになります。
$ go build main2.go mylib.go
$ ./main2
hello, world.
基本はこれだけです。
● 補足
実行ファイル名の指定
ビルドすると、最初のソースファイル名が実行ファイル名に使われてしまうので、-o オプションで実行ファイル名を指定しておいた方が確実です。
$ go build mylib.go main2.go # これだと mylib で実行ファイルが作成される
$ go build -o main2 mylib.go main2.go # これで main2 で作成される
ビルドスクリプトの作成
汎用のビルドスクリプトを作っておくとラクです。例えば次のような build.sh を作成して実行権限を付加すれば、
#!/bin/bash
# スペースがあるファイル名対策
IFS=$'\n'
# 拡張子が go のファイル名を検索して、配列 F に代入する
FILES=( $(find ./ -type f -iname "*.go") )
echo "Sources: ${FILES[@]}" >&2
# 実行ファイル名は a.out に固定している。
go build -o a.out "${FILES[@]}"
$ ./build.sh
$ ./a.out
hello, world.
ソースファイルが何個になっても自動で拾ってビルドしてくれます。
いいなと思ったら応援しよう!
最後まで読んでいただきまして、ありがとうございました!