深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點
- 所有g(shù)o源碼以.go結(jié)尾.
- golang可執(zhí)行程序,package main有且只有一個main入口函數(shù).
- 兩種注釋:單行注釋//和多行注釋/* */
1. 變量命名:
標識符以字母或下劃線開頭,大小寫敏感 以數(shù)字開頭、含有特殊符號不行.
_是特殊標識符,用來忽略結(jié)果
保留關(guān)鍵字
2. import方式:
import("fmt") import { "fmt" }
3. 常量:
常量使用const修飾,代表永遠是只讀的,不能修改.即在編譯的時候就已經(jīng)確定了.
const只能修飾boolean、number(int相關(guān)類型、浮點類型、complex)和string.
語法: const identifier [type] = value // 其中type可以省略
舉例: const b string = "hello world" const b = "hello world" // 不寫type在編譯時,會自動推導類型 const b = 9/3 // 在編譯時,會自動計算值 const c = getValue() // 錯誤的,因為函數(shù)只有在運行時,才會知道返回值
比較優(yōu)雅的寫法: const ( a = 0 b = 1 c = 2 )
更加專業(yè)的寫法: const ( a = iota // 這個會下面會自動+1 b // 值為1 c // 值為2 )
4. 變量:
語法: var identifier type
舉例: var a int var d int = 8 Var ( a int // 默認為0 b string // 默認為"" c bool // 默認為false d int = 8 e = "hello world" // 可以不寫type類型 )
4.1 值類型和引用類型:
值類型: a. 變量直接存儲值,內(nèi)存通常在棧中分配. b. 基本數(shù)據(jù)類型: int、float、bool、string以及數(shù)組和struct c. var i = 5 // i ---> 內(nèi)存中的值
引用類型: a. 變量存儲的是一個地址,這個地址存儲最終的值. b. 內(nèi)存通常在堆上分配,通過GC回收. c. 傳指針效率高,如果傳一個很大的結(jié)構(gòu)體,效率就不高了. d. 引用類型: 指針、slice(切片)、map、chan等都是引用類型. e. var i = 5 // ref i ---> 地址(指針) ---> 內(nèi)存中的值 f. &、*的運用: add(&a) func add(int *a) { return *a + 1 // *a表示取這個內(nèi)存地址對應的值,只是a表示內(nèi)存地址 }
總結(jié): a. 在函數(shù)體中,如果修改傳過來的值類型,外面的值不會變化.因為是復制了一份值進去.如果是修改引用類型,因為指針指向同一個變量,所以會影響外面的值.
(1). 舉例:
func main() { fmt.Println(calc.Age) a := 10 b := 20 swap(&a, &b); fmt.Println(a); // 10 fmt.Println(b); // 20 } func swap(a *int, b *int) { // 這里是交換拷貝值的內(nèi)存地址,不影響外面 temp := a a = b b = temp fmt.Println("swap a:", *a); // 20 fmt.Println("swap b:", *b); // 10 }
不管值類型是傳遞值還是內(nèi)存地址,都是重新拷貝一份.
4.2 變量的作用域:
局部變量:
a. 在函數(shù)內(nèi)部聲明的變量.
b. 生命周期僅限于函數(shù)內(nèi)部,出了這個函數(shù),變量就銷毀了.
全局變量:
a. 在函數(shù)外部聲明的變量.
b. 生命周期作用于整個包,如果是大寫的,則作用于整個程序.
c. 在語義塊{}中,也有作用域.如for循環(huán)中聲明的變量,不能在for外面使用.
流程控制:
If / else分支判斷
- switch case語句
for 語句
for range 語句 用來遍歷數(shù)組、slice、map、chan
for i, v := range str { fmt.Printf(“index[%d] val[%c] len[%d]\n”, i, v, len([]byte(v))) }
默認值 string是一個空字符串 int是0
Go是一種簡潔高效的編程語言,具有強大的并發(fā)性能和豐富的標準庫。它適用于構(gòu)建可靠的、高性能的軟件系統(tǒng)。掌握Go的基礎(chǔ)知識,將有助于開發(fā)者更好地利用Go的特性來編寫高效的代碼。
到此這篇關(guān)于深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點的文章就介紹到這了,更多相關(guān)go 基礎(chǔ)知識內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言實現(xiàn)類似c++中的多態(tài)功能實例
Go本身不具有多態(tài)的特性,不能夠像Java、C++那樣編寫多態(tài)類、多態(tài)方法。但是,使用Go可以編寫具有多態(tài)功能的類綁定的方法。下面來一起看看吧2016-09-09Go語言利用ffmpeg轉(zhuǎn)hls實現(xiàn)簡單視頻直播
這篇文章主要為大家介紹了Go語言利用ffmpeg轉(zhuǎn)hls實現(xiàn)簡單視頻直播,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04Go使用TimerController解決timer過多的問題
多路復用,實際上Go底層也是一種多路復用的思想去實現(xiàn)的timer,但是它是底層的timer,我們需要解決的問題就過多的timer問題!本文給大家介紹了Go使用TimerController解決timer過多的問題,需要的朋友可以參考下2024-12-12