Go語言pointer及switch?fallthrough實(shí)戰(zhàn)詳解
前言
今天繼續(xù)為大家更新Go語言學(xué)習(xí)記錄的文章。
首先說明pointer指針
和switch
是兩個(gè)并沒有直接關(guān)系的知識(shí)點(diǎn),放在一篇文章中將的原因是,這兩個(gè)知識(shí)點(diǎn)在學(xué)習(xí)和使用的過程中往往被大家忽視。
pointer
go語言不存在指針操作,只有2個(gè)符號(hào): &取內(nèi)存地址 *根據(jù)內(nèi)存地址取值
應(yīng)用
n := 18 // 取地址 fmt.Println(&n) fmt.Println(*&n)
打印結(jié)果:
查詢內(nèi)存地址的類型
p := &n // 根據(jù)地址取值 fmt.Printf("%T\n", p) // 打印結(jié)果是*int,即int類型的指針 m := *p fmt.Println(m) //根據(jù)地址取值
打印結(jié)果:
我們發(fā)現(xiàn)打印的結(jié)果是:*int,即int類型的指針
nil pointer
var a1 *int //nil pointer fmt.Println(a1) //<nil> var a2 = new(int) fmt.Println(a2) //內(nèi)存地址 0xc000108010 fmt.Println(*a2) //0 根據(jù)內(nèi)存地址取值 沒有值返回0 *a2 = 100 //根據(jù)內(nèi)存地址賦值 fmt.Println(*a2) //100
打印結(jié)果:
小結(jié)
- 對(duì)變量進(jìn)行取地址操作(&),可以獲得這個(gè)變量的指針變量
- 指針變量的值是指針地址(內(nèi)存地址)
- 對(duì)指針變量進(jìn)行取值操作(*),可以獲得這個(gè)指針變量指向原變量的值,即通過內(nèi)存地址取值。
switch
我們往往習(xí)慣于使用if判斷,switch可以簡化我們的if判斷。
switch的作用和if是一樣的,都是進(jìn)行條件判斷,引入switch的原因是能簡化我們的if判斷,讓代碼的可讀性更強(qiáng)。
可讀性更好
舉個(gè)栗子:
if判斷來判斷手指的名稱:
finger :=2 if finger==1 { fmt.Println("大拇指") }else if finger==2 { fmt.Println("食指") }else if finger==5 { fmt.Println("小拇指") }else { fmt.Println("無效") }
switch判斷手指名稱
finger := 2 switch finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 5: fmt.Println("小拇指") default: fmt.Println("無效") }
對(duì)比之下立竿剪影:switch case 這種方式可讀性更好。
case后支持多個(gè)參數(shù)
舉個(gè)栗子:奇偶數(shù)判斷
switch n := 3; n { case 1, 3, 5, 7, 9: fmt.Println("奇數(shù)") case 2, 4, 6, 8, 10: fmt.Println("偶數(shù)") }
case后加判斷
舉個(gè)栗子:
age := 29 switch { case age < 18: fmt.Println("好好學(xué)習(xí)Z") case age > 18 && age < 60: fmt.Println("好好上班") case age > 60: fmt.Println("希望不用繼續(xù)上班了,哈哈") default: fmt.Println(age) }
注意:當(dāng)在case后加判斷時(shí),switch后面不需要傳入?yún)?shù),否則會(huì)報(bào)錯(cuò):類型不匹配。
fallthrough
使用建議
在一個(gè) switch 塊內(nèi),每個(gè) case 無需聲明 break 來終止 , 如果想順序執(zhí)行使用 fallthrough ;在一個(gè)switch塊內(nèi),都必須包含一個(gè) default 語句并且放在最后,即使它什么代碼也沒有。
package main import "fmt" func main() { switch { case false: fmt.Println("false1") fallthrough case true: fmt.Println("true1") fallthrough case false: fmt.Println("false2") fallthrough case true: fmt.Println("true2") case false: fmt.Println("false3") fallthrough default: fmt.Println("default case") } }
總結(jié)
相信大家閱讀完這篇文章對(duì)go語言中的指針有了更深刻的理解
至于switch,只要我們心里有這個(gè)概念即可:switch作用和if一樣,當(dāng)我們意識(shí)到需要寫多個(gè)if判斷時(shí),改用switch實(shí)現(xiàn),往往會(huì)是比較好的實(shí)踐。
以上就是Go語言pointer及switch fallthrough實(shí)戰(zhàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言pointer及switch fallthrough的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用Go語言標(biāo)準(zhǔn)庫實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由
在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語言標(biāo)準(zhǔn)庫創(chuàng)建路由,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下2023-05-05Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換
在軟件開發(fā)的世界里,數(shù)據(jù)類型轉(zhuǎn)換是一項(xiàng)基礎(chǔ)而重要的技能,尤其在Go語言這樣類型嚴(yán)格的語言中,正確高效地進(jìn)行類型轉(zhuǎn)換對(duì)于性能優(yōu)化和代碼質(zhì)量至關(guān)重要,本文給大家介紹了Go實(shí)現(xiàn)字符串與數(shù)字的高效轉(zhuǎn)換,需要的朋友可以參考下2024-02-02在Go語言單元測(cè)試中解決HTTP網(wǎng)絡(luò)依賴問題
在 Go 語言中,我們需要找到一種可靠的方法來測(cè)試 HTTP 請(qǐng)求和響應(yīng),本文將探討在 Go 中進(jìn)行 HTTP 應(yīng)用測(cè)試時(shí),如何解決應(yīng)用程序的依賴問題,以確保我們能夠編寫出可靠的測(cè)試用例,需要的朋友可以參考下2023-07-07golang接口IP限流,IP黑名單,IP白名單的實(shí)例
這篇文章主要介紹了golang接口IP限流,IP黑名單,IP白名單的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12Go語言并發(fā)編程之控制并發(fā)數(shù)量實(shí)現(xiàn)實(shí)例
這篇文章主要為大家介紹了Go語言并發(fā)編程之控制并發(fā)數(shù)量實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Golang 使用Map實(shí)現(xiàn)去重與set的功能操作
這篇文章主要介紹了Golang 使用 Map 實(shí)現(xiàn)去重與 set 的功能操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04