記事ディレクトリ
I.はじめに
Goシリーズの記事:
Go コラム配信リンク: https://blog.csdn.net/saintmm/category_12326997.html
2. 変数
変数は、メモリ内のデータ記憶領域の識別子に相当します。
1. 変数の基本的な使い方
変数は、宣言、代入、使用の 3 つのステップで使用されます。
- 変数宣言は の形式
var 变量名 数据类型
を。
package main
import "fmt"
func main() {
// 1. 变量的声明
var age int
// 2. 变量的赋值
age = 18
// 3. 变量的使用
fmt.Println("age = ", age)
}
変数の宣言と代入は 1 つの文にまとめることができます。
var age int = 19
変数が繰り返し定義されると、GoLand でエラーが報告されます。
変数を割り当てると、データが型と一致せず、次のようなエラーが発生します。
2. 変数を使用する複数の方法
1) グローバル変数
グローバル変数は、関数の外部で定義され、複数の関数で使用できる変数です。
package main
import "fmt"
var globalV1 = 100
var globalV2 = 1.11
func main() {
variable1()
//variable2()
}
func variable1() {
fmt.Println(globalV1)
fmt.Println(globalV2)
}
func variable2() {
fmt.Println(globalV1)
fmt.Println(globalV2)
}
グローバル変数が複数ある場合、毎回varで宣言するのは面倒なので、Goでは型の異なる複数の変数を一度に宣言することをサポートしています。
var (
globalV1= 3.33
globalV2= "Hello"
)
2) ローカル変数
ローカル変数は、関数 {} で宣言された変数です。
1> 変数の型を指定して割り当てます。
var v1 int = 18
fmt.Println(v1)
2> 変数のタイプを指定しますが、値は割り当てず、デフォルト値を使用します。
var v2 int
fmt.Println(v2)
3> 変数の型が記述されていない場合、プログラムは=
数値(自動型推論)。
var v3 = "saint"
fmt.Println(v3)
:=
4> var の代わりに変数を宣言して代入するために使用できます。
v4 := "bob"
fmt.Println(v4)
5> 同じ型の複数の変数を宣言します。
var n1, n2, n3 int
fmt.Println(n1)
fmt.Println(n2)
fmt.Println(n3)
6> 異なる型の複数の変数を宣言します。
var n4, name, n5 = 9, "jack", 7.8
fmt.Println(n4)
fmt.Println(name)
fmt.Println(n5)
// 省略var的方式
n6, sex := 6.9, "man"
fmt.Println(n6)
fmt.Println(sex)
3) 割り当てを破棄する
識別子を使用して_
値を受け取ります。割り当ては破棄できます。
破棄割り当ては、一度に 2 つ以上の値が取得され、値の 1 つが望ましくないシナリオで使用する必要があります。
var _,_,num = 1,2,3
fmt.Println("num = ",num)
コード スニペットは値 3 のみを受け入れ、それを num 変数に割り当てます。
3. Go と Java の変数の比較
-
変数の宣言と代入の方法が異なり、Java は
变量类型 变量名 = 变量值
、Go はvar 变量名 变量类型 = 变量值
// Java 变量类型 变量名 = 变量值 String name = "li_ming";
// Go var 变量名 变量类型 = 变量值 var name string = "li_ming"
-
Java の変数宣言では変数のデータ型を指定する必要がありますが、Go の変数宣言では変数のデータ型を指定する必要はありません (型は自動的に推測されます)。
// go类型自动推断 var v3 = "saint"
-
Java メソッドの内部および外部での変数の割り当てはのみ使用できます
=
。Go の変数宣言の割り当ては、関数内では省略 ( ) でき变量名 := 变量值
、関数の外部でのみ使用できます。var 变量名 = 变量值
// 函数内部可以直接使用 【 变量名 := 变量值 】 赋值,函数外不可以 name := "saint"
-
Go は複数変数の代入を同時にサポートしており、代入の喪失(値を受け取るために識別子を使用すると
_
代入を破棄できますが、一度に 2 つ以上の値が取得され、そのうちの 1 つの値が取得される場合には使用する必要があります)望まれていません)// 多变量同时赋值 var name,age = "saint",18
// 丢弃赋值,示例中:把 1和2丢弃 只取3 var _,_,num = 1,2,3 fmt.Println("num = ",num)
3. 定数
Go の定数宣言と変数宣言の唯一の違いは、定数宣言の使用const
と変数宣言の使用ですvar
。フロントエンドをしばらく書いたことがある人は、Go の定数と変数の宣言がフロントエンドと似ていることがわかるでしょう。
//const 常量名 常量类型 = 常量值 显示推断类型
const name string = "const_sanint"
//隐式推断类型
const name2 ="const_sanint2"
1. GoとJavaの定数の比較
Go の定数と Java の定数には本質的な違いがあります。
- Go の定数はコンパイル中に決定できる量を指しますが、Java の定数は
JVM跑起来后赋值的
値 ( ) が割り当てられた後に変更できない量を指します。
-
定数の宣言方法は異なります。Java は
final修饰符 常量类型 常量名 = 常量值
、Go はconst 常量名 常量类型 = 常量值
// Java final修饰符 常量类型 常量名 = 常量值; public static final String TAG = "A";
// go const 常量名 常量类型 = 常量值 显示推断类型 const name string = "const_li_ming" // go 隐式推断类型 const name2 ="const_xiao_hong"
3. オペレーター
演算子は、データの操作、代入、および比較を表すために使用される特殊な記号です。Go で一般的に使用される演算子は次のとおりです。
ここでは Java 言語の使い方とほぼ同じですが、算術演算子の++
、--
その他の演算子について説明します。
1. 算術演算子 ++、-
++ 自己インクリメント 1 演算、 – 自己デクリメント、マイナス 1 演算。
var a int = 10
a++
fmt.Println(a)
a--
fmt.Println(a)
Java との違い:
- Go では
++
、--
の操作は非常に単純で、単独でのみ使用でき、操作に参加することはできません。たとえば、 、age = ++age + 10
この種の複雑な操作は許可されません。 - Go では、
++
は--
変数の後にのみ記述でき、変数の前には記述できません (--a
++a
これらはすべて間違った書き方です)
2. 演算子 &, *
Go に&
は*
特別な目的があります:
&
: 変数の格納アドレスを返します。*
: ポインタ変数に対応する値を取得します
package main
import "fmt"
func main() {
var age int = 18
fmt.Println("age对应的存储空间内存地址为:",&age)
// 指针变量 ptr,指向age在存储空间的内存地址
var ptr *int = &age
fmt.Println(ptr)
fmt.Println("ptr这个指针指向的具体数值为:",*ptr)
}
ポインタの内容については以下の記事を参照してください。
4. まとめ
変数/定数の宣言と代入に関して、Java と比較して、Go にはいくつかのユニークなプロパティがあります。
- 異なる型の複数の変数/定数の同時宣言のサポート。
- サポート型自動推論
- 割り当ての破棄がサポートされています。
さらに、定数については、Java と Go では認識が異なります。
- Java では、JVM の実行後に定数値が一度割り当てられ、後で変更することはできないと考えられます。
- Go の定数はコンパイル時に決定できる量であり、変更することもできません。
Go の算術演算子はJava のような複雑な演算では使用できず、最も単純な方法でのみ使用できます++
。--
そして、Goには特別な目的があります&
。*