コンテンツにスキップ

[Golang] FAQ

GolangのFAQ

コマンドでやりたいこと

配下のpackageすべてにテストを実行したい

targetを./...と指定する。

go test ./...

実装でやりたいこと

正規表現にマッチするか確認したい

regexp.MatchStringを使う。

matched, _ := regexp.MatchString(pattern, value)

JSON文字列とstructを相互変換したい

json.Marshaljson.Unmarshallを使う。

type Human struct {
    Id   int    `json:"id"`
    Name string `json:"name"`
}

const JSON = `
{
  "id": 100,
  "name": "たろう"
}
`

func main() {
    var taro Human

    // string -> []byte -> struct
    jsonBytes1 := []byte(JSON)
    _ = json.Unmarshal(jsonBytes1, &taro)

    // struct -> []byte -> string
    jsonBytes2, _ := json.Marshal(taro)
    jsonStr := string(jsonBytes2)
}

ただし、UTF-8に限る。

クエリの値をURLエンコーディングしたい

url.QueryEscapeを使う。

url.QueryEscape("ほげ")
// %E3%81%BB%E3%81%92

URLやクエリパラメータ全体にかけるとおかしくなるので注意。

url.QueryEscape("a=100&b=ほげ")
// a%3D100%26b%3D%E3%81%BB%E3%81%92

SHA256ハッシュ値を計算したい

sha256を使う。

h := sha256.New()
h.Write([]byte("あいうえおかきくけこさしすせそ"))
hash := hex.EncodeToString(h.Sum(nil))
// a5185e2f49245929acd85cfb310b395035e9ce0eedda8609a714de9896cc0b47

ソースコードファイルのパスを取得したい

_, path, _, _ := runtime.Caller(0)

実行ファイルのパスを取得したい

path, _ := os.Executable()

カレントディレクトリ(作業ディレクトリ)のパスを取得したい

path, _ := os.Getwd()

トラブル

go getでグローバルにインストールできない

  • go.modが存在する場所でインストールしてしまっている
    • go.modが存在しない場所でインストールする必要あり
  • go moduleがOFFになっている
    • GO111MODULE=on or set GO111MODULE=on&go getの前に付ける必要あり