广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go遍历struct,map,slice的实现
  • 896
分享到

Go遍历struct,map,slice的实现

2024-04-02 19:04:59 896人浏览 安东尼
摘要

目录遍历结构体 遍历切片 遍历Mapgolang JSON序列化(struct,int,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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go遍历struct,map,slice的实现

本文链接: https://www.lsjlt.com/news/128135.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go遍历struct,map,slice的实现
    目录遍历结构体 遍历切片 遍历MapGolang json序列化(struct,int,map,slice)遍历结构体 如何实现遍历结构体字段? 好吧,言归正传!举个例子:...
    99+
    2022-11-12
  • go语言yaml转map、map遍历的实现
    yaml文件内容 apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: mysql-snaps...
    99+
    2022-11-12
  • mybatis实现遍历Map的key和value
    目录mybatis 遍历Map的key和valuesql.xmljava代码foreach嵌套遍历Map的key和value具体做法:(Oracle数据库)使用内层循环中使用myba...
    99+
    2022-11-13
  • Map实现遍历的方法有哪些
    Map实现遍历的方法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Map获取键值Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对...
    99+
    2023-05-31
    map 遍历
  • Java如何实现Map集合遍历
    这篇文章给大家分享的是有关Java如何实现Map集合遍历的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用...
    99+
    2023-05-30
  • Go 容器遍历的实现示例
    前文回顾 前面的文章主要介绍了 Go 语言中提供了 list 列表和 Map 映射关系容器,这两种容器都是我们日常经常使用到的。介绍了好多种的 Go 语言提供的基础容器,免不了要查...
    99+
    2022-11-12
  • [java] Map循环遍历的5种方法实现
    [java] Map循环遍历的5种方法实现 文章目录 一、方法一(推荐)二、方法二(推荐)三、方法三四、方法四五、方法五总结 一、方法一(推荐) 推荐使用此方法效率比较高 Map...
    99+
    2023-10-09
    java
  • Java实现Map遍历key-value的四种方法
    目录Map遍历key-value的四种方法1、构造HashMap,给hashMap添加元素2、方法一:先用keySet()取出所有key值,再取出对应value—&mda...
    99+
    2022-11-13
  • Java遍历Map的5种方式实例
    目录一、遍历Map的五种方式二、准备条件三、keySet和values方式遍历四、keySet和get(key)方式遍历map五、entrySet方式遍历map六、Iterator方...
    99+
    2023-02-09
    java遍历map map遍历的几种方式 java如何遍历map
  • Java中Map循环遍历的五种方法实现
    目录1、创建一个Enum2、开始遍历方法一方法二方法三方法四方法五因为Map比较常用,所以今天来总结下Map取值比较常用的几种遍历方法。 1、创建一个Enum public enum...
    99+
    2022-11-13
  • Java项目中实现遍历Map的方法有哪些
    Java项目中实现遍历Map的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言关于java中的map遍历有多种方法,从最早的Iterator,到java5支持的fo...
    99+
    2023-05-31
    java map 遍历
  • Go语言怎么实现二叉树遍历
    这篇文章主要讲解了“Go语言怎么实现二叉树遍历”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言怎么实现二叉树遍历”吧!1. 二叉树的定义二叉树需满足的条件① 本身是有序树② 树中包含的...
    99+
    2023-06-30
  • Go之集合slice的实现
    目录Slice(切片)基于数组生成切片切片修改切片声明Append切片元素循环Slice(切片) 切片和数组类似,可以把它理解为动态数组。切片是基于数组实现的,它的底层就是一个数组...
    99+
    2022-11-12
  • Golang实现优雅的将struct转换为map
    目录前言方式1:使用JSON序列和反序列化方式2:使用反射两种方式对比封装到工具包前言 在项目实践中,有时候我们需要将struct结构体转为map映射表,然后基于map做数据裁剪或操...
    99+
    2023-01-29
    Golang struct转map Golang struct map
  • python的序列遍历和字典遍历的实现方法
    这篇文章主要介绍“python的序列遍历和字典遍历的实现方法”,在日常操作中,相信很多人在python的序列遍历和字典遍历的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-18
  • 详解Go语言如何实现二叉树遍历
    目录1. 二叉树的定义2. 前序遍历3. 中序遍历4. 后序遍历1. 二叉树的定义 二叉树需满足的条件 ① 本身是有序树 ② 树中包含的各个节点的长度不能超过2,即只能是0、1或者2...
    99+
    2022-11-13
  • go map搬迁的实现
    目录能具体解释一下这两种情况吗?下面开始准备搬迁了别着急,正式搬迁才刚刚开始先找找可能的目标桶位置吧遍历bucket链表,一个个迁移事后事(整理)也别忘记了最后,要不要看下是不是全搬...
    99+
    2023-05-16
    go map搬迁 Go map迁移
  • Java如何实现的图的遍历
    这篇文章主要介绍Java如何实现的图的遍历,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.图的遍历从图中某一顶点出发访问图中其余顶点,且每个顶点仅被访问一次图的遍历有两种深度优先遍历DFS、广度优先遍历BFS2.深...
    99+
    2023-06-29
  • GO语言创建钱包并遍历钱包(wallet)的实现代码
    基本知识 公钥加密算法使用的是成对的密钥:公钥和私钥,公钥可以公开,私钥不能被公开。比特币钱包实际上是一个密钥对,当你安装 一个钱包应用,或者是使用一个比特币客户端来生成一个新地址是...
    99+
    2022-11-12
  • es6如何实现数组的遍历
    这篇文章主要介绍“es6如何实现数组的遍历”,在日常操作中,相信很多人在es6如何实现数组的遍历问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6如何实现数组的遍历”的疑惑...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作