網站首頁 編程語言 正文
前言
今天繼續為大家更新Go語言學習記錄的文章。
首先說明pointer指針
和switch
是兩個并沒有直接關系的知識點,放在一篇文章中將的原因是,這兩個知識點在學習和使用的過程中往往被大家忽視。
pointer
go語言不存在指針操作,只有2個符號: &取內存地址 *根據內存地址取值
應用
n := 18 // 取地址 fmt.Println(&n) fmt.Println(*&n)
打印結果:
查詢內存地址的類型
p := &n // 根據地址取值 fmt.Printf("%T\n", p) // 打印結果是*int,即int類型的指針 m := *p fmt.Println(m) //根據地址取值
打印結果:
我們發現打印的結果是:*int,即int類型的指針
nil pointer
var a1 *int //nil pointer fmt.Println(a1) //<nil> var a2 = new(int) fmt.Println(a2) //內存地址 0xc000108010 fmt.Println(*a2) //0 根據內存地址取值 沒有值返回0 *a2 = 100 //根據內存地址賦值 fmt.Println(*a2) //100
打印結果:
小結
- 對變量進行取地址操作(&),可以獲得這個變量的指針變量
- 指針變量的值是指針地址(內存地址)
- 對指針變量進行取值操作(*),可以獲得這個指針變量指向原變量的值,即通過內存地址取值。
switch
我們往往習慣于使用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后支持多個參數
舉個栗子:奇偶數判斷
switch n := 3; n { case 1, 3, 5, 7, 9: fmt.Println("奇數") case 2, 4, 6, 8, 10: fmt.Println("偶數") }
case后加判斷
舉個栗子:
age := 29 switch { case age < 18: fmt.Println("好好學習Z") case age > 18 && age < 60: fmt.Println("好好上班") case age > 60: fmt.Println("希望不用繼續上班了,哈哈") default: fmt.Println(age) }
注意:當在case后加判斷時,switch后面不需要傳入參數,否則會報錯:類型不匹配。
fallthrough
使用建議
在一個 switch 塊內,每個 case 無需聲明 break 來終止 , 如果想順序執行使用 fallthrough ;在一個switch塊內,都必須包含一個 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") } }
總結
相信大家閱讀完這篇文章對go語言中的指針有了更深刻的理解
至于switch,只要我們心里有這個概念即可:switch作用和if一樣,當我們意識到需要寫多個if判斷時,改用switch實現,往往會是比較好的實踐。
原文鏈接:https://juejin.cn/post/7072502044170387492
相關推薦
- 2022-11-22 Linux實現自動掛載autofs的方法詳解_Linux
- 2022-08-22 Pycharm報錯Non-zero?exit?code?(2)的完美解決方案_python
- 2022-09-04 Redis分布式鎖解決秒殺超賣問題_Redis
- 2022-03-19 Go?語言的?:=的具體使用_Golang
- 2022-04-06 聊聊c++數組名稱和sizeof的問題_C 語言
- 2021-12-06 Go語言實現一個簡單生產者消費者模型_Golang
- 2022-05-25 Jenkins 把本地項目構建好上傳到云服務器并執行shell腳本啟動項目
- 2023-06-17 go開源Hugo站點渲染之模板詞法解析_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支