詳解如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)
數(shù)組是存儲類似類型數(shù)據(jù)的強(qiáng)大數(shù)據(jù)結(jié)構(gòu)。您可以通過索引識別和訪問其中的元素。
在Golang中,您可以通過在0初始化變量i并增加變量直到它達(dá)到數(shù)組的長度,使用for循環(huán)循環(huán)數(shù)組。
它們的語法如下所示:
for i := 0; i < len(arr); i++ {
// perform an operation
}例如,讓我們循環(huán)一個整數(shù)數(shù)組:
package main
import (
"fmt"
)
func main() {
numbers := []int{7, 9, 1, 2, 4, 5}
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
}在上面的代碼中,我們定義了一個名為numbers的整數(shù)數(shù)組,并通過初始化變量i循環(huán)它們。然后,我們在增加i的同時打印出數(shù)組每個索引的值。
上面的代碼輸出如下:
7
9
1
2
4
5
我們還可以使用range關(guān)鍵字循環(huán)數(shù)組,該關(guān)鍵字迭代數(shù)組的整個長度。
語法如下所示:
for index, arr := range arr {
// perform an operation
}
例如:
package main
import (
"fmt"
)
func main() {
arr := []string{"a", "b", "c", "d", "e", "f"}
for index, a := range arr {
fmt.Println(index, a)
}
}在上面的代碼中,我們定義了一個字符串?dāng)?shù)組,并使用for..range關(guān)鍵字循環(huán)其索引和值。
for...range的語法更簡單,更容易理解。您使用它來迭代不同的數(shù)據(jù)結(jié)構(gòu),如數(shù)組、字符串、映射、切片等。
這輸出以下內(nèi)容:
0 a
1 b
2 c
3 d
4 e
5 f
假設(shè)我們忽略索引并簡單地打印出數(shù)組的元素,您只需將index變量替換為下劃線即可。
例如:
package main
import (
"fmt"
)
func main() {
arr := []string{"a", "b", "c", "d", "e", "f"}
for _, a := range arr {
fmt.Println(a)
}
}在上面的代碼中,我們修改了前面的示例,并將index變量替換為下劃線。我們這樣做是為了忽略索引,而是輸出數(shù)組的元素。
這輸出以下內(nèi)容:
a
b
c
d
e
f
如何在Go中循環(huán)字符串
編程中的字符串是不可變的——這意味著您在創(chuàng)建它們后無法修改它們。它們是一個或多個字符(如字母、數(shù)字或符號)的有序序列,可以是常數(shù)或變量。
在Golang中,字符串與Python或JavaScript等其他語言不同。它們表示為UTF-8字節(jié)序列,字符串中的每個元素都表示一個字節(jié)。
您使用for...range循環(huán)或使用常規(guī)循環(huán)循環(huán)字符串。
例如:
package main
import (
"fmt"
)
func main() {
word := "Ab$du"
for index, a := range word {
fmt.Println(index, string(a))
}
}在上面的代碼中,我們定義了一個包含不同字符的字符串,并循環(huán)了其條目。字符串在Golang中表示為字節(jié),這就是為什么在打印出來時,我們需要將每個值轉(zhuǎn)換為類型string。
此輸出:
0 A
1 b
2 $
3 d
4 u
如果我們沒有將每個條目轉(zhuǎn)換為字符串,Golang會打印出字節(jié)表示形式。
例如:
package main
import (
"fmt"
)
func main() {
word := "Ab$du"
for index, a := range word {
fmt.Println(index, a)
}
}結(jié)果:
0 65
1 98
2 36
3 100
4 117
我們還可以通過使用常規(guī)for loop來迭代字符串。
package main
import (
"fmt"
)
func main() {
word := "ab$du"
for i := 0; i < len(word); i++ {
fmt.Println(i, string(word[i]))
}
}如何在Go中循環(huán)map結(jié)構(gòu)
在Golang中,映射是一種將元素存儲在鍵值對中的數(shù)據(jù)結(jié)構(gòu),其中鍵用于識別地圖中的每個值。它類似于Python和Java等其他語言中的字典和哈希圖。
您可以使用 for...range語句在 Golang 中迭代map,其中它獲取索引及其相應(yīng)值。
例如:
package main
import (
"fmt"
)
func main() {
books := map[string]int{
"maths": 5,
"biology": 9,
"chemistry": 6,
"physics": 3,
}
for key, val := range books {
fmt.Println(key, val)
}
}在上面的代碼中,我們定義了一個地圖,存儲以類型string為鍵,類型int作為其值的書店的詳細(xì)信息。然后,我們使用for..range關(guān)鍵字循環(huán)瀏覽其鍵和值。
在Golang中迭代地圖沒有任何指定的順序,我們不應(yīng)該期望按我們循環(huán)時定義的順序返回密鑰。
此代碼輸出:
physics 3
maths 5
biology 9
chemistry 6
如果我們不想指定值而只返回鍵,我們根本不定義值變量,而只定義鍵變量。
例如:
package main
import (
"fmt"
)
func main() {
books := map[string]int{
"maths": 5,
"biology": 9,
"chemistry": 6,
"physics": 3,
}
for key := range books {
fmt.Println(key)
}
}這輸出以下內(nèi)容:
maths
biology
chemistry
physics
同樣,如果我們對地圖的鍵不感興趣,我們使用下劃線來忽略鍵并為值定義變量。
例如:
package main
import (
"fmt"
)
func main() {
books := map[string]int{
"maths": 5,
"biology": 9,
"chemistry": 6,
"physics": 3,
}
for _, val := range books {
fmt.Println(val)
}
}此輸出:
5
9
6
3
如何在Go中循環(huán)Struct
Struct是Golang中的一種數(shù)據(jù)結(jié)構(gòu),用于將不同的數(shù)據(jù)類型組合成一個。與數(shù)組不同,結(jié)構(gòu)可以包含整數(shù)、字符串、布爾值等——所有這些都集中在一個地方。
與地圖不同,我們可以輕松地循環(huán)其鍵和值,在Golang中循環(huán)結(jié)構(gòu)需要您使用稱為reflect的軟件包。這允許我們您修改具有任意類型的對象。
例如,讓我們創(chuàng)建一個結(jié)構(gòu)并循環(huán)它:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
Gender string
Single bool
}
func main() {
ubay := Person{
Name: "John",
Gender: "Female",
Age: 17,
Single: false,
}
values := reflect.ValueOf(ubay)
types := values.Type()
for i := 0; i < values.NumField(); i++ {
fmt.Println(types.Field(i).Index[0], types.Field(i).Name, values.Field(i))
}
}此輸出:
0 Name John
1 Age 17
2 Gender Female
3 Single false
在上面的代碼中,我們定義了一個名為Person的struct,具有不同的屬性,并創(chuàng)建了該struct的新實(shí)例。然后,我們使用reflect包來獲取struct及其type值。
通過使用正則for循環(huán),我們增加初始化變量i,直到它達(dá)到結(jié)構(gòu)的長度。
我們使用NumField方法來獲取結(jié)構(gòu)中的字段總數(shù)。types.Field(i).Index方法返回結(jié)構(gòu)中每個鍵的索引。types.Field(i).Name方法返回結(jié)構(gòu)中每個鍵的字段名。和values.Field(i)返回結(jié)構(gòu)中每個鍵的值。
到此這篇關(guān)于詳解如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Go語言循環(huán)數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺析Go語言中的map數(shù)據(jù)結(jié)構(gòu)是如何實(shí)現(xiàn)的
- Golang對struct字段重新排序優(yōu)化數(shù)據(jù)結(jié)構(gòu)性能實(shí)踐
- Go數(shù)據(jù)結(jié)構(gòu)之HeapMap實(shí)現(xiàn)指定Key刪除堆
- Golang實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解
- Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解
- Go語言數(shù)據(jù)結(jié)構(gòu)之二叉樹可視化詳解
- Go 數(shù)據(jù)結(jié)構(gòu)之堆排序示例詳解
- Go實(shí)現(xiàn)List、Set、Stack、Deque等數(shù)據(jù)結(jié)構(gòu)的操作方法
相關(guān)文章
使用Go和Gorm實(shí)現(xiàn)讀取SQLCipher加密數(shù)據(jù)庫
本文檔主要描述通過Go和Gorm實(shí)現(xiàn)生成和讀取SQLCipher加密數(shù)據(jù)庫以及其中踩的一些坑,文章通過代碼示例講解的非常詳細(xì), 對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06
重學(xué)Go語言之如何開發(fā)RPC應(yīng)用
這篇文章主要為大家詳細(xì)介紹了在Go語言中如何構(gòu)建RPC應(yīng)用,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09
使用Go語言實(shí)現(xiàn)簡單聊天系統(tǒng)
本文介紹了如何使用Go語言和WebSocket技術(shù)構(gòu)建一個簡單的多人聊天室系統(tǒng),包括客戶端連接管理、消息廣播和并發(fā)處理,最后,通過編寫main.go、hub.go和client.go等核心代碼模塊,具有一定的參考價值,感興趣的可以了解一下2024-10-10
Go中string與[]byte高效互轉(zhuǎn)的方法實(shí)例
string與[]byte經(jīng)常需要互相轉(zhuǎn)化,普通轉(zhuǎn)化會發(fā)生底層數(shù)據(jù)的復(fù)制,下面這篇文章主要給大家介紹了關(guān)于Go中string與[]byte高效互轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09

