经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Go遍历struct,map,slice
来源:cnblogs  作者:周伯通的麦田  时间:2021/2/1 11:59:24  对本文有异议

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

遍历结构体

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

  1. package main
  2. import (
  3. "fmt"
  4. "reflect"
  5. )
  6. type Student struct {
  7. name string
  8. age int
  9. }
  10. func main() {
  11. v := reflect.ValueOf(Student{"乔峰", 29})
  12. count := v.NumField()
  13. for i := 0; i < count; i++ {
  14. f := v.Field(i) //字段值
  15. switch f.Kind() {
  16. case reflect.String:
  17. fmt.Println(f.String())
  18. case reflect.Int:
  19. fmt.Println(f.Int())
  20. }
  21. }
  22. }

再举给栗子:

  1. package main
  2. import (
  3. "fmt"
  4. "reflect"
  5. )
  6. type LanType struct {
  7. s1, s2, s3 string
  8. }
  9. var language interface{} = LanType{"Php", "Go", "Python3"}
  10. func main() {
  11. value := reflect.ValueOf(language)
  12. for i := 0; i < value.NumField(); i++ {
  13. fmt.Printf("字段索引 %d: %v\n", i, value.Field(i))
  14. }
  15. }

输出:

BASIC
  1. 字段索引 0: Php
  2. 字段索引 1: Go
  3. 字段索引 2: Python3

遍历切片

使用 for range遍历:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. language := []string{"Php", "Go", "Python3"}
  7. for k, val := range language {
  8. fmt.Printf("切片索引 %d is :%s\n", k, val)
  9. }
  10. }

输出:

BASIC
  1. 切片索引 0 is :Php
  2. 切片索引 1 is :Go
  3. 切片索引 2 is :Python3

遍历Map

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. language := make(map[string]string)
  7. language["1"] = "Php"
  8. language["2"] = "Go"
  9. language["3"] = "Python3"
  10. language["4"] = "C#"
  11.  
  12. for key, val := range language {
  13. fmt.Printf("%v=>%v\n", key, val)
  14. }
  15. }

输出:这里就不贴了,结果会随机输出,因为map遍历出来结果是无序的,顺序不好控制,也不利于业务逻辑;当业务依赖key次序时,那么我们就需要引入“sort”包来解决随机化问题:
比如这样:

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func main() {
  7. language := make(map[string]string)
  8. language["1"] = "Php"
  9. language["2"] = "Go"
  10. language["3"] = "Python3"
  11. language["4"] = "C#"
  12. sorted_keys := make([]string, 0)
  13. for k, _ := range language {
  14. sorted_keys = append(sorted_keys, k) // 提取键名
  15. }
  16. sort.Strings(sorted_keys) //
  17.  
  18. for _, k := range sorted_keys {
  19. fmt.Printf("%v=>%v\n", k, language[k])
  20. }
  21. }

输出:

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

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

原文链接:http://www.cnblogs.com/phpper/p/14332578.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号