網(wǎng)站首頁 編程語言 正文
正文
在前一篇博客我們學(xué)習(xí)了 Go 數(shù)組,其要求所有元素為同一數(shù)據(jù)類型,如果希望存儲不同類型的數(shù)據(jù),就要用到結(jié)構(gòu)體相關(guān)知識。
結(jié)構(gòu)體的定義:存儲相同或不同類型的數(shù)據(jù)集合。
有 C 相關(guān)經(jīng)驗(yàn),結(jié)構(gòu)體還是比較容易理解的,語法格式如下所示:
type struct_variable_type struct { member definition member definition ... member definition }
上述語法格式的關(guān)鍵字是 struct
和 type
,struct_variable_type
是結(jié)構(gòu)體名稱,例如我們聲明一個(gè)【人】的結(jié)構(gòu)體,有姓名,有年齡,有性別。
package main import "fmt" // 聲明結(jié)構(gòu)體 type People struct { name string age int sex int } func main() { //使用結(jié)構(gòu)體 people := People{ "橡皮擦", 18, 0} fmt.Println(people) }
在編寫的時(shí)候要注意語法格式,其中結(jié)構(gòu)體的使用代碼建議放在一行,或者右大括號緊跟最后一個(gè)元素。
使用結(jié)構(gòu)體也可以攜帶元素名,即下述寫法。
//使用結(jié)構(gòu)體 people := People{name: "橡皮擦", age: 18, sex: 0} fmt.Println(people)
訪問結(jié)構(gòu)體成員 使用 結(jié)構(gòu)體.成員名
即可,當(dāng)然也可以用該辦法進(jìn)行賦值。
//使用結(jié)構(gòu)體 var people1 People // var people2 People people1.name = "橡皮擦" people1.age = 18 people1.sex = 1 fmt.Println(people1)
Go Range
作為一個(gè) Python 程序員,關(guān)鍵字 range 是非常熟悉的,在 Go 中 range 關(guān)鍵字可以用于 for 循環(huán),用于數(shù)組它返回元素的索引和值,在后續(xù)學(xué)習(xí)的集合中返回鍵值對。
range 用于數(shù)組的語法格式如下所示:
for i,value := range a_array{ // TODO }
結(jié)合語法格式,編寫下述代碼:
package main import "fmt" var a_array = []int{1, 2, 3, 4, 5, 6, 7, 8} func main() { for i, value := range a_array { fmt.Printf("索引:%d,值:%d\n", i, value) } }
運(yùn)行代碼輸出如下信息:
索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:4
索引:4,值:5
索引:5,值:6
索引:6,值:7
索引:7,值:8
如果將 range 作用于字符串,可以對其每個(gè)字符進(jìn)行迭代輸出。
package main import ( "fmt" ) func main() { var str string = "xiangpica" for k, v := range str { fmt.Println(k, string(v)) } }
上述 str
中的內(nèi)容為純英文,k
值每次+1。
0 x
1 i
2 a
3 n
4 g
5 p
6 i
7 c
8 a
如果 str
中包含中文,k
值每次 +3,代碼如下:
func main() { var str string = "橡皮擦" for k, v := range str { fmt.Println(k, string(v)) } }
輸出結(jié)果如下:
0 橡
3 皮
6 擦
如果是中英文混拼,出現(xiàn)的結(jié)果會更加有趣。
0 x
1 i
2 a
3 n
4 g
5 橡
8 p
9 i
10 皮
13 c
14 a
15 擦
這里其實(shí)可以得到一個(gè)結(jié)論,range
迭代是的 Unicode,而不是字節(jié),返回值是 UTF-8 編碼第 1 個(gè)字節(jié)的索引,所以索引值有可能并不連續(xù)。
在編寫代碼的時(shí)候,如果不需要索引,只保留元素,可以使用廢棄占位符,代碼如下:
var str string = "xiang橡pi皮ca擦" for _, v := range str { fmt.Println(string(v)) }
range 相關(guān)知識等學(xué)到切片和集合的時(shí)候,應(yīng)該還會涉及到,這里參考其它語言的經(jīng)驗(yàn),我們下篇再見。
原文鏈接:https://juejin.cn/post/7124900260186423333
相關(guān)推薦
- 2022-12-08 C/C++高精度運(yùn)算(大整數(shù)運(yùn)算)詳細(xì)講解_C 語言
- 2022-08-15 python中sort()和sorted()的區(qū)別及用法實(shí)例_python
- 2022-08-23 Selenium多窗口切換解決方案_python
- 2023-05-29 docker部署xxl-job-admin出現(xiàn)數(shù)據(jù)庫拒絕問題及解決方法_docker
- 2022-07-19 Git Clone命令直接使用用戶名密碼Clone
- 2023-02-06 C#實(shí)現(xiàn)獲取機(jī)器碼的示例詳解_C#教程
- 2022-09-04 詳解Go語言中數(shù)組,切片和映射的使用_Golang
- 2021-12-28 vscode搭建go開發(fā)環(huán)境案例詳解_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支