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變數 與常量相反,是可...