Go多変数付与時の注意事項
7469 ワード
多変数付与といえば、すべての相関値を計算してから左から右に順番に付与しますが、このルールはpythonには適用されません.
出力結果:
ある友达は、結果はそうではないと思っていますか?(しかしpythonで出力された結果は次の通りです)?
実際には、付与順序の理解を見てみましょう.
同じ多変数の付与値はpythonには適用されない.
また、再割り当てと新しい同名変数の定義の違いに注意します.もう1つの例を見てください.
出力:
注意:パーソナルマシンによっては、メモリリファレンスアドレスが私とは異なる場合がありますが、このステップがポイントです.ポイントは、同じレベルの同じ変数の割り当てで、メモリアドレスは変更されません.異なるレベルの同じ変数の付与は、実際には新しい同名変数、すなわち3行目のメモリアドレスが変更されたことを定義しています.次に、ちょっと面白いコードを見てみましょう.
出力:
理由は明らかで、上の:name:=“ジョーの手伝い人”はすでに暗黙的にnameが文字列であることを明らかにして、var name stringに等しいためです.同レベルの再付与値100は整形である.これは許されないことです.
しかし、ポイントが来ました.私たちは少し変更します.
違いは階層が変化したことです.{}の中のnameはもう新しい変数だからです.さあ、これで紹介は終わりです.ブロガーたちはgolang変数の使用中に出会った様々な奇妙な「穴」について、貴重な足跡を残してください.レンガの伝言を歓迎します.
package main
import "fmt"
func main() {
data, i := [3]string{" "," "," "}, 0
i, data[i] = 2, " "
fmt.Println(i, data)
}
出力結果:
2 [ ]
ある友达は、結果はそうではないと思っていますか?(しかしpythonで出力された結果は次の通りです)?
2 [ ]
実際には、付与順序の理解を見てみましょう.
1 data, i := [3]string{" "," "," "}, 0
2 i, data[i] = 2, " " // : ,
3 // i (i = 0, i 0) -> ( i = 2), (data[i] data[0], data[2], data[0] = )
4 fmt.Println(i, data) // i=2,[ ]
同じ多変数の付与値はpythonには適用されない.
data,i=[" ", " ", " "],0
i, data[i] = 2, " " # data[i] data[2] , data[2]=" "
print(i,data) # 2 [' ', ' ', ' ']
また、再割り当てと新しい同名変数の定義の違いに注意します.もう1つの例を見てください.
package main
func main() {
name := " "
println(&name)
name, age := " ", 30 // : name , 。
println(&name, age) // err 。
{
name, weight := " ", 50 // : 。
println(&name, weight)
}
}
出力:
0xc00002bf78
0xc00002bf78 30
0xc00002bf68 50
注意:パーソナルマシンによっては、メモリリファレンスアドレスが私とは異なる場合がありますが、このステップがポイントです.ポイントは、同じレベルの同じ変数の割り当てで、メモリアドレスは変更されません.異なるレベルの同じ変数の付与は、実際には新しい同名変数、すなわち3行目のメモリアドレスが変更されたことを定義しています.次に、ちょっと面白いコードを見てみましょう.
package main
func main() {
name := " "
println(&name)
name, age := " ", 30 // : name , 。
println(&name, age) // err 。
name, weight := 100, 50 // : 。
println(&name, weight, age)
}
出力:
cannot use 100 (type int) as type string in assignment
理由は明らかで、上の:name:=“ジョーの手伝い人”はすでに暗黙的にnameが文字列であることを明らかにして、var name stringに等しいためです.同レベルの再付与値100は整形である.これは許されないことです.
しかし、ポイントが来ました.私たちは少し変更します.
package main
func main() {
name := " "
println(&name)
name, age := " ", 30 // : name , 。
println(&name, age) // err 。
{
name, weight := 100, 50 // : 。
println(&name, weight, age)
}
}
違いは階層が変化したことです.{}の中のnameはもう新しい変数だからです.さあ、これで紹介は終わりです.ブロガーたちはgolang変数の使用中に出会った様々な奇妙な「穴」について、貴重な足跡を残してください.レンガの伝言を歓迎します.