如何填充包含未知大小的结构切片的结构[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何填充包含未知大小的结构切片的结构[重复]相关的知识,希望对你有一定的参考价值。

此问题已经在这里有了答案:

我正在努力使我的问题简化为以下简化版本。

我想初始化其中包含另一种类型的结构切片的结构。

我看过各种示例,它们似乎是针对简单版本的,其中结构仅包含[] int等的一部分。

我似乎无法弄清楚初始化结构体/切片所需的内容。

Swells切片可以是任意长度,包括空。

package main

import (
        "fmt"
)

type Swell struct {
        Slot      uint
        Height    float32
        Period    float32
        Dir       uint
}

type ForecastHour struct {
        Year      uint
        Month     uint
        Day       uint
        Hour      uint
        Swells    []Swell
}

func NewForecastHour() *ForecastHour {
       p := ForecastHour{}
       p.Year  = 2019
       p.Month = 10
       p.Day = 3
       p.Hour = 13


       p.Swells[0] := { Slot: 0, Height: 2.20, Period: 15.5,Dir: 300 }
       p.Swells[1] := { Slot: 1, Height: 1.20, Period: 5.5,Dir: 90 }
       p.Swells[2] := { Slot: 5, Height: 0.98, Period: 7.5,Dir: 180 }

       return &p
}

func main() {
        ThisHour := NewForecastHour()
        fmt.Println(ThisHour)
}

当我执行以上操作时,我得到:

./test.go:30:16: non-name p.Swells[0] on left side of :=
./test.go:30:23: syntax error: unexpected {, expecting expression
./test.go:31:8: syntax error: non-declaration statement outside function body
答案

首先,请注意,您无法使用:=将值分配给struct属性。要解决您的主要问题,您只需初始化p.Swells

func NewForecastHour() *ForecastHour {
       p := ForecastHour{}
       p.Year  = 2019
       p.Month = 10
       p.Day = 3
       p.Hour = 13
       p.Swells = make([]Swell, 3) // initialize with size 3

       p.Swells[0] = Swell{ Slot: 0, Height: 2.20, Period: 15.5,Dir: 300 }
       p.Swells[1] = Swell{ Slot: 1, Height: 1.20, Period: 5.5,Dir: 90 }
       p.Swells[2] = Swell{ Slot: 5, Height: 0.98, Period: 7.5,Dir: 180 }

       return &p
}

Demo

如果要添加任意数量的膨胀,则可以使用效率较低的append方法:

p.Swells = []Swell{}
p.Swells = append(p.Swells, Swell{ Slot: 0, Height: 2.20, Period: 15.5,Dir: 300 })
p.Swells = append(p.Swells, Swell{ Slot: 1, Height: 1.20, Period: 5.5,Dir: 90 })
p.Swells = append(p.Swells, Swell{ Slot: 5, Height: 0.98, Period: 7.5,Dir: 180 })

这在for循环中起作用。

以上是关于如何填充包含未知大小的结构切片的结构[重复]的主要内容,如果未能解决你的问题,请参考以下文章

一种在结构中查找填充大小和位置的方法?

从Rust中的迭代器填充切片的最佳方法是什么? [重复]

如何将字节数组附加到Go中的字节片[重复]

32位机器上“双”结构成员的填充逻辑[重复]

在 Perl 中修改然后切片未知大小的二维数组

typedef struct vs struct - “struct”的存储大小未知[重复]