go_細節注意

go細節

  • 一、使用指針接受者和不使用指針接受者
    • 1,不使用指針接受者:
    • 2,使用指針接受者
    • 3,區別與優劣勢

一、使用指針接受者和不使用指針接受者

1,不使用指針接受者:

func (d dog) move() {fmt.Println("狗會動")
}
func main() {var x Movervar wangcai = dog{} // 旺財是dog類型x = wangcai         // x可以接收dog類型var fugui = &dog{}  // 富貴是*dog類型x = fugui           // x可以接收*dog類型x.move()
}
  • move 方法使用了值接收者 dog,這意味著它可以被任何 dog 類型的實例調用。
  • 在 main 函數中,x 可以接收 dog 類型的值,也可以接收 *dog 類型的指針。然而,在將 wangcai 賦值給 x 時,Go 會自動進行值到指針的轉換,因此這里的代碼仍然可以編譯通過。

2,使用指針接受者

func (d *dog) move() {fmt.Println("狗會動")
}
func main() {var x Movervar wangcai = dog{} // 旺財是dog類型x = wangcai         // x不可以接收dog類型var fugui = &dog{}  // 富貴是*dog類型x = fugui           // x可以接收*dog類型
}
  • move 方法使用了指針接收者 *dog,這意味著它只能被 *dog 類型的指針調用。
  • 在 main 函數中,將 wangcai 賦值給 x 就會導致編譯錯誤,因為 wangcai 是一個 dog 類型的值,而 x 要求接收 *dog 類型的指針。只有當將 fugui 賦值給 x 時,代碼才能編譯通過。

3,區別與優劣勢

  • 調用方式不同:

    值接收者方法可以被實例值調用,也可以被指針調用,而指針接收者方法只能被指針調用。
    值接收者方法在調用時會隱式地將實例值復制一份,而指針接收者方法在調用時操作的是同一個實例,不會產生副本。

  • 修改對象:
    使用指針接收者方法可以修改對象的狀態,因為它們直接操作實例,而值接收者方法只能修改副本的狀態,不會影響原始實例。

  • 性能和開銷:
    值接收者方法會產生一份實例的拷貝,可能導致內存和性能開銷。
    指針接收者方法直接操作實例,避免了拷貝,通常更高效。
    選擇使用哪種接收者取決于你的需求和設計目標:

  • 如果方法需要修改對象的狀態或者需要操作對象的指針,使用指針接收者。
    如果方法不需要修改對象狀態,使用值接收者,這樣可以避免不必要的指針操作和副本創建。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Logstash將數據從MySQL同步至Elasticsearch(有坑)

文章目錄 一、準備工作1、安裝elasticSearchkibana2、安裝MySQL3、安裝Logstash 二、全量同步1、準備MySQL數據與表2、上傳mysql-connector-java.jar3、啟動Logstash4、修改logstash.conf文件5、修改full_jdbc.sql文件6、打開Kibana創建索引和映射7、重啟logstash進行全量同步8…

TCP/IP協議追層分析物理層(第三十九課)

TCP/IP協議追層分析物理層(第三十九課) 1 物理層:建立、維護、斷開物理連接,定義了接口及介質,實現了比特流的傳輸。 1、傳輸介質分類 有線介質:網線(雙絞線)、光纖 無線介質:無線電 微波 激光 紅外線 2、雙絞線分類: 五類cat5: 適用于100Mbps 超五類cat5e:適用于…

Qt掃盲- Graphics View框架理論綜述

Graphics View框架理論綜述 一、概述二、Graphics View 體系結構1. The Scene2. The View3. 圖元 Item 三、圖形視圖坐標系統1. 圖元Item的坐標2. Scene Scene坐標3. View 視圖坐標4. 坐標映射 四、關鍵特性1. 縮放和旋轉2. 打印3. 拖放4. 鼠標指針和 提示5. 動畫6. OpenGL渲染…

【100天精通python】Day35:一文掌握GUI界面編程基本操作

目錄 專欄導讀 1 GUI 編程概述 1.1 為什么需要GUI? 1.2 常見的GUI編程工具和庫 1.3 GUI應用程序的組成和架構 2 使用Tkinter 庫 進行GUI編程 2.1 使用Tkinter庫進行GUI編程的基本流程 2.2 使用Tkinter庫進行GUI編程 2.2.1 導入Tkinter庫 2.2.2 添加標簽和…

繪制世界地圖or中國地圖

寫在前面 在8月初,自己需要使用中國地圖的圖形,自己就此也查詢相關的教程,自己也做一下小小總結,希望對自己和同學們有所幫助。 最終圖形 這個系列從2022年開始,一直更新使用R語言分析數據及繪制精美圖形。小杜的生信筆記主要分享小杜學習日常!如果,你對此感興趣可以加…

Flutter Engine編譯環境安裝

前言 根據設置引擎開發環境的描述,確保有以下可用依賴項: Linux、macOS 或 Windows。 Linux 支持 Android 和 Fuchsia 的交叉編譯工件,但不支持 iOS。macOS 支持 Android 和 iOS 的交叉編譯工件。Windows 不支持任何 Android、Fuchsia 或 i…

MySQL存儲結構及索引

