go語言不支持隱式類型轉換,別名和原有類型也不能進行隱式類型轉換編程
go語言不支持隱式轉換數組
var v1 int
var v2 string
var v3 [10]int // 數組
var v4 []int // 數組切片
var v5 struct { //定義結構體(Java中的實體類,自定義類型)
f int
}
var v6 *int // 指針
var v7 map[string] int // map,key爲string類型,value爲int類型
var v8 func(a int) int
//也能夠這樣聲明變量
var (
v1 int
v2 string
) 複製代碼
聲明變量不須要使用分號做爲結束符ide
var v1 int = 10 // 定義並賦值
var v2 = 10 // 編譯器能夠自動推導出v2的類型
v3 := 10 // 編譯器能夠自動推導出v3的類型 複製代碼
冒號和等號的組合:= 聲明並賦值函數
出如今:=左側的變量不該該是已經被聲明過的,不然會致使編譯錯誤編碼
var a intspa
a := 2指針
會致使相似以下的編譯錯誤:no new variables on left side of :=code
var v10 int #定義變量
v10 = 1 #變量賦值複製代碼
go語言提供多重賦值功能,好比下面這個交換i和j變量的語句:i, j = j, iv8
在不支持多重賦值的語言中,交互兩個變量的內容須要引入一箇中間變量:t = i; i = j; j = t;字符串
咱們在使用傳統的強類型語言編程時,常常會出現這種狀況,即在調用函數時爲了獲取一個 值,卻由於該函數返回多個值而不得不定義一堆沒用的變量。在Go中這種狀況能夠經過結合使 用多重返回和匿名變量來避免這種醜陋的寫法,讓代碼看起來更加優雅。
假設GetName()函數的定義以下,它返回3個值,分別爲firstName、lastName和 nickName:
func GetName() (firstName, lastName, nickName string) {
return "May", "Chan", "Chibi Maruko"
} 複製代碼
若只想得到nickName,則函數調用語句能夠用以下方式編寫:, , nickName := GetName()
這種用法可讓代碼很是清晰,基本上屏蔽掉了可能混淆代碼閱讀者視線的內容,從而大幅 下降溝通的複雜度和代碼維護的難度。
常量是指編譯期間就已知且不可改變的值。常量能夠是數值類型(包括整型、 浮點型和複數類型)、布爾類型、字符串類型等。
程序中硬編碼的常量
-12
3.14159265358979323846 // 浮點類型的常量
3.2+12i // 複數類型的常量
true // 布爾類型的常量
"foo" // 字符串常量 複製代碼
Go語言的字面常量更接近咱們天然語言中的常量概念,它是無類型的。只要這個常量在相應類型的值域 範圍內,就能夠做爲該類型的常量
經過關鍵字const定義常量
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 無類型浮點常量
const (
size int64 = 1024
eof = -1 // 無類型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重賦值
const a, b, c = 3, 4, "foo" // a = 3, b = 4, c = "foo", 無類型整型和字符串常量
//常量賦值是一個編譯期行爲,因此右值也能夠是一個在編譯期運算的常量表達式:
const s = 1000 * 60複製代碼
Go語言預約義了這些常量:true、false和iota。
iota比較特殊,能夠被認爲是一個可被編譯器修改的常量,在每個const關鍵字出現時被 重置爲0,而後在下一個const出現以前,每出現一次iota,其所表明的數字會自動增1。
const ( // iota被重設爲0
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const (
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
)複製代碼
碼字不易若是對你有幫助請給個關注
愛技術愛生活 QQ羣: 894109590