深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點(diǎn)
- 所有g(shù)o源碼以.go結(jié)尾.
- golang可執(zhí)行程序,package main有且只有一個main入口函數(shù).
- 兩種注釋:單行注釋//和多行注釋/* */
1. 變量命名:
標(biāo)識符以字母或下劃線開頭,大小寫敏感 以數(shù)字開頭、含有特殊符號不行.
_是特殊標(biāo)識符,用來忽略結(jié)果
保留關(guān)鍵字
2. import方式:
import("fmt") import { "fmt" }
3. 常量:
常量使用const修飾,代表永遠(yuǎn)是只讀的,不能修改.即在編譯的時候就已經(jīng)確定了.
const只能修飾boolean、number(int相關(guān)類型、浮點(diǎn)類型、complex)和string.
語法: const identifier [type] = value // 其中type可以省略
舉例: const b string = "hello world" const b = "hello world" // 不寫type在編譯時,會自動推導(dǎo)類型 const b = 9/3 // 在編譯時,會自動計(jì)算值 const c = getValue() // 錯誤的,因?yàn)楹瘮?shù)只有在運(yùn)行時,才會知道返回值
比較優(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 // 默認(rèn)為0 b string // 默認(rèn)為"" c bool // 默認(rèn)為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. &、*的運(yùn)用: add(&a) func add(int *a) { return *a + 1 // *a表示取這個內(nèi)存地址對應(yīng)的值,只是a表示內(nèi)存地址 }
總結(jié): a. 在函數(shù)體中,如果修改傳過來的值類型,外面的值不會變化.因?yàn)槭菑?fù)制了一份值進(jìn)去.如果是修改引用類型,因?yàn)橹羔樦赶蛲粋€變量,所以會影響外面的值.
(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))) }
默認(rèn)值 string是一個空字符串 int是0
Go是一種簡潔高效的編程語言,具有強(qiáng)大的并發(fā)性能和豐富的標(biāo)準(zhǔn)庫。它適用于構(gòu)建可靠的、高性能的軟件系統(tǒng)。掌握Go的基礎(chǔ)知識,將有助于開發(fā)者更好地利用Go的特性來編寫高效的代碼。
到此這篇關(guān)于深入淺出Go:掌握基礎(chǔ)知識的關(guān)鍵要點(diǎn)的文章就介紹到這了,更多相關(guān)go 基礎(chǔ)知識內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言實(shí)現(xiàn)類似c++中的多態(tài)功能實(shí)例
Go本身不具有多態(tài)的特性,不能夠像Java、C++那樣編寫多態(tài)類、多態(tài)方法。但是,使用Go可以編寫具有多態(tài)功能的類綁定的方法。下面來一起看看吧2016-09-09Go語言利用ffmpeg轉(zhuǎn)hls實(shí)現(xiàn)簡單視頻直播
這篇文章主要為大家介紹了Go語言利用ffmpeg轉(zhuǎn)hls實(shí)現(xiàn)簡單視頻直播,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04go語言net包rpc遠(yuǎn)程調(diào)用的使用示例
本篇文章主要介紹了go語言net包rpc遠(yuǎn)程調(diào)用的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Go使用TimerController解決timer過多的問題
多路復(fù)用,實(shí)際上Go底層也是一種多路復(fù)用的思想去實(shí)現(xiàn)的timer,但是它是底層的timer,我們需要解決的問題就過多的timer問題!本文給大家介紹了Go使用TimerController解決timer過多的問題,需要的朋友可以參考下2024-12-12go語言csrf庫使用實(shí)現(xiàn)原理示例解析
這篇文章主要為大家介紹了go語言csrf庫使用實(shí)現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10golang實(shí)現(xiàn)對JavaScript代碼混淆
在Go語言中,你可以使用一些工具來混淆JavaScript代碼,一個常用的工具是Terser,它可以用于壓縮和混淆JavaScript代碼,你可以通過Go語言的`os/exec`包來調(diào)用Terser工具,本文給通過一個簡單的示例給大家介紹一下,感興趣的朋友可以參考下2024-01-01