Go遍歷struct,map,slice的實現(xiàn)
遍歷結(jié)構(gòu)體
如何實現(xiàn)遍歷結(jié)構(gòu)體字段? 好吧,言歸正傳!舉個例子:
demo1:
package main
import (
"fmt"
"reflect"
)
type Student struct {
name string
age int
}
func main() {
v := reflect.ValueOf(Student{"喬峰", 29})
count := v.NumField()
for i := 0; i < count; i++ {
f := v.Field(i) //字段值
switch f.Kind() {
case reflect.String:
fmt.Println(f.String())
case reflect.Int:
fmt.Println(f.Int())
}
}
}
再舉給栗子:
package main
import (
"fmt"
"reflect"
)
type LanType struct {
s1, s2, s3 string
}
var language interface{} = LanType{"Php", "Go", "Python3"}
func main() {
value := reflect.ValueOf(language)
for i := 0; i < value.NumField(); i++ {
fmt.Printf("字段索引 %d: %v\n", i, value.Field(i))
}
}
輸出:
BASIC
字段索引 0: Php
字段索引 1: Go
字段索引 2: Python3
遍歷切片
使用 for range遍歷:
package main
import (
"fmt"
)
func main() {
language := []string{"Php", "Go", "Python3"}
for k, val := range language {
fmt.Printf("切片索引 %d is :%s\n", k, val)
}
}
輸出:
BASIC
切片索引 0 is :Php
切片索引 1 is :Go
切片索引 2 is :Python3
遍歷Map
package main
import (
"fmt"
)
func main() {
language := make(map[string]string)
language["1"] = "Php"
language["2"] = "Go"
language["3"] = "Python3"
language["4"] = "C#"
for key, val := range language {
fmt.Printf("%v=>%v\n", key, val)
}
}
輸出:這里就不貼了,結(jié)果會隨機輸出,因為map遍歷出來結(jié)果是無序的,順序不好控制,也不利于業(yè)務(wù)邏輯;當業(yè)務(wù)依賴key次序時,那么我們就需要引入“sort”包來解決隨機化問題:
比如這樣:
package main
import (
"fmt"
"sort"
)
func main() {
language := make(map[string]string)
language["1"] = "Php"
language["2"] = "Go"
language["3"] = "Python3"
language["4"] = "C#"
sorted_keys := make([]string, 0)
for k, _ := range language {
sorted_keys = append(sorted_keys, k) // 提取鍵名
}
sort.Strings(sorted_keys) //
for _, k := range sorted_keys {
fmt.Printf("%v=>%v\n", k, language[k])
}
}
輸出:
BASIC
1=>Php
2=>Go
3=>Python3
4=>C#
這樣輸出的結(jié)果運行多次也不會改變順序。
Golang json序列化(struct,int,map,slice)
package main
import (
"encoding/json"
"fmt"
)
//把結(jié)構(gòu)體都改小寫
type User struct {
UserName string `json:"user_name"` //json的tag標記
Nickname string `json:"nickname"`
Age int
Birthday string
Sex string
Email string
Phone string
}
func testStruct() {
user1 := &User{
UserName: "超哥",
Nickname: "大頭哥",
Age: 18,
Birthday: "2008/8/8",
Sex: "男",
Email: "mahuateng@qq.com",
Phone: "110",
}
//開始json序列化
data, err := json.Marshal(user1)
if err != nil {
fmt.Printf("json.marshal failed,err:", err)
return
}
fmt.Printf("%s\n", string(data))
}
func testInt() {
var a = 18
//開始json序列化
data, err := json.Marshal(a)
if err != nil {
fmt.Printf("json.marshal failed,err:", err)
return
}
fmt.Printf("%s\n", string(data))
}
func testMap() {
var m map[string]interface{} //聲明map
m = make(map[string]interface{}) //必須初始化map分配內(nèi)存
m["username"] = "user1"
m["age"] = 18
m["sex"] = "man"
fmt.Println(m)
data, err := json.Marshal(m)
if err != nil {
fmt.Printf("json.marshal failed,err:", err)
return
}
fmt.Printf("%s\n", string(data))
}
func testSlice() {
//定義一個slice,元素是map
var m map[string]interface{}
var s []map[string]interface{}
m = make(map[string]interface{})
m["username"] = "user1"
m["age"] = 18
m["sex"] = "man"
s = append(s, m)
m = make(map[string]interface{})
m["username"]="user2"
m["age"]=188
m["sex"]="male"
s=append(s,m)
data, err := json.Marshal(s)
if err != nil {
fmt.Printf("json.marshal failed,err:", err)
return
}
fmt.Printf("%s\n", string(data))
}
func main() {
testStruct() //結(jié)構(gòu)體的序列化
testInt()//序列化數(shù)值
testMap()//序列化map
testSlice()//序列化切片
}
到此這篇關(guān)于Go遍歷struct,map,slice的實現(xiàn)的文章就介紹到這了,更多相關(guān)Go遍歷struct,map,slice內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang并發(fā)編程中條件變量sync.Cond的使用
Go標準庫提供Cond原語的目的是,為等待/通知場景下的并發(fā)問題提供支持,本文主要介紹了Go并發(fā)編程sync.Cond的具體使用,具有一定的參考價值,感興趣的可以了解一下2023-01-01
基于GORM實現(xiàn)CreateOrUpdate方法詳解
這篇文章主要為大家介紹了基于GORM實現(xiàn)CreateOrUpdate方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
優(yōu)雅使用GoFrame共享變量Context示例詳解
這篇文章主要為大家介紹了優(yōu)雅使用GoFrame共享變量Context示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
golang復(fù)制文件夾移動到另一個文件夾實現(xiàn)方法詳解
這篇文章主要為大家介紹了golang復(fù)制文件夾并移動到另一個文件夾實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
Go語言實戰(zhàn)之實現(xiàn)一個簡單分布式系統(tǒng)
如今很多云原生系統(tǒng)、分布式系統(tǒng),例如?Kubernetes,都是用?Go?語言寫的,這是因為?Go?語言天然支持異步編程。本篇文章將介紹如何用?Go?語言編寫一個簡單的分布式系統(tǒng),需要的小伙伴開業(yè)跟隨小編一起學(xué)習(xí)一下2022-10-10
golang實現(xiàn)webgis后端開發(fā)的步驟詳解
這篇文章主要介紹如何用golang結(jié)合postgis數(shù)據(jù)庫,使用gin、grom框架實現(xiàn)后端的MVC的接口搭建,文中有詳細的流程步驟及代碼示例,需要的朋友可以參考下2023-06-06
Golang協(xié)程池gopool設(shè)計與實現(xiàn)
本文主要介紹了Golang協(xié)程池gopool設(shè)計與實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

