hakeの日記

Windows環境でプログラミングの勉強をしています。

Go言語 - 複数ファイルのコンパイル

同packageの場合

他ファイル中の小文字で始まる関数や変数も参照可能。
同じフォルダに置きソースファイル名を指定しないでコンパイルする。実行ファイル名はフォルダ名になる。

\add\main.go
    \add.go

main.go

package main

import (
	"fmt"
)

func main() {
	fmt.Println(add(1, 2))  //-> 3
	fmt.Println(foo)        //-> 10
}

add.go

package main

var foo int = 10


func add(x, y int) int {
	return x + y
}

他packageを使用する場合

他のソースファイルをimportして使用する。他ファイル中の大文字で始まる関数や変数のみ参照可。
importするpackage名とフォルダ名を同じにする。ファイル名はpackage名と異なっても良い。
main.goを指定してコンパイルする。

  \main.go
  \calc\func1.go
  \calc\func2.go

main.go

package main

import (
	"fmt"
	"./calc"
)

func main() {
	fmt.Println(calc.Add(1, 2))   //-> 3
//	fmt.Println(calc.mul(1, 2))   //-> undefined: calc.mul
	fmt.Println(calc.Sub(10, 5))  //-> 5
	fmt.Println(calc.Foo)         //-> 10
//	fmt.Println(calc.bar)         //-> undefined: bar
}

func1.go

package calc

var Foo int = 10
var bar int = 20

func Add(x, y int) int {
	return x + y
}

func mul(x, y int) int {
	return x * y
}

func2.go

package calc

func Sub(x, y int) int {
	return x - y
}