pexels-photo-3671140.jpeg

Go tips

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
Kazuki Moriyama (森山 和樹)

nullableな値を使用したいとき

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

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

  • まず変数を用意する
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
info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。