Go言語でoptinal型もどきを使う
はじめに
go言語を使用していて、optionalが使えなくて困ったため。
ライブラリを入れる程ではないので、以下のコードを参考に書いてみた。
参考 https://github.com/markphelps/optional
実装したメソッドの概要
NewInt(i int) optional.Int
optional型を作成する。
Get() (int, bool)
optinalの中身を取り出す。値が存在するときは、value true, ないときは、0, falseを返す。
Set(i int)
optionalに値を設定する。
Present() bool
値があるか、どうかをチェックする。
コードの中身
package optional
// Int - optional int
type Int struct {
value *int
}
// NewInt - create an optional.Int from int
func NewInt(i int) Int {
return Int{value: &i}
}
// Get - get the wrapped value
func (i Int) Get() (int, bool) {
if i.Present() {
return *i.value, true
}
var zero int
return zero, false
}
// Set - set value
func (i Int) Set(j int) {
i.value = &j
}
// Present - return whether or not the value is present.
func (i Int) Present() bool {
return i.value != nil
}
あとがき
package optional
// Int - optional int
type Int struct {
value *int
}
// NewInt - create an optional.Int from int
func NewInt(i int) Int {
return Int{value: &i}
}
// Get - get the wrapped value
func (i Int) Get() (int, bool) {
if i.Present() {
return *i.value, true
}
var zero int
return zero, false
}
// Set - set value
func (i Int) Set(j int) {
i.value = &j
}
// Present - return whether or not the value is present.
func (i Int) Present() bool {
return i.value != nil
}
簡単な実装ですが、optionalっぽいことができてよかった。
optional.Int{}でNoneの状態が書けるのがよいです。
jsonにデコードしたり、他の型でのoptionalが欲しい場合は、https://github.com/markphelps/optional をインポートすると良いと思います。
Author And Source
この問題について(Go言語でoptinal型もどきを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/ShrimpF/items/236d2e3428e8bb22f787著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .