主頁 > 知識庫 > go結(jié)構(gòu)體嵌套的切片數(shù)組操作

go結(jié)構(gòu)體嵌套的切片數(shù)組操作

熱門標簽:電話機器人軟件免費 壽光微信地圖標注 百度地圖標注后傳給手機 excel地圖標注分布數(shù)據(jù) 阿克蘇地圖標注 外呼系統(tǒng)顯本地手機號 涿州代理外呼系統(tǒng) 外呼系統(tǒng)用什么卡 評價高的400電話辦理

看代碼吧~

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 {//結(jié)構(gòu)體嵌套
 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)
}

結(jié)構(gòu)體切片:

可以直接聲明時初始化,如程序中的1

可以用make,但是必須給定長度,否則不能使用下標進行賦值。

如程序中的2

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

程序編譯沒錯,但是最后運行后會出現(xiàn)panic。。。

panic: runtime error: index out of range

補充:go遍歷結(jié)構(gòu)體(struct)字段對應(yīng)的值,切片(slice),字典(map)

一、遍歷結(jié)構(gòu)體字段:

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())
        }
    }
}

輸出結(jié)果:

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))
    }
}

輸出結(jié)果:

Field 0: Ada

Field 1: Go

Field 2: Oberon

二、遍歷切片:

for range 結(jié)構(gòu)

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 )
    }
}

輸出結(jié)果:

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)
    }
}

輸出結(jié)果:

The corresponding relationship between key and value is:

1===>hello

2===>world

3===>go

4===>is

5===>cool

但是還有一個問題,上面的程序不做改動運行第二次,結(jié)果順序就會改變,因為map遍歷出來結(jié)果是無序的,這不好控制,也不利于業(yè)務(wù)邏輯;當業(yè)務(wù)依賴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])
    }
}

輸出結(jié)果是:

1=====>hello

2=====>world

3=====>go

4=====>is

5=====>cool

注意:

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

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

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

您可能感興趣的文章:
  • GO語言數(shù)組和切片實例詳解
  • 理解Golang中的數(shù)組(array)、切片(slice)和map
  • 深入理解Go語言中的數(shù)組和切片
  • golang將切片或數(shù)組根據(jù)某個字段進行分組操作
  • go特性之數(shù)組與切片的問題
  • 簡單聊一聊Go語言中的數(shù)組和切片

標簽:蘭州 汕頭 重慶 雞西 吐魯番 欽州 銅川 梅河口

巨人網(wǎng)絡(luò)通訊聲明:本文標題《go結(jié)構(gòu)體嵌套的切片數(shù)組操作》,本文關(guān)鍵詞  結(jié)構(gòu),體,嵌套,的,切片,數(shù)組,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go結(jié)構(gòu)體嵌套的切片數(shù)組操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于go結(jié)構(gòu)體嵌套的切片數(shù)組操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章