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
}

但后一种切片(元素为指针),在很多使用场景下同样不方便