includeとかrequireとか
です。
外部に定義ファイルなどを持たせて分割して記載したいけどなんかあんまりなかったので調査
goでの外部のgoファイルをどのようにして読み込むかなどを
packageとかimportとかを駆使して対応するようです
packageという名前
1つなのはmainのみであとでディレクトリ単位でグルーピングできるみたい
完全にユニークというわけではなさそうです。
ディレクトリ構造
$ tree . ├── car │ └── car1.go └── sample1.go 1 directory, 2 files $
ファイル
car/car.go
package car import ( "fmt" ) type MyString string func Msg(name string){ fmt.Println(name) } type Car struct{ Name string Weight int } func (obj *Car) Init(){ obj.Name = "car" obj.Weight = 1500 } func (obj *Car) Message() { fmt.Println(obj.Name, obj.Weight) }
※外部に公開する場合はメソッド名などは先頭の1文字は大文字にする必要が有るようです
sample1.go
package main import ( "./car" "fmt" ) func main(){ fmt.Println("--- start ---") // とりあえず var message car.MyString = "aaaaa" fmt.Println(message) car.Msg("test") // struct構造体の変数に設定 var obj1 car.Car obj1.Name = "1111" obj1.Weight = 1200 fmt.Println(obj1.Name, obj1.Weight) // メソッドを使用 var obj2 car.Car obj2.Init() obj2.Message() fmt.Println("--- end ---") }
※直下のパッケージを読み込む場合は"./パッケージ名"とする必要があるよう
↓
$ go run sample1.go --- start --- aaaaa test 1111 1200 car 1500 --- end --- $
※動作しました
もう1つファイルを追加
car/car2.go
package car import ( "fmt" ) func Message2(){ test1() fmt.Println("package car2") test2() } func test1(){ fmt.Println(" --- start --- ") } func test2(){ fmt.Println(" --- end --- ") }
※小文字の場合は内部で呼び出すことなら可能
sample2.go
package main import ( "./car" "fmt" ) func main(){ fmt.Println("--- start ---") // メソッドを使用 var obj2 car.Car obj2.Init() obj2.Message() // car2.go car.Message2() fmt.Println("--- end ---") }
↓
$ go run sample2.go --- start --- car 1500 --- start --- package car2 --- end --- --- end --- [vagrant@localhost app3]$
所感
あんまりサンプルないので見つけるのに苦労しています。
いろいろなソースをみてから勉強していくしかなさそう。
普段使用しないポインタがあるのでちょっと苦労するかもしれません