今回は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}}