refer to:
https://stackoverflow.com/questions/44827175/golang-return-a-pointer-or-pass-a-reference
基本概念: 指针和指针的值
package main
import (
"fmt"
)
type Person struct {
name string
age int
}
func main(){
fmt.Println("=== hihihi , in main")
materialIds := []string{ "m1", "m2", "m3" }
for i, idStr := range materialIds {
fmt.Println(fmt.Sprintf("== i: %s, idStr: %s", i, idStr))
}
person := Person {
name: "Jim",
age: 16,
}
fmt.Println("=== &person: ", &person) // === &person: &{Jim 16}
fmt.Println("=== person: ", person) // === person: {Jim 16}
fmt.Println("=== &person.name: ", &person.name) // === &person.name: 0xc000010018
fmt.Println("=== person.name: ", person.name) // === person.name: Jim
fmt.Println("=== (&person).name: ", (&person).name) // === (&person).name: Jim
fmt.Println("=== &person.age: ", &person.age) // === &person.age: 0xc000010028
fmt.Println("=== person.age: ", person.age) /// === person.age: 16
one := 1
fmt.Println("one: ", one)
fmt.Println("&one: ", &one)
}
所以结论就是:
指针在函数中作为参数和返回值
go语言中,func可以返回 普通对象(跟ruby,python一样),也可以返回一个指针(或者叫引用,或者叫地址)
& 用来取地址
* 用来获得某个地址对应的值
例如:
// 注意: 函数的声明中,要用 *Car , 固定就是这样写
func (s *Store) GetCar() *Car {
// 返回值中,则使用 & 这个符号
return &Car{Store: s}
}
也可以返回普通的对象:
func (s Store) GetCar() Car