zoukankan      html  css  js  c++  java
  • Go遍历struct,map,slice

    原文链接:http://www.zhoubotong.site/post/23.html

    遍历结构体

    如何实现遍历结构体字段? 好吧,言归正传!举个例子:
    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
    ", 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
    ", 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
    ", 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
    ", k, language[k])
       }
    }

    输出:

    BASIC
    1=>Php
    2=>Go
    3=>Python3
    4=>C#

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

    无论从事什么行业,只要做好两件事就够了,一个是你的专业、一个是你的人品,专业决定了你的存在,人品决定了你的人脉,剩下的就是坚持,用善良專業和真诚赢取更多的信任。
  • 相关阅读:
    松软科技web课堂:SQLServer之ROUND() 函数
    松软科技web课堂:SQLServer之LEN() 函数
    接口工具比较
    记录EXCEL格式和TXT文本格式之间的互转
    Fiddler安装证书
    Nginx概述及安装配置
    YSLOW(一款实用的网站性能检测工具)
    通用测试用例大全
    Macaca环境配置及样例执行
    ADB命令
  • 原文地址:https://www.cnblogs.com/phpper/p/14332578.html
Copyright © 2011-2022 走看看