我是靠谱客的博主 受伤小虾米,最近开发中收集的这篇文章主要介绍go遍历结构体(struct)字段对应的值,切片(slice),字典(map),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、遍历结构体字段:
eg1:

package main
import (
    "fmt"
    "reflect"
)
type person struct {
    name string
    age  int
}
func main() {
    v := reflect.ValueOf(person{"steve", 30})
    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())
        }
    }
}

输出结果:
steve
30
eg2:

package main
import (
    "fmt"
    "reflect"
)
type NotknownType struct {
    s1, s2, s3 string
}
var secret interface{} = NotknownType{"Ada", "Go", "Oberon"}
func main() {
    value := reflect.ValueOf(secret)
    for i := 0; i < value.NumField(); i++ {
        fmt.Printf("Field %d: %vn", i, value.Field(i))
    }
}

输出结果:
Field 0: Ada
Field 1: Go
Field 2: Oberon

二、遍历切片:
for range 结构

package main
import (
    "fmt"
)
func main(){
    slice := []string{"hello","world","hello","everyone!"}
    for k,val:=range slice{
        fmt.Printf("slice %d is :%sn",k,val )
    }
}

输出结果:
slice 0 is :hello
slice 1 is :world
slice 2 is :hello
slice 3 is :everyone!

三、遍历map:

package main

import (
    "fmt"
)

func main() {
    m := make(map[string]string)
    m["1"] = "hello"
    m["2"] = "world"
    m["3"] = "go"
    m["4"] = "is"
    m["5"] = "cool"

    fmt.Printf("The corresponding relationship between key and value is:n")
    for key, val := range m {
        fmt.Printf("%v===>%vn", key, val)
    }
}

输出结果:
The corresponding relationship between key and value is:
1===>hello
2===>world
3===>go
4===>is
5===>cool

但是还有一个问题,上面的程序不做改动运行第二次,结果顺序就会改变,因为map遍历出来结果是无序的,这不好控制,也不利于业务逻辑;当业务依赖key次序时,需要引入“sort”包来解决随机化问题
代码如下:

package main

import (
    "fmt"
    "sort"
)

func main() {
    m := make(map[string]string)
    m["1"] = "hello"
    m["2"] = "world"
    m["3"] = "go"
    m["4"] = "is"
    m["5"] = "cool"

    sorted_keys := make([]string, 0)
    for k, _ := range m {
        sorted_keys = append(sorted_keys, k)
    }
    sort.Strings(sorted_keys)

    for _, k := range sorted_keys {
        fmt.Printf("%v=====>%vn", k, m[k])
    }
}

输出结果是:
1=====>hello
2=====>world
3=====>go
4=====>is
5=====>cool
注意:
输出的结果运行多次不会改变顺序。
但是key的先后顺序是按照字母或者数字排列的。

最后

以上就是受伤小虾米为你收集整理的go遍历结构体(struct)字段对应的值,切片(slice),字典(map)的全部内容,希望文章能够帮你解决go遍历结构体(struct)字段对应的值,切片(slice),字典(map)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部