golang
Go言語

Go言語における独自パッケージの扱いについて

More than 1 year has passed since last update.

環境

  • go歴 初心者
  • go1.7.4 darwin/amd64

これはなに?

Go言語(golang)を学ぶ第一歩として
開発の仕方や、ディレクトリ構造を含めて
$GOPATH に依存しない独自パッケージの扱いについてまとめました。

※ 解釈や考え方が間違っている場合はご指摘くださいm(_ _)m

概要

まず、開発環境の前提として $GOPATH というワークスペースパスを指定して開発を行うようです。

ただ、必ず決まった場所で開発するわけでもないと思うので
自由な場所でもできる方法はないかと模索してみました。

実装

試した環境としては下記の通りです。

■ディレクトリ構造

.
├── main.go
└── message
    ├── config.go
    └── post.go

main.go
package main

import "./message"

func main() {
    message.FetchSetting()
    message.Post("hogehoge")
}

config.go
package message

import "log"

func FetchSetting() {
    log.Print("pkg: message, src: config.go")
    log.Print("FetchSetting")
}
post.go
package message

import "log"

func Post(message string) {
    log.Print("pkg: message, src: post.go")
    log.Print("Post " + message)
}

■実行

suna_suna hello $ go run main.go
2017/07/26 22:44:59 pkg: message, src: config.go
2017/07/26 22:44:59 FetchSetting
2017/07/26 22:44:59 pkg: message, src: post.go
2017/07/26 22:44:59 Post hogehoge
suna_suna hello $

所感

まず、import するパッケージの指定ですが、 ./〇〇 とカレントからの相対パスを指定することで、わざわざ $GOPATH/src に置く必要がなくディレクトリ単位で完結した開発ができそうです。

また、パッケージの認識はフォルダ名を見ているようなので、その配下にあるファイル名は関連などを気にする必要がなく自由と解釈しています。

独自パッケージに関数をもたせる場合は、先頭文字を大文字にする必要がありますが、こういった書き方はあまりみたことがありません。
どういった意図があるんでしょうか:sweat_smile:
このあたりの Golang の特徴などはこれから学んでいこうと思います。

参考