Golang中如何向数组内追加数据

Golang中如何向数组内追加数据 我有一个结构体

type Ssgpa struct {
Aadhaar               zero.Int
Semester              zero.Int
Sgpa                  zero.Float
Creditearned          zero.Float
Overall_creditmulsgpa zero.Float
Overall_cgpa          zero.Float
Overall_grade         zero.String
}
sArray = Ssgpa
err = easyglobal.Db.Select(&sArray , _Query, args…)

在运行时,我们需要向这个 sArray 中添加一些模拟数据。

我们尝试了以下方法,但它不起作用:

sgpa := Ssgpa{}
sgpa.Aadhaar.Int64 = profile.Aadhaar.Int64
sgpa.Semester.Int64 = int64(nCtr)
sgpa.Sgpa.Float64 = 0
sgpa.Creditearned.Float64 = 0
sgpa.Overall_creditmulsgpa.Float64 = 0
sgpa.Overall_cgpa.Float64 = 0
sgpa.Overall_grade.String = ""
sArray  = append(sArray , sgpa)

错误是什么?


更多关于Golang中如何向数组内追加数据的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

我认为你忘记声明 sArray 了,所以应该使用 var sArray Ssgpa 或者用 make 来为它创建一个切片。

sArray := make(Ssgpa, 0)

更多关于Golang中如何向数组内追加数据的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。问题已解决。

我正在使用这个库 github.com/guregu/null/zero

sgpa.Aadhaar.Int64 = profile.Aadhaar.Int64
sgpa.Aadhaar.vaild = true

对于所有元素,我都必须设置 valid = true

在Golang中,sArray 被声明为 Ssgpa 类型(单个结构体),而不是 []Ssgpa 类型(结构体切片)。append 函数只能用于切片,不能用于单个结构体实例。

以下是正确的实现方式:

// 1. 首先将 sArray 声明为切片类型
var sArray []Ssgpa

// 2. 执行数据库查询(返回切片)
err = easyglobal.Db.Select(&sArray, _Query, args...)
if err != nil {
    // 处理错误
}

// 3. 创建要追加的新数据
sgpa := Ssgpa{
    Aadhaar:               zero.IntFrom(profile.Aadhaar.Int64),
    Semester:              zero.IntFrom(int64(nCtr)),
    Sgpa:                  zero.FloatFrom(0),
    Creditearned:          zero.FloatFrom(0),
    Overall_creditmulsgpa: zero.FloatFrom(0),
    Overall_cgpa:          zero.FloatFrom(0),
    Overall_grade:         zero.StringFrom(""),
}

// 4. 使用 append 追加到切片
sArray = append(sArray, sgpa)

或者,如果你需要保持原有的变量声明方式,可以这样修改:

// 如果 sArray 已经是单个结构体实例
var existingData Ssgpa
err = easyglobal.Db.Get(&existingData, _Query, args...)

// 创建切片并追加
var resultArray []Ssgpa
resultArray = append(resultArray, existingData)

// 添加模拟数据
sgpa := Ssgpa{
    Aadhaar:               zero.IntFrom(profile.Aadhaar.Int64),
    Semester:              zero.IntFrom(int64(nCtr)),
    Sgpa:                  zero.FloatFrom(0),
    Creditearned:          zero.FloatFrom(0),
    Overall_creditmulsgpa: zero.FloatFrom(0),
    Overall_cgpa:          zero.FloatFrom(0),
    Overall_grade:         zero.StringFrom(""),
}

resultArray = append(resultArray, sgpa)

错误的原因是:append 的第一个参数必须是切片类型,而你传递的是 Ssgpa 类型的单个实例。编译器会报类似这样的错误:

first argument to append must be slice; have Ssgpa

使用 zero 包的正确初始化方式如上所示,使用 zero.IntFromzero.FloatFrom 等方法,而不是直接访问内部字段。

回到顶部