go語言冒號賦值的冒號是不是多餘?

時間 2021-06-03 16:47:00

1樓:Brody

Python3.8引入了海象運算子:=也有了'冒號賦值',當然主要針對區域性作用域臨時變數的。 C++17也引入了類似的機制,這樣看來,並不多餘

2樓:耶加時間

Go是靜態型別語言,變數要宣告了再用,宣告變數的時候要指定型別,像C那樣,可以知道分配多少記憶體

vara

inta=1

Go也支援短變數宣告(就是帶冒號的),編譯器可以推斷型別(通過後面的賦值自動推斷出型別),不用我們顯式宣告了a:=

1顯式宣告有時顯得有點多餘,比如:

type

User

struct

varuser

*User=&

User

{}//顯式宣告型別

user:=&

User

{}//短變數宣告,型別推斷

是不是後面這個更直觀簡單呢?

那麼問題來了,能不能像Python那樣,把冒號省掉,讓 a=1 同時宣告型別和賦值呢?

至少下面這個例子不允許這樣。

短變數宣告作用域是Block,看下面這個例子:

func

main

()fmt

.Println

("outer->",a

)}裡面Block的 a:=2 是宣告新的變數

如果不用冒號,裡面的到底是宣告新變數還是給外面的變數賦值就搞不清楚了

3樓:Bing

":="是個便於快速定義變數(Declaration+Assignment,以及Redeclaration)的簡寫形式,作用域是在函式及其以下的語法結構,例如function,if,while, switch等。顯然

ShortVarDecl = IdentifierList ":=" ExpressionList .

可以轉換為下面寫法

VarSpec = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .

所以,":=" 方便了變數的快速建立。如果變數重複利用率非常高的話,完全可以不用這種語法。

參考:https://

golang.org/ref/spec#

Short_variable_declarations

4樓:劉雨颺

「Go語言」temp := 1

「JS/ES6」let temp = 1

這類有作用域,非全域性的變數,可以有效減少記憶體,只在作用域被用到的時候載入,用完了銷毀。

同時還能有效避免全域性變數的衝突,方便一些臨時的變數命名。

語言是不是權利的產物?

川葉 首先權力和權利是兩個概念。權力,英文單詞可以對應為power 權利,英文單詞可以對應為rights。語言的起源現在並沒有找到事實證據,一切都是推測。有一種比較容易被人接受的解釋是,原始人類在舊石器時代,為了合作圍獵,需要發展出比較複雜的語言以協調較多人員完成較為複雜的分工。從這種理論來看,語言...

國乒以後衡量實績的標準是不是就是乒壇GOAT了?

兩王一馬沒乙個拿到大滿貫,為什麼啊 成績離GOAT 標準差這麼遠他們很差嗎?兩王一馬相互牽制,各自克星同時在役,成績上就難圓滿!承上啟下的王皓,更是跟繼科馬龍球路上再次迴圈相剋 心態皓哥三秒鐘,命裡兩克星 馬龍呢,克星13年世乒賽臨退役怎麼給上課的?14年心魔主動讓路!換球技改成功,唯一乙個在大賽軟...

C語言的Struct是不是沒有method的類?

使用指標實現類方法 typedef struct TMatrix 呼叫 Matrix m m flat 這只是一種近似方式,而不是真的實現了類,類的繼承,過載等特性是沒法實現的 Interlock 很有意思的問題 如果你從資料打包角度考慮。是的,他們都能對資料打包,只是細節不同。另外class還能對...