• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go遍历struct,map,slice的实现

    遍历结构体

    如何实现遍历结构体字段? 好吧,言归正传!举个例子:

    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)
       }
    }
    
    

    输出:这里就不贴了,结果会随机输出,因为map遍历出来结果是无序的,顺序不好控制,也不利于业务逻辑;当业务依赖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#

    这样输出的结果运行多次也不会改变顺序。

    Golang json序列化(struct,int,map,slice)

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    //把结构体都改小写
    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分配内存
        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() //结构体的序列化
        testInt()//序列化数值
        testMap()//序列化map
        testSlice()//序列化切片
    }

    到此这篇关于Go遍历struct,map,slice的实现的文章就介绍到这了,更多相关Go遍历struct,map,slice内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • react组件中的constructor和super知识点整理
    • MapStruct到底是什么?
    • golang struct, map, json之间的相互转换
    • golang 生成对应的数据表struct定义操作
    • Java MapStruct解了对象映射的毒
    • Go 使用Unmarshal将json赋给struct出错的原因及解决
    • C#调用C类型dll入参为struct的问题详解
    • Java Structs框架原理案例详解
    上一篇:Go 容器遍历的实现示例
    下一篇:再次探讨go实现无限 buffer 的 channel方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go遍历struct,map,slice的实现 遍历,struct,map,slice,的,实现,