最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go結構體嵌套的切片數組操作

 更新時間:2021年04月28日 12:01:01   作者:wake_alone  
這篇文章主要介紹了go結構體嵌套的切片數組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

看代碼吧~

package main
import (
 "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() {
/*1*/
 xcData := []XCDataStu{
  XCDataStu{Id: 758, Name: "David758"},
  XCDataStu{Id: 759, Name: "David759"},
 }
/*2*/
 xcdataall := make([]XCDataStuAll, len(xcData))
 /*xcdataall[0]={ XCDataStu{Id: 758, Name: "David758"},
 XCDataStu1{Id: 0, Str1: "dsa", Db1: "dsa",
  Device_type: "fhls", DeviceTypeName: "dasf"}}*/
 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 main
import (
    "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 main
import (
    "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 main
import (
    "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 main
import (
    "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遍歷出來結果是無序的,這不好控制,也不利于業(yè)務邏輯;當業(yè)務依賴key次序時,需要引入“sort”包來解決隨機化問題

代碼如下:

package main
import (
    "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

注意:

輸出的結果運行多次不會改變順序。

但是key的先后順序是按照字母或者數字排列的。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • Golang設計模式之工廠方法模式講解和代碼示例

    Golang設計模式之工廠方法模式講解和代碼示例

    工廠方法是一種創(chuàng)建型設計模式, 解決了在不指定具體類的情況下創(chuàng)建產品對象的問題,本文將通過代碼示例詳細給大家介紹一下Golang工廠方法模式,感興趣的同學可以參考一下
    2023-06-06
  • Go errors默認加堆棧信息的作用分析

    Go errors默認加堆棧信息的作用分析

    這篇文章主要為大家介紹了Go errors默認加堆棧信息作用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • go語言中時間戳格式化的方法

    go語言中時間戳格式化的方法

    這篇文章主要介紹了go語言中時間戳格式化的方法,涉及Go語言中time的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Go語言單元測試的實現及用例

    Go語言單元測試的實現及用例

    在日常開發(fā)中,我們通常需要針對現有的功能進行單元測試,以驗證開發(fā)的正確性,本文主要介紹了Go語言單元測試的實現及用例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Golang通脈之方法詳情

    Golang通脈之方法詳情

    這篇文章主要介紹了Golang通脈方法,Go語言中的方法(Method)是一種作用于特定類型變量的函數。這種特定類型變量叫做接收者(Receiver)。接收者的概念就類似于,其他語言中的this或者 self,具體內容請和小編一起來學習下面文章內容吧
    2021-10-10
  • golang 對私有函數進行單元測試的實例

    golang 對私有函數進行單元測試的實例

    這篇文章主要介紹了golang 對私有函數進行單元測試的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go設計模式之中介者模式講解和代碼示例

    Go設計模式之中介者模式講解和代碼示例

    中介者是一種行為設計模式,讓程序組件通過特殊的中介者對象進行間接溝通,達到減少組件之間依賴關系的目的,因此本文就給大家詳細介紹一下Go中介者模式,需要的朋友可以參考下
    2023-06-06
  • golang struct, map, json之間的相互轉換

    golang struct, map, json之間的相互轉換

    本文用于記錄我在 golang 學習階段遇到的類型轉換問題,針對的是 json 、map、struct 之間相互轉換的問題,感興趣的可以了解一下
    2021-06-06
  • 獲取Golang環(huán)境變量的三種方式小結

    獲取Golang環(huán)境變量的三種方式小結

    本文介紹了Golang中獲取環(huán)境變量的三種方式,包含使用Viper包、GoDotEnv包和os包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • Golang?Mutex錯過會后悔的重要知識點分享

    Golang?Mutex錯過會后悔的重要知識點分享

    互斥鎖?Mutex?是并發(fā)控制的一個基本手段,是為了避免并發(fā)競爭建立的并發(fā)控制機制,本文主要為大家整理了一些Mutex的相關知識點,希望對大家有所幫助
    2023-07-07

最新評論

木里| 维西| 双城市| 三门县| 剑河县| 定边县| 贵定县| 镇雄县| 鱼台县| 鹤庆县| 丰顺县| 耒阳市| 永新县| 石泉县| 通辽市| 沽源县| 万山特区| 辽中县| 凯里市| 体育| 兴仁县| 定兴县| 宝兴县| 会泽县| 娄烦县| 科尔| 凤庆县| 修水县| 岫岩| 苍南县| 周宁县| 青铜峡市| 略阳县| 于都县| 大理市| 游戏| 芦山县| 建湖县| 和顺县| 金华市| 佛教|