错误示例
package main
import "fmt"
type MyStruct struct{
Value int
}
func main(){
ss:=[]MyStruct{
{Value:1},
{Value:2},
{Value:0},
}
largest:=&ss[0]
for _,s:=range ss{
if s.Value>largest.Value{
largest=&s
}
fmt.Printf("%p\n",s)
fmt.Printf("%p\n",largest)
}
fmt.Printf("%v\n",largest)
}
正确
都用指针
func main(){
ss:=[]*MyStruct{
{Value:1},
{Value:2},
{Value:0},
}
largest:=ss[0]
for _,s:=range ss{
if s.Value>largest.Value{
largest=s
}
fmt.Printf("%p\n",s)
fmt.Printf("%p\n",largest)
}
fmt.Printf("%v\n",largest)
}
都用结构体
func main(){
ss:=[]MyStruct{
{Value:1},
{Value:2},
{Value:0},
}
largest:=ss[0]
for _,s:=range ss{
if s.Value>largest.Value{
largest=s
}
fmt.Printf("%p\n",s)
fmt.Printf("%p\n",largest)
}
fmt.Printf("%v\n",largest)
}
用结构体暂存中间结果,指针作为元素
func main(){
ss:=[]*MyStruct{
{Value:1},
{Value:2},
{Value:0},
}
largest:=*ss[0]
for _,s:=range ss{
if s.Value>largest.Value{
largest=*s
}
fmt.Printf("%p\n",s)
fmt.Printf("%p\n",largest)
}
fmt.Printf("%#v\n",largest)
}