2013-12-12 5 views

答えて

5

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") 
    } 
} 

http://play.golang.org/p/YStKFuekeZ

+0

、私はこのことを知っているが、https://code.google.com/p/gcfg/ LIBで使用されているので、私は参照に変更することはできません他の場所に移動するかもしれないgolangのような外部サービスに完全に頼るのではなく、あなたの答えのサンプルをコードします。 – nemo

2

あなたは何かが設定されているか否かを決定するためのポインタとそのnil値を使用することができます。たとえば、

その後、 property
type MyStruct struct { 
    property *string 
} 

にあなたの構造を変更した場合のいずれかが設定された場合には、文字列値を指すことができ、またはそれはまだ設定されていない場合にはnilをすることができ。これはprotobufライブラリがフィールドが設定されているかどうかを調べるために使用するアプローチです。https://code.google.com/p/goprotobuf/source/browse/README#83

+0

うん、あなたには、できれば、私は感謝感謝とにかく – mcuadros

-5

それを行うための別の方法は、値をプライベートにし、それに対して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 
} 
+0

これは、複雑さを増すだけでなく、メモリを浪費します。 'IsSet'関数を絶対に望むなら、その関数の型の' nil'値を調べるべきです。 –

関連する問題