Go 語言 := 的具體使用與區別

Laravel00發表於2022-01-07

文章來自:Go語言圈



單變數 :=
Go 語言中新增了一個特殊的運算子:=,這個運算子可以使變數在不宣告的情況下直接被賦值使用。其使用方法和帶值宣告變數類似,只是少了var關鍵字,形如變數名:=變數值,這樣就等於宣告瞭一個帶值的變數,該變數的型別與其變數值一致。

圖片

可以看到,上面的程式碼中我們並沒有提前對 helloworld這個變數進行宣告,而是直接就拿來用了,而且程式也沒有報錯,控制檯也正常列印出了 “Hello World!”。:= 符號的出現省去了我們大量的編寫變數宣告的語句,在實際的開發中我們一般使用這種形式來宣告變數。


多變數 :=
在 Go 語言的多變數賦值體系中,也支援了:=運算子。你可以使用形如變數名,變數名:=變數值,變數值的形式來進行多變數操作。其使用方法和多變數帶值宣告類似,只是少了var關鍵字。

圖片

在 Go 語言中為了使開發更高效,更多的會使用:=這種 Go 語言獨有的賦值方式,一開始使用也許會有些不適應,上手之後簡直不要太好用。


小結:=
這個運算子和=同樣可以進行單變數以及多變數的賦值。需要注意的是,在使用:=給變數賦值的時候,要看一下這個變數是否已經宣告過了,如果宣告過了就不需要使用 := 了。


Go 語言中 = 和 := 有什麼區別
= 是賦值, := 是宣告變數並賦值。

// = 使用必須使用先var宣告例如:
var a
a=100
//或
var b = 100
//或
var c int = 100

// := 是宣告並賦值,並且系統自動推斷型別,不需要var關鍵字
d := 100

錯誤的做法

//宣告變數a
var a int
//宣告變數a並給變數a賦值
a := 1
//錯誤提示
no new variables on left side of :=
//說明
重複宣告變數a


宣告不賦值的初始化值

  • 整型和浮點型變數的預設值為 0,如var a int,預設a=0

  • 字串變數的預設值為空字串

  • 布林型變數預設為 bool

  • 切片、函式、指標變數的預設為 nil


使用編譯器推導型別

var a=10 //預設a為整型


特殊例子
正確

var conn net.Conn
var err error
conn, err = net.Dial("tcp", "127.0.0.1:8080")
conn, err = net.Dial("tcp", "127.0.0.1:8080")

正確(特殊)

//雖然err重複宣告瞭,但是conn和conn2沒有重複宣告,只要有一個新宣告,不會報錯
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn2, err := net.Dial("tcp", "127.0.0.1:8080")

錯誤

//重複宣告瞭
conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn, err := net.Dial("tcp", "127.0.0.1:8080")


補充:從go語言中找&和*區別
*和&的區別 :
1、& 是取地址符號 , 即取得某個變數的地址 , 如 ; &a

2、*是指標運算子 , 可以表示一個變數是指標型別 , 也可以表示一個指標變數所指向的儲存單元 , 也就是這個地址所儲存的值 .


從程式碼中驗證 :

先構建一個Rect型別 :

圖片

1. &是取地址符號, 取到Rect型別物件的地址

圖片

2. *可以表示一個變數是指標型別(r是一個指標變數):

圖片

3.*也可以表示指標型別變數所指向的儲存單元 ,也就是這個地址所指向的值

圖片

4.檢視這個指標變數的地址 , 基本資料型別直接列印地址

圖片

摘自其他部落格 :

經常會見到: p . *p , &p 三個符號

p是一個指標變數的名字,表示此指標變數指向的記憶體地址,如果使用%p來輸出的話,它將是一個16進位制數。而*p表示此指標指向的記憶體地址中存放的內容,一般是一個和指標型別一致的變數或者常量。

而我們知道,&是取地址運算子,&p就是取指標p的地址。等會,怎麼又來了個地址,它到底和p有什麼區別?

區別在於,指標p同時也是個變數,既然是變數,編譯器肯定要為其分配記憶體地址,就像程式中定義了一個int型的變數i,編譯器要為其分配一塊記憶體空間一樣。

而&p就表示編譯器為變數p分配的記憶體地址,而因為p是一個指標變數,這種特殊的身份註定了它要指向另外一個記憶體地址,程式設計師按照程式的需要讓它指向一個記憶體地址,這個它指向的記憶體地址就用p表示。而且,p指向的地址中的內容就用*p表示。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
溫馨提示:微信搜尋並關注   學Laravel  裡面有兩套Laravel課程:【laravel7.x 從入門到核心架構講解】 與 【Laravel高階實戰教程42集】,直接獲取就可以了,學習與交流可加入:Laravel技術交流微信群

相關文章