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還能對...