Go遍历struct,map,slice的实现


Posted in Golang onJune 13, 2021

遍历结构体

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

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内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Golang 相关文章推荐
Golang 正则匹配效率详解
Apr 25 Golang
Go 在 MongoDB 中常用查询与修改的操作
May 07 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
Go语言应该什么情况使用指针
Jul 25 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
Golang 字符串的常见操作
Apr 19 Golang
深入理解 Golang 的字符串
May 04 Golang
Go语言怎么使用变长参数函数
Jul 15 Golang
go web 预防跨站脚本的实现方式
Jun 11 #Golang
Golang生成Excel文档的方法步骤
Go timer如何调度
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 #Golang
Golang中异常处理机制详解
Go语言实现Snowflake雪花算法
Jun 08 #Golang
go语言中http超时引发的事故解决
Jun 02 #Golang
You might like
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
vue中的scope使用详解
2017/10/29 Javascript
angular的输入和输出的使用方法
2018/09/22 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
Python、Javascript中的闭包比较
2015/02/04 Python
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
python executemany的使用及注意事项
2017/03/13 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
韩国11街:11STREET
2018/03/27 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
综合素质评价个性发展自我评价
2015/03/06 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
采购部年度工作总结
2015/08/13 职场文书