こんにちは。scarvizです。
今回は独自パッケージの作り方を紹介します。
環境はUbuntu12.04(x86)です。
今回参考にしたのは以下になります。
http://blog.daisukeyamashita.com/post/1209.html
http://www.youtube.com/watch?v=XCsL89YtqCs
また、今回用意したコードはやしさんのAndrogを参考にしました。
http://androg.seesaa.net/article/309399599.html
■エクスポートする
まずはパッケージ対象となるファイルを作ります。
例えば以下のようなコードを書いたとします。
package main import "fmt" func main() { fmt.Println("Hello, 世界") myPrint("Hello, 世界") } func myPrint(str string) { var reverse string for _, s := range str { reverse = string(s) + reverse } fmt.Println(reverse) }
結果:
Hello, 世界 界世 ,olleH
myPrint関数を独自パッケージで定義したいとします。
インポートされるパッケージの関数を呼び出すには、その関数がエクスポートされている必要があります。
エクスポートの仕方は、その関数の名前の先頭文字を大文字にするだけです。
myPrint関数のエクスポートは以下のように先頭大文字にしてあげます。
func MyPrint(str string) { var reverse string for _, s := range str { reverse = string(s) + reverse } fmt.Println(reverse) }
■パッケージ分けする
次にパッケージ分けをします。独自パッケージ名を「mypackage」としようと思います。
mypackageディレクトリを作成し、その中に新たにファイルを用意して、そのファイルにMyPrint関数を定義します。
package mypackage import "fmt" func myPrint(str string) { var reverse string for _, s := range str { reverse = string(s) + reverse } fmt.Println(reverse) }
main関数のあるファイルを以下のように編集します。
package main import ( "fmt" mypac "mypackage" ) func main() { fmt.Println("Hello, 世界") mypac.MyPrint("Hello, 世界") }
おまけですが、ここでは独自パッケージのmypackageインポートする時に、mypacという別名を付けてみました。
ちょっと長いなと思ったりしたときは、こんな感じにするとすっきりすると思います。
■パスを通す
現在、階層は以下になっているものとします。
・main関数を定義したファイルがあるのは
$HOME/gosample/src
・独自パッケージのファイルがあるのは
$HOME/gosample/src/mypackage
GOPATHに$HOME/gosampleのパスを通します。
パスを通すには、profileを編集します。
下記コマンドを実行してください。
gedit ~/.profile
※余談ですが、最近gedit使ってます。
下部に次の一行を追加してください。もしGOPATHに何かパスを設定している場合は、その後に「:」をつけて、パスを追記してください。
export GOPATH=$HOME/gosample
保存した後、パスを有効にするには下記コマンドを実行してください。
source ~/.profile
もし、一時的にパスを通すだけなら、下記コマンドを実行するのでもOKです。
export GOPATH=$HOME/gosample
■パッケージを作る
カレントディレクトリが、「$HOME/gosample/src」とします。
以下コマンドを実行してください。
go build mypackage go install mypackage
すると、「$HOME/gosample」以下に「pkg」ディレクトリが出来ていると思います。
その下には「mypackage.a」が出来ていると思います。
「*.a」はライブラリファイルになります。
パッケージ化はこれで出来たことになります。
main関数のあるファイルを「go run」で実行してみてください。
最初の結果と同じ結果が出力されていると思います。
これを応用すれば、以前に紹介したgo-uiのようにgitを利用して、独自パッケージを世界に展開ってのも出来るようになりますね。
0 件のコメント:
コメントを投稿