41

私はGoプログラミング言語が初めてです。

Go で何かおかしいことに気がつきました: Python で使用:=して代用すると思っていましたが、Go で使用すると動作します。==

:=とはどう違い=ますか?

4

8 に答える 8

53

=課題です。Go での代入の詳細:代入

との微妙な違いは=、変数宣言で使用される場合です:==

Go での変数宣言の一般的な形式は次のとおりです。

var name type = expression

上記の宣言は、特定の型の変数を作成し、それに名前を付けて、その初期値を設定します。または のいずれかを省略できますが、両方は省略できません。type= expression

例えば:

var x int = 1
var a int
var b, c, d = 3.14, "stackoverflow", true

:=と呼ばれるshort variable declaration形式をとる

name := expression

名前のタイプは式のタイプによって決まります

以下に注意してください::=は宣言ですが、=は代入です

したがって、短い変数宣言では、少なくとも 1 つの新しい変数を宣言する必要があります。つまり、短い変数宣言は、左側のすべての変数を必ずしも宣言するとは限らず、それらの一部が同じ字句ブロックで既に宣言されている場合、:=それらの変数への代入のように機能します。

例えば:

 r := foo()   // ok, declare a new variable r
 r, m := bar()   // ok, declare a new variable m and assign r a new value
 r, m := bar2()  //compile error: no new variables

また、:=関数内でのみ表示される場合があります。「if」、「for」、または「switch」ステートメントの初期化子などの一部のコンテキストでは、ローカル一時変数を宣言するために使用できます。

より詳しい情報:

変数宣言

短い変数宣言

于 2016-04-09T05:47:33.573 に答える
9

=単なる割り当てです

:=関数ブロック (グローバルではない) 内の新しい変数 (少なくとも 1 つの新しい変数) の宣言と初期化の構造です。

var u1 uint32      //declare a variable and init with 0
u1 = 32            //assign its value
var u2 uint32 = 32 //declare a variable and assign its value at once
//declare a new variable with defining data type:
u3 := uint32(32)        //inside the function block this is equal to: var u3 uint32 = 32
fmt.Println(u1, u2, u3) //32 32 32
//u3 := 20//err: no new variables on left side of :=
u3 = 20
fmt.Println(u1, u2, u3) //32 32 20
u3, str4 := 100, "str"        // at least one new var
fmt.Println(u1, u2, u3, str4) //32 32 100 str
于 2016-04-09T05:30:34.717 に答える
5

:=変数を宣言および初期化するための「短い宣言形式」です。変数の型を設定するために割り当てている値に対して型推論を行います。

短い宣言形式で同じスコープ内の同じ変数に割り当てようとすると、コンパイラはエラーをスローします。

囲んでいるスコープ内の同じ変数を「シャドウイング」する短い宣言形式に注意してください(特にエラーがある場合)

=では、変数を宣言するときに var キーワードが必要であり、変数名の後に変数の型を明示的に指定する必要があります。Go にはすべての型の初期値があるため (文字列は "" として初期化され、int は 0、スライスは空のスライスです)、= を実際に宣言から外すことができます。また、値だけを再代入するために使用することもできます。つまり、

var s string = "a string" // declared and initialized to "a string"
s = "something else"      // value is reassigned

var n int // declared and initialized to 0
n = 3
于 2016-04-09T05:30:01.373 に答える
3

関数内では、:=暗黙的な型を持つ var 宣言の代わりに短い代入ステートメントを使用できます。

例えば:

package main

import "fmt"

func main() {
    var i, j int = 1, 2
    k := 3
    c, python, java := true, false, "no!"

    fmt.Println(i, j, k, c, python, java)
}

注意:で宣言された変数は:=、関数ブロック内でのみ使用できます。

于 2016-04-09T05:17:33.900 に答える
0

= は静的に型付けされたものとして使用されます。

:= は動的型付けとして使用されます。

例:

var a = 30   # statically typed and is a compile time check

b := 40      # dynamically checked. 
于 2021-04-20T05:15:21.927 に答える