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 27 Golang
golang json数组拼接的实例
Apr 28 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
一文搞懂Golang 时间和日期相关函数
Dec 06 Golang
如何利用golang运用mysql数据库
Mar 13 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
golang语言指针操作
Apr 14 Golang
Go Grpc Gateway兼容HTTP协议文档自动生成网关
Jun 16 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 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
中国的第一台收音机
2021/03/01 无线电
PHP中for与foreach的区别分析
2011/03/09 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
QML用PathView实现轮播图
2020/06/03 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
python3中数组逆序输出方法
2020/12/01 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
经理任命书模板
2014/06/06 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
Github 使用python对copilot做些简单使用测试
2022/04/14 Python
分享python函数常见关键字
2022/04/26 Python