構造体プロパティが設定されているかどうかを調べる方法を見つけることを試みていますが、何も見つかりません。プロパティが構造体に設定されているかどうかチェックする方法
私はコルスのが、このような何か、この作品ではないことを期待:
type MyStruct struct {
property string
}
test := new(MyStruct)
if test.property {
//do something with this
}
構造体プロパティが設定されているかどうかを調べる方法を見つけることを試みていますが、何も見つかりません。プロパティが構造体に設定されているかどうかチェックする方法
私はコルスのが、このような何か、この作品ではないことを期待:
type MyStruct struct {
property string
}
test := new(MyStruct)
if test.property {
//do something with this
}
dyooと同様に、structプロパティがポインタの場合はnil
を使用できます。それらを文字列として保持したい場合は、""
と比較することができます。
package main
import "fmt"
type MyStruct struct {
Property string
}
func main() {
s1 := MyStruct{
Property: "hey",
}
s2 := MyStruct{}
if s1.Property != "" {
fmt.Println("s1.Property has been set")
}
if s2.Property == "" {
fmt.Println("s2.Property has not been set")
}
}
あなたは何かが設定されているか否かを決定するためのポインタとそのnil
値を使用することができます。たとえば、
property
type MyStruct struct {
property *string
}
にあなたの構造を変更した場合のいずれかが設定された場合には、文字列値を指すことができ、またはそれはまだ設定されていない場合にはnil
をすることができ。これはprotobufライブラリがフィールドが設定されているかどうかを調べるために使用するアプローチです。https://code.google.com/p/goprotobuf/source/browse/README#83
うん、あなたには、できれば、私は感謝感謝とにかく – mcuadros
それを行うための別の方法は、値をプライベートにし、それに対してget/setメソッドを使用することです:ここではサンプルです。 boolは設定されているかどうかを判断できます。
type MyStruct struct {
isPropertySet bool
property string
}
func (my *MyStruct) SetProperty(val string) {
my.property = val
my.isPropertySet = true
}
func (my *MyStruct) IsPropertySet() bool {
return my.isPropertySet
}
これは、複雑さを増すだけでなく、メモリを浪費します。 'IsSet'関数を絶対に望むなら、その関数の型の' nil'値を調べるべきです。 –
、私はこのことを知っているが、https://code.google.com/p/gcfg/ LIBで使用されているので、私は参照に変更することはできません他の場所に移動するかもしれないgolangのような外部サービスに完全に頼るのではなく、あなたの答えのサンプルをコードします。 – nemo