Gox言語での構造タイプ-GX10.1

春のGox

Gox言語では、Gox言語自体が動的に型付けされた言語であるため、実際には構造型(struct)はあまり使用されません。一般に、構造に類似したデータは、配列またはマッピング型として直接使用できます。内部のデータ項目は、任意の型にすることができます。 、ネストされた複合型を含みます。マッピングは、「。」を使用した同様のメンバー変数の一般的なアクセス方法もサポートします(Goxでは、インタープリターへのポインター操作の分析を簡略化するために、「。」で取得されたメンバーはすべて値型であり、別の演算子「@」は、参照/ポインタ型を取得します)。

したがって、Gox言語の構造体構造体は、Go言語の既存のライブラリ関数または構造体のメンバー関数を呼び出すために、一般的にGo言語の構造体と互換性があります。次の例を参照してください。

// 创建一个Go语言标准库中net/http包内的Client结构/对象
// 并在创建时对其成员Timeout赋以初值15秒
// 由于数据类型的要求,必须强制转换为time.Duration类型
client1T = &net_http.Client{Timeout: time.Duration(15 * time.Second)}

// 这样创建出来的是一个指针/引用
pl("%#v", client1T)

// 用内置函数new也可以创建Go语言中的结构体或对象,获得的也是指针
client2T = new(net_http.Client)

pl("%#v", client2T)

// 然后可以对其字段进行单独赋值
client2T.Timeout = time.Duration(30)

pl("%#v", client2T)

このコードには詳細なコメントがあり、結果は次のとおりです。

λ gox struct.gox
&http.Client{Transport:http.RoundTripper(nil), CheckRedirect:(func(*http.Request, []*http.Request) error)(nil), Jar:http.CookieJar(nil), Timeout:15000000000} 
&http.Client{Transport:http.RoundTripper(nil), CheckRedirect:(func(*http.Request, []*http.Request) error)(nil), Jar:http.CookieJar(nil), Timeout:0}
&http.Client{Transport:http.RoundTripper(nil), CheckRedirect:(func(*http.Request, []*http.Request) error)(nil), Jar:http.CookieJar(nil), Timeout:30}

まず、Gox言語で構造体を直接宣言する方法はありません。動的に型付けされた言語として、すべての型を宣言することはできませんが、Go言語で「a =&MyStruct {}」のようなメソッドを使用して構造体を作成できます。または、関数makeを使用して構造体タイプを直接作成して、構造体の値オブジェクトを取得し、新しい関数を使用して構造体タイプのポインター(または参照)を取得してから、「。」メソッドを使用して参照できます。構造体のメンバー変数、または「@」を使用してメンバー変数へのポインターを取得します。

別の変数が将来の構造変数に割り当てられている場合、それは実際には単なる参照です。

構造体にメソッド(つまり、メンバー関数)を追加する必要がある場合、Gox言語はオブジェクトクラスの概念を提供できます。これは後で紹介されます。

最後に、ところで、make関数を使用して、Go言語でいくつかの組み込み複合型を作成することもできます。次に例を示します。

e = make([]int, len, cap) // 创建一个 int slice,并将长度设置为 len,容量设置为 cap
f = make([][]int, len, cap) // 创建一个 []int 的 slice,并将长度设置为 len,容量设置为 cap

e = make(map[string]int) // 创建一个空的 map[string]int 类型的对象
f = make(map[string]map[string]int) // 创建一个 map[string]map[string]int 类型的对象

ch1 = make(chan bool, 2) // 得到 buffer = 2 的 chan bool
ch2 = make(chan int) // 得到 buffer = 0 的 chan int
ch3 = make(chan map[string]int) // 得到 buffer = 0 的 chan map[string]int


おすすめ

転載: blog.csdn.net/weixin_41462458/article/details/107815519