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 回复
谢谢。问题已解决。
我正在使用这个库 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.IntFrom、zero.FloatFrom 等方法,而不是直接访问内部字段。


