List拥有
*List接收者的所有方法:(http://golang.org/pkg/container/list/)
func (l *List) Back() *Elementfunc (l *List) Front() *Elementfunc (l *List) Init() *List...func (l *List) Remove(e *Element) interface{}在您的示例
l中,类型为
*List,因此无需取消引用它们。
假设您有这样的事情:
type A struct{}func (a A) X() { fmt.Println("X")}func (a *A) Y() { fmt.Println("Y")}您可以写:
a := A{}a.X()a.Y() // == (&a).Y()或者,您可以执行以下操作:
a := &A{}a.X() // same like == (*a).X()a.Y()但这仅适用于方法接收器。Go不会自动转换函数参数。鉴于以下功能:
func A(x *int) { fmt.Println(*x)}func B(y int) { fmt.Println(y)}这是无效的:
A(5)
您必须这样做:
var x int A(&x)
这也是无效的:
var y *intB(y)
您必须这样做:
B(*y)
与C#或Java不同,当涉及到结构时,Go不会在引用类型和值类型之间进行区分。A
*List是一个指针,a
List不是。
List仅修改字段会修改本地副本。修改修改后的字段
*List会修改所有“副本”。(因为它们不是副本…它们都指向内存中的同一件事)
有些类型似乎隐藏了基础指针(例如切片包含指向数组的指针),但是Go总是按值传递。



