Golang 结构体切片,大家的习惯是切片元素是结构体值还是指针(不考虑性能,仅考虑代码优雅)
type Foobar struct { }
切片元素是值
var s []Foobar
Or:
切片元素是指针
var s []*Foobar
不考虑性能,仅考考代码优雅性。
前一种切片(元素为值)在循环赋值时有不便之处:
for _, i := range s { i.xxx = yyy }
上面的代码实际上是无效的,必须使用索引,于是代码很不优雅:
for i, _ := range s { s[i].xxx = yyy }
但后一种切片(元素为指针),在很多使用场景下同样不方便