php 使用 go函数指针,golang 什么时候使用指针
有時候看別人的go代碼,發現他們有的在代碼里面用了指針,有的不使用。
假設有個結構體類型叫做Person,發現有些方法會用func methodA (*person Person)作為參數,或者使用 func *(person Person) methodA()作為結構體自己的方法,也就是person這個結構體 (推薦學習:go)
可以直接調用methodA,但是用的是指針。
或者在map結構里面看到var personMap map[string]*Person 的用法
如果是從java轉過來golang的話,可能不太好理解。因為java的世界是沒有指針的,直接傳遞過去就可以用了,但是到golang上需要注意很多地方。
那么什么時候該用呢?為什么有些地方需要用呢?
不使用指針的話,某些情況是沒法賦值給結構體的
接下來看一段代碼,這段代碼不使用任何指針,先定義一堆用于測試的對象type Person struct { //person結構體,包含年齡,名稱,車
age int
name string
car Car
}
type Car struct { //person名下的車
name string //車的名字
}
var personMap map[string]Person //一個存放person的map
func setName(person Person, name string) { //給參數person設置名字
person.name = name
}
func (person Person) setName(name string) { //設置名字
person.name = name
}
func printName(person Person){ //打印person的名字
fmt.Println(person.name)
}
func (person Person)printName(){ //結構體person自己支持打印名字
fmt.Println(person.name)
}
所以得出結論,當我們需要修改結構體的變量內容的時候,方法傳入的結構體變量參數需要使用指針,也就是結構體的地址
需要修改map中的架構體的變量的時候也需要使用結構體地址作為map的value
如果僅僅是讀取結構體變量,可以不使用指針,直接傳遞引用即可
*type 這里的type這個變量存放的東西是地址,這點需要明確,需要使用&type獲取到地址。
總結
以上是生活随笔為你收集整理的php 使用 go函数指针,golang 什么时候使用指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php分页功能乱码了怎么办,51、PHP
- 下一篇: php excel中文名称乱码,phpe