Go語言pointer及switch?fallthrough實戰(zhàn)詳解
前言
今天繼續(xù)為大家更新Go語言學(xué)習(xí)記錄的文章。
首先說明pointer指針和switch是兩個并沒有直接關(guān)系的知識點,放在一篇文章中將的原因是,這兩個知識點在學(xué)習(xí)和使用的過程中往往被大家忽視。
pointer
go語言不存在指針操作,只有2個符號: &取內(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é)
- 對變量進行取地址操作(&),可以獲得這個變量的指針變量
- 指針變量的值是指針地址(內(nèi)存地址)
- 對指針變量進行取值操作(*),可以獲得這個指針變量指向原變量的值,即通過內(nèi)存地址取值。
switch
我們往往習(xí)慣于使用if判斷,switch可以簡化我們的if判斷。
switch的作用和if是一樣的,都是進行條件判斷,引入switch的原因是能簡化我們的if判斷,讓代碼的可讀性更強。
可讀性更好
舉個栗子:
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("無效")
}
對比之下立竿剪影:switch case 這種方式可讀性更好。
case后支持多個參數(shù)
舉個栗子:奇偶數(shù)判斷
switch n := 3; n {
case 1, 3, 5, 7, 9:
fmt.Println("奇數(shù)")
case 2, 4, 6, 8, 10:
fmt.Println("偶數(shù)")
}
case后加判斷
舉個栗子:
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)
}
注意:當在case后加判斷時,switch后面不需要傳入?yún)?shù),否則會報錯:類型不匹配。

fallthrough
使用建議
在一個 switch 塊內(nèi),每個 case 無需聲明 break 來終止 , 如果想順序執(zhí)行使用 fallthrough ;在一個switch塊內(nèi),都必須包含一個 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é)
相信大家閱讀完這篇文章對go語言中的指針有了更深刻的理解
至于switch,只要我們心里有這個概念即可:switch作用和if一樣,當我們意識到需要寫多個if判斷時,改用switch實現(xiàn),往往會是比較好的實踐。
以上就是Go語言pointer及switch fallthrough實戰(zhàn)詳解的詳細內(nèi)容,更多關(guān)于Go語言pointer及switch fallthrough的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言:打造優(yōu)雅數(shù)據(jù)庫單元測試的實戰(zhàn)指南
Go語言數(shù)據(jù)庫單元測試入門:聚焦高效、可靠的數(shù)據(jù)庫代碼驗證!想要確保您的Go應(yīng)用數(shù)據(jù)層堅如磐石嗎?本指南將手把手教您如何利用Go進行數(shù)據(jù)庫單元測試,輕松揪出隱藏的bug,打造無懈可擊的數(shù)據(jù)處理邏輯,一起來探索吧!2024-01-01
golang通過node_exporter監(jiān)控GPU及cpu頻率、溫度的代碼
node_exporter這個開源組件是配合prometheus收集主機操作系統(tǒng)層的metrics的常用組件,但是官方?jīng)]有提供GPU卡的metrics的采集,今天通過本文給大家介紹golang通過node_exporter監(jiān)控GPU及cpu頻率、溫度的相關(guān)知識,感興趣的朋友一起看看吧2022-05-05
獲取Golang環(huán)境變量的三種方式小結(jié)
本文介紹了Golang中獲取環(huán)境變量的三種方式,包含使用Viper包、GoDotEnv包和os包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
Golang?Gin解析JSON請求數(shù)據(jù)避免出現(xiàn)EOF錯誤
這篇文章主要為大家介紹了Golang?Gin?優(yōu)雅地解析JSON請求數(shù)據(jù),避免ShouldBindBodyWith出現(xiàn)EOF錯誤的源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04

