golang踩坑系列之結構體定義方法

2021-09-18 01:40:24 字數 704 閱讀 1103

先說結論:

1、編譯器未不允許為型別定義方法名相同的物件和指標方式的方法。(比如同乙個test方法不能同時存在指標形式和物件形式)

2、物件呼叫指標形式的方法:是把物件求位址然後傳入函式第乙個引數。

3、指標呼叫物件形式的方法:是把指標指向的物件傳入函式第乙個引數。

type ff struct 

func (this *ff) tt()

ff2:=ff}

ff2.tt()

ff2.m.lock() //panic

ff1:=&ff}

ff1.tt()

ff1.m.lock() //panic

如上所知,同乙個goroutine中向同一把鎖執行加鎖操作,將會引發panic。這裡是操作的同一把鎖。

type ff struct 

func (this ff) tt()

ff2:=ff}

ff2.tt()

ff2.m.lock() //正常

ff1:=&ff}

ff1.tt()

ff1.m.lock() //正常

這裡將不會panic,因為並不是網上說的指標形式的方法不存在會生成指標形式的方法,而是把指標的值作為引數傳入函式。

Golang之json踩坑之旅

最近公司有個專案,需要用golang寫乙個命令列工具。去呼叫業務系統的grpc介面,需要對引數進行封裝並解析。呼叫的請求引數結構體需要經過json解析成byte type inferencerequest struct sendtoremotefeaturedata map string inte ...

python 踩坑系列之遲繫結

將函式體和函式呼叫關聯起來,就叫繫結 在程式執行之前 也就是編譯和鏈結時 執行的繫結是早繫結,遲繫結 late binding 是發生在執行時。def outer return lambda x x i for i in range 3 f1,f2,f3 outer print f1 1 print...

python 踩坑系列之巢狀列表建立

初始化列表有很多方法,其中之一可以通過 來初始化 a 3 print a 通過這個方法獲取了乙個包含三個空list的巢狀列表,下面對這個列表進行修改 print a 1 1 1 通過輸出,我們發現我們只是修改了a 0 為什麼a裡的子列表全部都被修改了,接下來通過內建函式id來檢視一下a的子元素的記憶...