广告
返回顶部
首页 > 资讯 > 后端开发 > GO >怎么在golang中利用结构体嵌套的切片数组
  • 347
分享到

怎么在golang中利用结构体嵌套的切片数组

2023-06-14 22:06:06 347人浏览 薄情痞子
摘要

本篇文章为大家展示了怎么在golang中利用结构体嵌套的切片数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是Golanggolang 是Google开发的一种静态强类型、编译型、并发型,并具

本篇文章为大家展示了怎么在golang中利用结构体嵌套的切片数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

什么是Golang

golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。

package mainimport ( "fmt")type XCDataStu struct { Id   int    `JSON:"id"   xORM:"id"` Name string `json:"name"  xorm:"name"`}type XCDataStu1 struct { Id             int    `json:"id" xorm:"id"` Str1           string `json:"str1" xorm:"str1"` Db1            string `json:"db1" xorm:"db1"` Device_type    string `json:"Device_type" xorm:"Device_type"` DeviceTypeName string `json:"DeviceTypeName"`}type XCDataStuAll struct {//结构体嵌套 XCDataStuinall  XCDataStu XCDataStu1inall XCDataStu1}func main() { xcData := []XCDataStu{  XCDataStu{Id: 758, Name: "David758"},  XCDataStu{Id: 759, Name: "David759"}, } xcdataall := make([]XCDataStuAll, len(xcData))  fmt.Println(len(xcData)) fmt.Println(xcData[0]) fmt.Println(xcData[1]) i := 0 for ; i < 2; i++ {  xcdataall[i].XCDataStuinall.Id = xcData[i].Id  xcdataall[i].XCDataStuinall.Name = xcData[i].Name } fmt.Println(xcdataall)}

结构体切片:

可以直接声明时初始化,如程序中的1

可以用make,但是必须给定长度,否则不能使用下标进行赋值。

如程序中的2

 var xcdataall []XCDataStuAll for ; i < 2; i++ {  xcdataall[i].XCDataStuinall.Id = xcData[i].Id  xcdataall[i].XCDataStuinall.Name = xcData[i].Name }

程序编译没错,但是最后运行后会出现panic。。。

panic: runtime error: index out of range

补充:go遍历结构体(struct)字段对应的值,切片(slice),字典(map)

一、遍历结构体字段:

eg1:

package mainimport (    "fmt"    "reflect")type person struct {    name string    age  int}func main() {    v := reflect.ValueOf(person{"steve", 30})    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())        }    }}

输出结果:

steve

30

eg2:

package mainimport (    "fmt"    "reflect")type NotknownType struct {    s1, s2, s3 string}var secret interface{} = NotknownType{"Ada", "Go", "Oberon"}func main() {    value := reflect.ValueOf(secret)    for i := 0; i < value.NumField(); i++ {        fmt.Printf("Field %d: %v\n", i, value.Field(i))    }}

输出结果:

Field 0: Ada

Field 1: Go

Field 2: Oberon

二、遍历切片:

for range 结构

package mainimport (    "fmt")func main(){    slice := []string{"hello","world","hello","everyone!"}    for k,val:=range slice{        fmt.Printf("slice %d is :%s\n",k,val )    }}

输出结果:

slice 0 is :hello

slice 1 is :world

slice 2 is :hello

slice 3 is :everyone!

三、遍历map:

package mainimport (    "fmt")func main() {    m := make(map[string]string)    m["1"] = "hello"    m["2"] = "world"    m["3"] = "go"    m["4"] = "is"    m["5"] = "cool"    fmt.Printf("The corresponding relationship between key and value is:\n")    for key, val := range m {        fmt.Printf("%v===>%v\n", key, val)    }}

输出结果:

The corresponding relationship between key and value is:

1===>hello

2===>world

3===>go

4===>is

5===>cool

但是还有一个问题,上面的程序不做改动运行第二次,结果顺序就会改变,因为map遍历出来结果是无序的,这不好控制,也不利于业务逻辑;当业务依赖key次序时,需要引入“sort”包来解决随机化问题

代码如下:

package mainimport (    "fmt"    "sort")func main() {    m := make(map[string]string)    m["1"] = "hello"    m["2"] = "world"    m["3"] = "go"    m["4"] = "is"    m["5"] = "cool"    sorted_keys := make([]string, 0)    for k, _ := range m {        sorted_keys = append(sorted_keys, k)    }    sort.Strings(sorted_keys)    for _, k := range sorted_keys {        fmt.Printf("%v=====>%v\n", k, m[k])    }}

输出结果是:

1=====>hello

2=====>world

3=====>go

4=====>is

5=====>cool

上述内容就是怎么在golang中利用结构体嵌套的切片数组,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么在golang中利用结构体嵌套的切片数组

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么在golang中利用结构体嵌套的切片数组
    本篇文章为大家展示了怎么在golang中利用结构体嵌套的切片数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是golanggolang 是Google开发的一种静态强类型、编译型、并发型,并具...
    99+
    2023-06-14
  • go结构体嵌套的切片数组操作
    看代码吧~ package main import ( "fmt" ) type XCDataStu struct { Id int `json:"id" ...
    99+
    2022-06-07
    GO 数组 嵌套
  • 怎么在C语言中使用多维数组和结构体
    本篇内容介绍了“怎么在C语言中使用多维数组和结构体”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!题目:有一个颜色集合,里面有若干个颜色值(R...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作