亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

值接收器與指針接收器

值接收器與指針接收器

縹緲止盈 2019-12-09 15:14:24
對于我來說,目前尚不清楚,在這種情況下,我想使用值接收器而不是始終使用指針接收器?;仡櫼幌挛臋n:type T struct {    a int}func (tv  T) Mv(a int) int         { return 0 }  // value receiverfunc (tp *T) Mp(f float32) float32 { return 1 }  // pointer receiver該文檔還說:“對于基本類型,切片和小型結構之類的類型,值接收器非常便宜,因此,除非該方法的語義要求使用指針,否則值接收器將是高效且清晰的?!笔紫龋f“非常便宜”,但問題是它比指針接收器便宜。因此,我做了一個小的基準測試(基于要點的代碼),向我展示了,即使對于只有一個字符串字段的結構,指針接收器也更快。結果如下:// Struct one empty string propertyBenchmarkChangePointerReceiver  2000000000               0.36 ns/opBenchmarkChangeItValueReceiver  500000000                3.62 ns/op// Struct one zero int propertyBenchmarkChangePointerReceiver  2000000000               0.36 ns/opBenchmarkChangeItValueReceiver  2000000000               0.36 ns/op(編輯:請注意,第二點在較新的go版本中變得無效,請參閱注釋)。第二點說,這是“高效而清晰的”,更多的是品味問題,不是嗎?就個人而言,我更喜歡在各處使用相同的方式來保持一致性。效率在什么意義上?在性能方面似乎指針幾乎總是更高效。具有int屬性的測試很少顯示Value接收器的最小優勢(范圍為0.01-0.1 ns / op)有人可以告訴我一個值接收器比指針接收器更有意義的情況嗎?還是我在基準測試中做錯了什么,我是否忽略了其他因素?
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 538 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號