go基礎 01 變數 常量 內建基本型別

2021-06-25 18:27:39 字數 3633 閱讀 1605

1、變數

go語言裡面定義變數有多種方式。

var關鍵字是go最基本的定義變數方式,與c語言不同的是go把

變數型別放在變數名後面:

//定義乙個名稱為「variablename」,型別為"type"的變數

var variablename type

定義多個變數

//定義三個型別都是「type」的三個變數

var vname1, vname2, vname3 type

定義變數並初始化值

//初始化「variablename」的變數為「value」值,型別是「type」

var variablename type = value

同時初始化多個變數

/* 定義三個型別都是"type"的三個變數,並且它們分別初始化相應的值

* vname1為v1,vname2為v2,vname3為v3

*/var vname1, vname2, vname3 type= v1, v2, v3

你是不是覺得上面這樣的定義有點繁瑣?沒關係,因為go語言的設計者也發現了,有一種寫法可以讓它變得簡

單一點。我們可以直接忽略型別宣告,那麼上面的**變成這樣了:

/* 定義三個變數,它們分別初始化相應的值

vname1為v1,vname2為v2,vname3為v3 然後go會根據其相應值的型別來幫你初始化它們

*/var vname1, vname2, vname3 = v1, v2, v3

你覺得上面的還是有些繁瑣?好吧,我也覺得。讓我們繼續簡化:

/* 定義三個變數,它們分別初始化相應的值

vname1為v1,vname2為v2,vname3為v3 編譯器會根據初始化的值自動推導出相應的型別

*/vname1, vname2, vname3 := v1, v2, v3

現在是不是看上去非常簡潔了?

:=這個符號直接取代了var和type,這種形式叫做簡短宣告。

不過它有乙個限

制,那就是它只能用在函式內部;在函式外部使用則會無法編譯通過,所以

一般用var方式來定義全域性變數

。2、常量

所謂常量,也就是在程式編譯階段就確定下來的值,而

程式在執行時則無法改變該值。在go程式中,常量可定

義為數值、布林值或字串等型別。

它的語法如下:

const constantname = value

//如果需要,也可以明確指定常量的型別:

const pi float32 = 3.1415926

//下面是一些常量宣告的例子:

const pi = 3.1415926

const i = 10000

const maxthread = 10

const prefix = "astaxie_"

3、內建基礎型別

在go中,布林值的型別為bool,值是true或false,預設為false。

//示例**

var isactive bool // 全域性變數宣告

var enabled, disabled = true, false // 忽略型別的宣告

func test()

3.1、數值型別

整數型別

有無符號和帶符號兩種。go同時支援int和uint,這兩種型別的長度相同,但具體長度取決於不同編

譯器的實現。當前的gcc和gccgo編譯器在32位和64位平台上都使用32位來表示int和uint,但未來在64位平台

上可能增加到64位。go裡面也有直接定義好位數的型別:

rune, int8, int16, int32, int64和byte, uint8,

uint16, uint32, uint64。

其中rune是int32的別稱,byte是uint8的別稱。

需要注意的一點是,這些型別的變數之間不允許互相賦值或操作,不然會在編譯時引起編譯器報

錯。浮點數的型別

有float32和float64兩種(

沒有float型別),預設是float64。

3.2、字串

我們在上一節中講過,go中的

字串都是採用utf-8字符集編碼。字串是用一對雙引號("")或反引號(`

`)括起來定義,它的型別是string。

注意單引號" ' "與反引號" ` "的區別

//示例**

var frenchhello string // 宣告變數為字串的一般方法

var emptystring string = "" // 宣告了乙個字串變數,初始化為空字串

func test()

在go中字串是不可變的,例如下面的**編譯時會報錯:

var s string = "hello"

s[0] = 'c'

但如果真的想要修改怎麼辦呢?下面的**可以實現:

s := "hello"

c := byte(s) // 將字串 s 轉換為 byte 型別

c[0] = 'c'

s2 := string(c) // 再轉換回 string 型別

fmt.printf("%s\n", s2)

go中可以使用+操作符來連線兩個字串:

s := "hello,"

m := " world"

a := 

s + m

fmt.printf("%s\n", a)

修改字串也可寫為:

s := "hello"

s = "c" + s[1:] // 

字串雖不能更改,但可進行切片操作

fmt.printf("%s\n", s)

如果要宣告乙個

多行的字串怎麼辦?可以通過`來宣告:

m := `hello

world`

` 括起的字串為

raw字串,即字串在**中的形式就是列印時的形式,它沒有字元轉義,換行也將原樣輸出。

3.3、iota列舉

go裡面有乙個關鍵字iota,這個關鍵字用來宣告enum的時候採用,它

預設開始值是0,每呼叫一次加1:

const( //採用分組的方式進行const宣告

x = iota // x == 0

y = iota // y == 1

z = iota // z == 2

w // 常量宣告省略值時,預設和之前乙個值的字面相同。這裡隱式地說w = iota,因此w == 3。其實上面y和z可同樣不用"= iota"

)

const v = iota // 

每遇到乙個const關鍵字,iota就會重置,此時v == 0

除非被顯式設定為其它值或iota,

每個const分組的第乙個常量被預設設定為它的0值,第二及後續的常量被預設設定為它前面那個常量的值,如果前面那個常量的值是iota,則它也被設定為iota。

說明:以上內容為學習go語言的總結筆記

C 基礎 1 變數 常量和基本型別

normal 07.8 磅02 false false false en us zh cn x none 1.1 算術型別 型別最小儲存空間 位 bool 1 char 8 wchar t 16 short 16 int 16 long 32 float 6 位有效數字 double 10 位有效數...

C 基礎 1 變數 常量和基本型別

1.1 算術型別 型別最小儲存空間 位 bool 1 char 8 wchar t 16 short 16 int 16 long 32 float 6 位有效數字 double 10 位有效數字 long double 10 位有效數字 1.2 常量 不能修改的值成為常量。1.3 變數 與常量相反...

C 基礎 1 變數 常量和基本型別

1.1算術型別型別 最小儲存空間 位 bool 1 char 8 wchar t 16 short 16 int 16 long 32 float 6 位有效數字 double 10 位有效數字 long double 10 位有效數字 1.2常量 不能修改的值成為常量。1.3變數 與常量相反,是可...