使用指標接收器時,值物件自動取指標的奇怪問題
常見的 Go 教材裡都提到,如果在方法中使用指標接受器,仍然可以在值物件上呼叫該方法,前提是該值可以取指標。
但是,如果我們不將值儲存到變數中,而是直接 “串聯” 函式呼叫,則無法自動取地址。
例如:
package main
import (
"fmt"
"reflect"
)
type Circle struct {
radius float64
}
func NewCircle(radius float64) Circle {
return Circle{radius: 0}
}
func (c *Circle) DummyMethod() {
fmt.Println("Type of receiver:", reflect.TypeOf(c))
}
func main() {
//m := NewCircle(1)
NewCircle(1).DummyMethod() // Chaining function calls results in error.
}
在這裡,建構函式 NewCircle()
返回值型別,我們不將其儲存到變數中,直接 “串聯” 函式呼叫。執行以上程式碼,輸出
./test.go:24: cannot call pointer method on NewCircle(1)
./test.go:24: cannot take the address of NewCircle(1)
但是,如果將 NewCircle()
返回的值先儲存到變數裡,再呼叫 (c *Circle) DummyMethod()
,卻可以正常自動取地址:
func main() {
m := NewCircle(1)
m.DummyMethod()
}
輸出:Type of receiver: *main.Circle
這裡似乎觸及了語法糖的內部實現問題?但沒有在書籍和文件中找到說明。有沒有大佬能解釋一下
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 指標問題的一點體會(區別 [指向指標的指標] 與 [指標的指標] .) (轉)指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 指向指標的指標指標
- 詳解c++指標的指標和指標的引用C++指標
- JavaScript 獲取滑鼠指標的座標JavaScript指標
- 關於指標傳遞和指標的指標指標
- 如何理解指向指標的指標?指標
- C/C++指向指標的指標C++指標
- 陣列和指標的問題陣列指標
- C語言指標安全及指標使用問題C語言指標
- 指標常量和常量指標的區別指標
- C++指標問題C++指標
- 指標的刪除動作指標
- 關於二維陣列指標的問題陣列指標
- C++ 指標陣列與陣列指標的區別C++指標陣列
- 指標的理解指標
- 指標的用法指標
- GO 指標*&問題疑問Go指標
- 有關this指標指向問題指標
- Go指標複製問題Go指標
- Go語言什麼時候該使用指標 與 指標使用分析Go指標
- 指向const物件的指標 和 const指標物件指標
- 【char* 字元指標的用法】及【輸出NULL的問題】字元指標Null
- 空指標的救星指標
- 記一次Java自動拆箱引發的空指標問題Java指標
- NULL 指標、零指標、野指標Null指標
- CUJ:標準庫:容納指標的容器 (轉)指標
- 排查 Kubernetes HPA 透過 Prometheus 獲取不到 http_requests 指標的問題PrometheusHTTP指標
- 以流動債務為例論指標的合理使用指標
- 為什麼使用指標比使用物件本身更好?指標物件
- iOS動畫:帶時分秒指標的時鐘動畫(上)iOS動畫指標
- 字串指標的輸出字串指標
- 空指標的傳說指標
- const指標的引用指標
- 智慧指標的那些事指標
- OC指標的本質指標
- C語言指標常見問題C語言指標
- excel多指標柱圖問題求教Excel指標