Go tips

nullableな値を使用したいとき

  • jsonやdbスキーマを扱うときにnullableな値を扱いたい
  • しかしgoでは値型に対してデフォルト値が存在して何も指定しない場合はそれが用いられてしまう
    • i.e. stringのデフォは""
  • null的な値を扱いたいときにはpointerを使う
  • pointerのデフォ値はnilなので何も指定しないときはちゃんと何もないことが指定される

コンパイルするときに値を埋め込みたい

  • まず変数を用意する

main.go

package main

var a string
  • コンパイルするときにldflagsというオプションを使用すると値を埋め込める
go build -ldflags "-X main.a=hoge"
  • これでaはプログラム中でhogeという値になっている

埋め込みたい値がmain package以外にあるとき

  • 基本的には上のやり方で行ける
  • 変数までのパスがファイル名ではなくパッケージ名で有ることに注意

参考

pointer型のフィールドを持つstructを値ベースで等値性を検証したい

  • 以下のようなstructがあるとする
type A struct {
    B *string
}
  • これをそのまま比較するとpointerのアドレスで比較されるので同じ値のpointerを入れてても等値だとみなされない
a := "a"
b := "a"

A{&a} == A{&b} // false
  • 値ベースでの比較を行い時にはreflect.DeepEqualを使用する
reflect.DeepEqual(A{&a}, A{&b}) // true
Goにproperty based testingを布教したい GOのテストフレームワークtestifyの使い方 ラズパイ向けにCGO_ENABLEDしながらGoをクロスコンパイルするDockerfile例
View Comments
There are currently no comments.