golang null.int型の扱い方

Pocket

今回はnulI.int型を使うにあたって、少し手こずってしまったので使い方に関して簡単に共有していきたいと思います。 

1.null.int型からint型に変換

null.int型からint型への変換は関数などは使用せずにnull.int型内のプロパティを指定することでint型を取得することができます。

 

package main

import (
	"log"

	"github.com/guregu/null"
)

func main() {
	numNullInt := null.NewInt(100, true)
	log.Printf("%T\n%v", numNullInt, numNullInt)

	numInt := numNullInt.Int64
	log.Printf("%T\n%v", numInt, numInt)
}

出力結果は以下のような感じです!

$ go run main.go
2021/03/07 20:41:22 null.Int
{{100 true}}
2021/03/07 20:41:22 int64
100

 

この時、null.int型内のvalidプロパティがtrueであることを確認することがより丁寧な使い方みたいです。

package main

import (
	"log"

	"github.com/guregu/null"
)

func main() {
	numNullInt := null.NewInt(100, true)
	log.Printf("%T\n%v", numNullInt, numNullInt)

	if numNullInt.Valid == true {
		numInt := numNullInt.Int64
		log.Printf("%T\n%v", numInt, numInt)
	}
}

このようにしておくとnull.int型に何も入っていない場合(null)はint型に変換されることはありません。

 

もしDB内にnullを入れたい場合でも勝手に0が入ってしまうことを防ぐことができます。validを判定せずに定義するとそのまま0が入ってしまう。

package main

import (
	"log"

	"github.com/guregu/null"
)

func main() {
	var numNullInt null.Int
	log.Printf("%T\n%v", numNullInt, numNullInt)

	numInt := numNullInt.Int64
	log.Printf("%T\n%v", numInt, numInt)
}
$ go run main.go
2021/03/07 21:01:21 null.Int
{{0 false}}
2021/03/07 21:01:21 int64
0

 

2.int型からnull.int型に変換

null.IntFrom(引数)でint→null.int型に変換することができます。

以下が簡単なサンプルです。

import (
	"log"

	"github.com/guregu/null"
)

func main() {
	// null.int型を定義
	var numInt int64 = 100
	log.Printf("%T", numInt)

	numNullInt := null.IntFrom(numInt)
	log.Printf("%T\n%v", numNullInt, numNullInt)
}

出力結果は以下のようになります。

null.int型に変換されていることがわかります。

$ go run main.go
2021/03/07 20:31:15 int64
2021/03/07 20:31:15 null.Int
{{100 true}}