
在Go语言中,将向量(这里指container/vector)嵌入到结构体中,需要注意向量的初始化和指针的使用。直接在结构体中声明vector类型变量,可能会导致未初始化的向量在使用时出现问题。因此,推荐使用指针来引用向量,并在使用前进行初始化。
package main
import "container/vector"
type Point struct {
x, y int
}
type MyStruct struct {
MyVectorInsideStruct *vector.Vector
}
func main() {
var myMyStruct MyStruct
myMyStruct.MyVectorInsideStruct = new(vector.Vector) // 初始化向量
myPoint := Point{2, 3}
myMyStruct.MyVectorInsideStruct.Push(myPoint)
// 访问向量中的元素
firstPoint := myMyStruct.MyVectorInsideStruct.At(0).(Point) // 类型断言
println(firstPoint.x, firstPoint.y) // 输出: 2 3
}代码解释:
注意事项:
使用 slices 包的例子:
立即学习“go语言免费学习笔记(深入)”;
package main
import "fmt"
type Point struct {
x, y int
}
type MyStruct struct {
MyPoints []Point
}
func main() {
myMyStruct := MyStruct{
MyPoints: []Point{}, // 初始化切片
}
myPoint := Point{2, 3}
myMyStruct.MyPoints = append(myMyStruct.MyPoints, myPoint)
fmt.Println(myMyStruct.MyPoints[0].x, myMyStruct.MyPoints[0].y) // 输出: 2 3
}总结:
在Go语言中,将向量嵌入结构体需要特别注意向量的初始化。使用指针可以避免未初始化的问题,但必须在使用前通过new()或&操作符进行初始化。同时,注意类型断言的使用。建议使用Go 1.18 之后引入的 slices 包代替过时的 container/vector 包,以获得更好的性能和更简洁的语法。
以上就是Go语言结构体中嵌入向量的正确姿势的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号