文章目錄 MySQL結構1.2存儲引擎介紹1.3存儲引擎特點InnoDB邏輯存儲結構 MyISAMMemory區別及特點存儲引擎選擇 索引索引概述索引結構BTreeHash索引分類聚集索引&二級索引索引語法SQL性能分析索引優化最左前綴法則范圍查詢字符串不加引號模糊查詢or連接條件數據分布影響覆蓋索…

達夢數據庫dbms_stats包的操作實踐記錄

索引的統計信息收集 GATHER_INDEX_STATSindex_stats_show 根據模式名,索引名獲得該索引的統計信息。用于經過 GATHER_TABLE_STATS、GATHER_INDEX_STATS 或 GATHER_SCHEMA_STATS 收集之后展示。返回兩個結果集:一個是索引的統計信息;另一個是…

Kotlin優點及為什么使用Kotlin

文章目錄 一 Hello Kotlin二 Kotlin優點三 團隊為什么采用 Kotlin 一 Hello Kotlin Kotlin和Andriod 二 Kotlin優點 三 團隊為什么采用 Kotlin

如何從PHP 獲取絕對路徑、文檔根目錄、基本 URL

根據您的服務器配置,獲取正確的路徑信息可能具有挑戰性。例如,PHP 并沒有直接提供一個變量來返回站點基本 URL。以下是一些代碼片段,可以幫助您獲取絕對路徑、文檔根目錄和基本 URL。 獲取絕對路徑 如果您的腳本位于 /path/directory/ 目錄中,您可以使用以下代碼片段來獲…

Mendix 基礎審計模塊介紹

一、前言 作為售前顧問,幫助客戶選型低代碼產品是日常工作。考察一家低代碼產品的好壞,其中一個維度就是產品的成熟度。產品成熟度直接影響產品在使用中的穩定性和用戶體驗,對于新工具導入和可持續運用至關重要。 那怎么考察一個產品是否成…

【校招VIP】java語言考點之ConcurrentHashMap1.7和1.8

考點介紹: ConcurrentHashMap是JAVA校招面試的熱門考點,主要集中在1.7和1.8的底層結構和相關的性能提高。 理解這個考點要從map本身的并發問題出發,再到hashTable的低性能并發安全,引申到ConcurrentHashMap的分塊處理。同時要理解…

JAVA工具類Collections

// 【Collections】:集合的工具類 對集合進行排序 主要針對類類型 // 使用sort方法 // 1. 在需要排序的實體類中實現 Comparable接口 重寫compareTo方法 // 1.動態綁定 向下轉型 // 2.基本數據類型 this.id-s1.id 升序 // 3.類類型 this.n…

【C++】做一個飛機空戰小游戲(八)——生成敵方炮彈(rand()和srand()函數應用)

[導讀]本系列博文內容鏈接如下: 【C】做一個飛機空戰小游戲(一)——使用getch()函數獲得鍵盤碼值 【C】做一個飛機空戰小游戲(二)——利用getch()函數實現鍵盤控制單個字符移動【C】做一個飛機空戰小游戲(三)——getch()函數控制任意造型飛機圖標移動 【C】做一個飛…

SpringBoot中的可擴展接口

目錄 # 背景 # 可擴展的接口啟動調用順序圖 # ApplicationContextInitializer # BeanDefinitionRegistryPostProcessor # BeanFactoryPostProcessor # InstantiationAwareBeanPostProcessor # SmartInstantiationAwareBeanPostProcessor # BeanFactoryAware # Applicati…

炬芯科技發布全新第二代智能手表芯片,引領腕上新趨勢!

2023年7月,炬芯科技宣布全新第二代智能手表芯片正式發布。自2021年底炬芯科技推出第一代的智能手表芯片開始便快速獲得了市場廣泛認可和品牌客戶的普遍好評。隨著技術的不斷創新和突破,為了更加精準地滿足市場多元化的變幻和用戶日益增長的體驗需求&…

Jmeter-壓力測試工具

文章目錄 Jmeter快速入門1.1.下載1.2.解壓1.3.運行 2.快速入門2.1.設置中文語言2.2.基本用法 Jmeter快速入門 1s內發送大量請求,模擬高QPS,用以測試網站能承受的壓力有多大 Jmeter依賴于JDK,所以必須確保當前計算機上已經安裝了JDK&#xff0…

Android Shape 的使用

目錄 什么是Shape? shape屬性 子標簽屬性 corners (圓角) solid (填充色) gradient (漸變) stroke (描邊) padding (內邊距) size (大小…

CentOS系統環境搭建(三)——Centos7安裝DockerDocker Compose

centos系統環境搭建專欄🔗點擊跳轉 Centos7安裝Docker&Docker Compose 使用 yum 安裝Docker 內核 [rootVM-4-17-centos ~]# uname -r 3.10.0-1160.88.1.el7.x86_64Docker 要求 CentOS 系統的內核版本高于 3.10 更新 yum yum update安裝需要的軟件包&#x…

在Windows Server 2008上啟用自動文件夾備份

要在Windows Server 2008上啟用自動文件夾備份,您可以使用內置的Windows備份功能。下面是如何設置它的方法: 1. 點擊“開始”按鈕并選擇“服務器管理器”,打開“服務器管理器”。 2. 在“服務器管理器”窗口中,單擊左側窗格中的“…