MENU

【3分で理解する】golangのnull.intの使い方について

本ページではアフィリエイトリンク(PR)が含まれています

今回はgolangのnull.intについて解説していきます。

目次

null.intとは

golangの標準パッケージにnull」というライブラリがあります。

この「null」パッケージではSQLやJSONに意図的にnullを入力したい場合に使います。golangにはゼロ値が設定されていて、intであれば「0」、stringであれば「””」に初期化されてしまいます。

このままではDBのint型のカラムに意図的にnullを入れたくても0が入ってしまいます。つまり意味のある0なのか意味のない0なのか判別できないためnullをInsertやUpdateしていいか分かりません。

そんなときに使用するのが今回紹介するnull.intです。

null.intの使い方

まずはnullパッケージをインストールします。

go get github.com/guregu/null

これでgoプロジェクトでnullパッケージを使用することができます。

null.intの宣言は以下のように行います。

func main() {
	var a null.Int
	fmt.Println(a)
}

この実行結果は{{0 false}}

null.IntはInt64(int64)とValid(bool)が格納されたNullInt64というstructを返します。

今回はint型の変数aに何も値を入れていないため、返却値のstructはゼロ値である0とnilであることを意味するfalseとなります。

次に意味のある0を変数に入れる場合のnull.intの宣言は以下のようになります。

func main() {
	a := null.NewInt(0, true)
	fmt.Println(a)
}

null.NewIntの中身を見てみると、引数にint64とboolを渡す必要があります。

// NewInt creates a new Int
func NewInt(i int64, valid bool) Int {
	return Int{
		NullInt64: sql.NullInt64{
			Int64: i,
			Valid: valid,
		},
	}
}

渡した引数をそのままInt64(int64)とValid(bool)が格納されたNullInt64というstructが返ってきます。

つまり今回の実行結果は{{0 true}}となり、0がnilではなく意味のある0ということがわかります。

int型からnull.int型に変換

では次に既にint型の変数が存在する場合にnull.int型に変換する方法を紹介します。

null.IntFrom()を使うことでint型からnull.int型に変換することができます。

func main() {
	var a int64 = 5
	fmt.Println(a)
	b := null.IntFrom(a)
	fmt.Println(b)
}

int64型の5が格納されているaに対し、null.IntFrom()でnull.int型に変換します。

こちらの実行結果は5 {{5 true}}となり、null.int型に変換されています。

null.int型からint型に変換

逆にnull.int型からint型に変換する方法について紹介します。

こちら非常に簡単です。

func main() {
	a := null.NewInt(6, true)
	fmt.Println(a)
	b := a.Int64
	fmt.Println(b)
}

何かの関数を使うことなく、null.int内のプロパティを指定することでint64型の値を取得することができます。

このコードの実行結果は{{6 true}} 6と変換できていることがわかります。

golangをもっと詳しくなりたい方に

golang学習のために筆者が実際に受講したUdemy教材をまとめています。

あわせて読みたい
【入門】golangの学習におすすめのUdemy教材5選 これから業務でgolangを使うことになった方、これからgolangを使ってキャリアを歩んでいきたいという方でどのように学習していこうか悩んでいる方もいるかと思います。 ...

golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。

あわせて読みたい
【入門】golangの学習におすすめの本/書籍7選 これから業務でgolangを使うことになった方、これからgolangを使ってキャリアを歩んでいきたいという方でどのように学習していこうか悩んでいる方もいるかと思います。 ...
タメになったらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!
目次