golang裡面變數總的來說分四大型別
1. bool,string
bool:指布林型別,也就是true, false
string: 字串型別
2. (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
int 和 uint, 其中有u和沒有u指的是unsigned指的是有無符號,也就是有無正負號,int型別會根據你作業系統的字數來判斷是32位還是64位,如果你的作業系統是64位的,那麼在定義int的時候就是64位,也就是你定義int的時候編譯器會根據你的作業系統來給這個變數自動分配多大的空間大小。
(u)int8, (u)int16, (u)int32, (u)int64這些後面的8, 16, 32, 64這些是指你定義的變數的大小,8 就是8位,這裡的8位指的是二進位制中的8位,同理16, 32, 64也是一樣的道理,位數越多,變數能便是的範圍越大。
uintptr是指標型別,go語言程式設計客棧也是具有指標這一特性的,但是並沒有像c語言使用那麼的複雜。後會深究這個型別。
3. byte, rune
byte型別你可以看作是uint8的乙個別名,byte和uint8表示的範圍是一樣的,也可以叫做位元組型別,byte,最大能表示的範圍也就是乙個位元組的空間大小。
rune是乙個新的資料型別,因為你在其他的語言中並沒有見過這種型別,相對來說也比較陌生,但是我舉個例子你就能完全明白了,在c語言中,有char這個型別,是用來便是乙個ascii字元的,但是是隨著程式設計知識的普及,很多國家的人們都在學習程式設計,編寫程式,但是語言就成為來一大障礙,僅僅用ascii編碼是遠遠不能滿足人們的需求的,故go語言就是用了unicode編碼,rune也就相當於是在unicode編碼下的字元型別。
rune的長度是32位的,我們都知道unicode是2位元組的,但是網際網路中很多時候都是使用的utf-8編碼,所以我們rune型別採用了4位元組的儲存空間,如果後期go會公升級成utf-8編碼提供了可能。
在c語言中,我們都知道char是可以和整型混用的,舉個例子:printf("%c",97);輸出的是小寫字母a。那麼rune型別也是可以類似的使用的。
4. float32, float64, complex64, complex128
float32和float64都是浮點數型別,float32大約可以提供小數點後6位的精度,作為對比,float64可以提供小數點後15位的精度。如果想**浮點數在計算機中的儲存形程式設計客棧式可以百度一下。
complex64和complex128就是用來表示我們數學中的複數,複數實部和虛部,complex64的實部和虛部都是32位float,complex128的實部和虛部都是64位float。
golang的變數定義方式
package main
import "fmt"
var bb uint8 = 12
var xx = 12
var (
cc = 12
q, w = 12, 12
b string = "false"
)func variablezorevalue()
func variableinitialvalue()
func main()
我們定義的變數可以在函式內也可以在函式外,在函式外部定義的變www.cppcns.com量並不是全域性變數,應該是叫做包內變數,因為是在乙個包下面。
定義乙個變數:
var a int這種定義方式指明了變數的型別,沒有初始化,但是我們的編譯器會幫你初始化為0
var a int = 16這種方式是相比上一種方式多了初始化。
var a = 12這種方式沒有指定型別,但是初始化了乙個值12,這種方式編譯器會自動的識別是那種型別,就像python裡面一樣,不需要指定型別。
a := 12這種方式和上一種類似,但是更加方便,不用寫前面的var了。
定義多個變數
var bb,cc uint8 = 12, 13這種方式可以定義多個相同型別的變數
var z, str = 14, "string"這種方式比上一種方式更好好用,因為這樣可以同時定義多個不同型別的資料了。
n, x := 1, 2這種方式比上一種方式更加方便,不僅可以同時定義多個不同型別的變數同時不用寫var關鍵字了。
co 複數型別
package main
import (
"fmt"
"math/cmplx"
"math"
)func complexvariable()
func main()
c := 3 + 4i,我們在定義複數的時候應該是這種形式而不是:c := 3 + 4*i,如果是這樣的形式,則編譯器會把這個i當作是變數處理,而不是複數標誌
cmplx.abs(c),取複數的絕對值
cmplx.pow(math.e, 1i * math.pi) + 1,計算e^(i)+1,e是數學中的自然數。
cmplx.exp(1i * math.pi) + 1,另外一種計算方式
fmt.printf("%0.3f", cmplx.exp(1i * math.pi) + 1)格式化輸出複數。
常量的定義
package main
import (
"fmt"
"math"
)c consts()
func main()
go語言中的常量是和c語言中的巨集常量是一樣的,本著替換的原則,所以如果在定義常量的時候編譯器不用指定型別,所以在c = int(math.sqrt((a*a + b*b)))中就不用把(a*a + b*b)強轉為float64。
在定義變數的規則中對常量也是適用的,我就不多講了,自己去實踐下就知道了。
定義列舉型別
在go語言中並沒有針對列舉型別的關鍵字的,那go語言是怎麼定義列舉型別的呢?
package main
import "fmt"
func enums()
func main()
這樣我們便定義了乙個列舉同時還可以使用iota關鍵字,表示這個列舉型別是遞增的
package main
import "fmt"
func enums()
func main()
更高階的定義方法:
// 定義b kb mb gb tb pb
const(
b = 1 << (10 * iota)
kbmb
gbtbpb)
iot想得到與從0開始的給自增值,你要我們寫寫出表示式再複雜的列舉型別都可以使用這樣的方式來定義常量。
總結在go語言的變數常量定義中,變數的型別標識是寫的變數名的後邊,編譯器可以自動推測你需要定義變數的型別的,前提是你要初始化變數,沒有char只有rune,原生態的支援複數這種型別。
本文標題: golang中的變數學習小結
本文位址: /jiaoben/golang/241331.html
golang學習渠道小結
區塊鏈的底層研究和基於區塊鏈的應用開發已經越來越火熱了。一直想找找這個領域的門,目前我也在進行學習區塊鏈方面的開發,希望能和大家一起分享學習區塊鏈開發中的酸甜苦辣。今天我先來對收藏區塊鏈 以太坊中一些不錯的 資料做乙個彙總,作為入門和高階,個人感覺這些資料都是還還不錯。1.以太坊 中文版 2.go學...
golang中的條件變數
var mailbox uint8 var lock sync.rwmutex sendcond sync.newcond lock recvcond sync.newcond lock.rlocker 本身不是鎖,要與鎖結合使用go標準庫中的sync.cond型別代表了條件變數.條件變數要與鎖 互...
Golang中switch的用法小結
switch var1注 switch中的表示式是可選的,可以省略。如果省略表示式,則相當於switch true,這種情況下會將每乙個case的表示式的求值結果與true做比較,如果相等,則執行相應的 package main import fmt func main 在上面的程式中,switch...