Golang (Go プログラミング言語) は、Google によって開発された、静的に型指定され、同時実行され、コンパイルされるプログラミング言語です。バックエンド サービス開発、ネットワーク アプリケーション開発、クラウド コンピューティングで広く使用されています。 Golang は 2009 年に初めてリリースされた比較的新しいプログラミング言語ですが、企業開発者やオープンソース コミュニティの間で人気の選択肢となっています。
Golang の成功は、そのシンプルさ、学習の容易さ、効率的な同時実行サポートによるものです。ただし、他のプログラミング言語と同様に、いくつかのわかりにくい機能があります。その中で最も一般的に言及されるのは == 演算子です。この記事では、Golang と == の違いについて説明します。
== 目的
Golang では、== 演算子は 2 つの値が等しいかどうかを比較するために使用されます。基本データ型 (整数、浮動小数点型、文字列など)、複合データ型 (配列、スライス、構造体など)、参照型 (マップやポインターなど) を含むさまざまな種類のデータを比較するために使用できます。 。
比較に == を使用すると、2 つの値が等しい場合は true が返され、そうでない場合は false が返されます。
ここでは、== 演算子を使用して 2 つの整数が等しいかどうかを比較する方法の例を示します。
package main import "fmt" func main() { a := 1 b := 2 if a == b { fmt.Println("a 等于 b") } else { fmt.Println("a 不等于 b") } }
上記のコードでは、a と b は 2 つの整数変数です。 if ステートメントでは、== 演算子を使用して、それらが等しいかどうかを判断します。 a と b は等しくないため、a と b は等しくないことを出力します。
== 問題
== 演算子は、異なる型の値を比較するために使用できますが、簡単にいくつかの問題が発生する可能性もあります。これは、Golang では == 演算子が値だけでなく型も比較するためです。したがって、2 つの値を比較し、それらの型が異なる場合、それらは等しくありません。
この問題を説明する例を次に示します。
package main import "fmt" func main() { var a int = 1 var b uint = 1 if a == b { fmt.Println("a 等于 b") } else { fmt.Println("a 不等于 b") } }
上記のコードでは、int 型の変数 a と uint 型の変数 b を比較します。種類が異なるため、同等ではありません。したがって、a は b に等しくないことが出力されます。
== とポインター
Golang では、== 演算子とポインターの比較にも注意する必要があります。 == 演算子を使用して 2 つのポインターを比較すると、それらが指す値が等しいかどうかが比較されます。つまり、それらが指すメモリアドレスが同じかどうかは比較されません。
== 演算子を使用して 2 つのポインターが指すものを比較する方法の例を次に示します。
package main import "fmt" func main() { var a *int = new(int) var b *int = new(int) *a = 1 *b = 1 if a == b { fmt.Println("a 和 b 指向的值相等") } else { fmt.Println("a 和 b 指向的值不相等") } }
上記のコードでは、int 型のポインター変数 a と a への 2 つのポインターを作成します。 b.次に、それらが指すものを 1 に設定します。 if ステートメントでは、== 演算子を使用して、それらが指すものが同じかどうかを比較します。内容は同じなので、aとbが指す値は等しいと出力します。
この比較方法はポインタが指すものには便利ですが、2 つのポインタを比較する場合、通常はポインタが指すメモリ アドレスが同じかどうかを比較する必要はありません。これは、Golang では、2 つのポインタが同じメモリ アドレスを指していれば等しいためです。
結論
この記事の議論を通じて、Golang では == 演算子が値を比較するときに、値自体を比較するだけでなく、その型も比較することがわかります。 。したがって、異なる型の 2 つの値を比較した場合、それらは等しくありません。また、== 演算子を使用してポインタの指す内容が同じかどうかを比較することもできますが、通常はポインタの指すメモリアドレスが同じかどうかを比較する必要はありません。
以上がgolang == 記号の使用について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。