」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 指標如何影響 Go 函數中的值修改?

指標如何影響 Go 函數中的值修改?

發佈於2024-11-07
瀏覽:646

How do pointers affect value modification in Go functions?

瞭解 Go 中指標的值修改

在 Go 中,指標允許間接存取和修改值。然而,在將指標傳遞給函數時,了解指標的工作原理至關重要。

將指標傳遞給函數時,會出現兩種情況:值修改與指標重新指派。

場景 1 : 值修改

考慮這段程式碼:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}

這裡,函數 f 接收一個指向 Test 結構的指標。在 f 內部,解引用的指標 (*p) 被指派了一個新的 Test 結構,其值為 4。這有效地修改了 main 函數中的原始 i 結構,輸出為 4。

場景2:指標重新賦值

現在,我們稍微改變一下程式碼:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &Test{4}
}

在這種情況下,函數不會修改指向的值,而是將 p 指標重新指派給值為 4 的新 Test 結構。由於p 是f 中的局部變量,因此此更改不會影響main函數中原來的i結構體,輸出仍為2.

解決方案:修改Pointed Value

修改指向的值,我們必須取消引用指標並直接存取結構體成員:

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}

透過使用p.Value,我們修改了原始結構體的Value字段,導致輸出為4。

最新教學 更多>
  • 適用於您的即時應用程式的 Supersonic GPU MelSpectrogram
    適用於您的即時應用程式的 Supersonic GPU MelSpectrogram
    在 Simli,我们最关心的是延迟。毕竟,这就是我们的目标:低延迟视频。另一方面,音频机器学习中一些最常用的算法的实现速度非常慢。需要明确的是,这些实现通常适合创建模型本身或批量推理。但对于 Simli 的我们来说,几毫秒就可能意味着视频是断断续续的混乱还是流畅。 对我来说幸运的是(以及作为读者的...
    程式設計 發佈於2024-11-08
  • 如何在 Next.js 應用程式中安裝和使用「next-sitemap」:逐步指南
    如何在 Next.js 應用程式中安裝和使用「next-sitemap」:逐步指南
    如果您使用 Next.js 建立網站,您可能希望搜尋引擎能夠有效地發現您的頁面並為其建立索引。改進此過程的一種方法是建立網站地圖。網站地圖是一個列出您網站上所有網址的文件,可協助 Google 等搜尋引擎更快地抓取您的網站並將其編入索引。 在本指南中,我們將逐步介紹如何在 Next.js 專案中安...
    程式設計 發佈於2024-11-08
  • Python 線程模組快速指南及範例
    Python 線程模組快速指南及範例
    介紹 Python 中的線程模組提供了一個高級介面來創建和管理線程,使您能夠並發運行程式碼。這對於可以並行執行的任務(例如 I/O 密集型操作)特別有用。以下列出了threading模組中常用的方法和函數,並附有簡要範例。 1. 線程() Thread 類別是執行...
    程式設計 發佈於2024-11-08
  • ✨ 從貢獻者到核心專案維護者:我的開源之旅 ✨
    ✨ 從貢獻者到核心專案維護者:我的開源之旅 ✨
    這一切都始於一個簡單的拉取請求...... 我記得當我第一次涉足開源世界。我最初的目標只是解決我欣賞的項目中的一個小問題。我幾乎不知道,這小小的貢獻將開始一段令人難以置信的旅程。 第 1 步:作為貢獻者開始 最初,我對貢獻感到緊張。我不確定我的程式碼是否足夠好或我的解決方案是否有效。但隨著時間的推...
    程式設計 發佈於2024-11-08
  • 程式設計基礎:C 簡介
    程式設計基礎:C 簡介
    C語言基礎:變數與類型: 定義變數以儲存數據,類型指定儲存的資料類型。輸入輸出: printf() 輸出到螢幕,scanf() 讀取使用者輸入。運算子: 使用算術和比較運算子進行運算和比較。控制流程: if-else 和 switch-case 用於選擇性執行程式碼,循環用於重複執行程式碼。函數: ...
    程式設計 發佈於2024-11-08
  • Mixin 如何在沒有傳統繼承的情況下增強類別功能?
    Mixin 如何在沒有傳統繼承的情況下增強類別功能?
    理解Mixins:類擴展的模組化方法mixin 是一種軟體設計模式,允許組合多個類,提供一種擴展基底類別功能而不直接繼承基底類別的方法。這種技術通常被稱為“抽象子類別”,因為它類似於繼承的概念,但具有更靈活和更精細的方法。 要了解 mixin 的工作原理,讓我們檢查以下範例:// Number cl...
    程式設計 發佈於2024-11-08
  • PHP 中可以像 JavaScript 一樣建立匿名物件嗎?
    PHP 中可以像 JavaScript 一樣建立匿名物件嗎?
    在 PHP 中建立匿名物件在 JavaScript 中,可以輕鬆建立匿名物件。然而,這種技術也可以應用在 PHP 上嗎? 術語解釋在討論對象時,術語「匿名」並不完全準確。相反,它應該被稱為“匿名類型的對象”。 PHP 物件創建在 PHP 中,所有物件都有一個指定的類別。預設類別是stdClass,該...
    程式設計 發佈於2024-11-08
  • 為什麼我的程式僅在 Windows Vista 的發布模式下崩潰?
    為什麼我的程式僅在 Windows Vista 的發布模式下崩潰?
    僅在發布版本中程序崩潰:深入研究調試晦澀之處遇到一個奇特的“薛定諤貓”錯誤可能會讓程式設計師感到困惑。在這種情況下,只有在發布模式下建置並從命令列啟動時,程式才會可靠地崩潰,並留下神秘的終止通知。 追蹤崩潰的根源透過細緻的調試,罪魁禍首方法已經被識別出來,但崩潰本身駐留在最後一個可見跟踪消息之後執行...
    程式設計 發佈於2024-11-08
  • Python 循環 2
    Python 循環 2
    大家好!这是 python 循环系列的第二部分。 第 1 部分在这里: https://dev.to/coderanger08/python-loops-1-5dho 本周,我们将更多地讨论 while 和 for 循环、break 和 pass 语句、范围函数等等。让我们开始吧。 ...
    程式設計 發佈於2024-11-08
  • 你能比較 C++ 中不同容器的迭代器嗎?
    你能比較 C++ 中不同容器的迭代器嗎?
    比較來自不同容器的迭代器:一個警示故事在C 中,迭代器提供了一個強大的遍歷集合的機制。然而,在使用來自不同容器的迭代器時,重要的是要意識到這些限制。 比較不同容器的迭代器是否合法的問題經常出現。考慮以下範例:std::vector<int> foo; std::vector<int...
    程式設計 發佈於2024-11-08
  • Spring Boot:Java 應用程式開發的革命
    Spring Boot:Java 應用程式開發的革命
    如果你用Java開發,你可能聽過Spring Boot。但如果您還不知道,請準備好發現最強大、最實用的工具之一,它徹底改變了 Java 應用程式的創建方式! 什麼是 Spring Boot? Spring Boot 是一個框架,它使 Java 應用程式的開發變得更加容易(而且更加容易!)。它消除...
    程式設計 發佈於2024-11-08
  • LESS CSS 偽元素選擇器中與號 (&) 的作用是什麼?
    LESS CSS 偽元素選擇器中與號 (&) 的作用是什麼?
    揭秘CSS 偽元素選擇器中的& 符號當在CSS 中遇到這樣的代碼時,很自然地想知道& 符號(&) 的意義) 字元:.clearfix { *zoom: 1; &amp;:before, &amp;:after { display: table; conte...
    程式設計 發佈於2024-11-08
  • 如何在沒有子查詢的情況下在 MySQL 中更新行並取得更新的 ID?
    如何在沒有子查詢的情況下在 MySQL 中更新行並取得更新的 ID?
    在 MySQL 中組合 SELECT 和 UPDATE 查詢將 SELECT 和 UPDATE 查詢組合成單一操作對於優化資料庫效能非常有用。在這種情況下,使用者希望組合以下查詢:SELECT * FROM table WHERE group_id = 1013 and time > 100;...
    程式設計 發佈於2024-11-08
  • 將 SQLite 遷移到 MySQL。
    將 SQLite 遷移到 MySQL。
    我介紹一下自己,我是 Alfredo Riveros,我已經學習程式設計多年了,我目前正在 Río Tercero 高等商業學院學習軟體開發高級技術員,下面我將描述我面臨的挑戰遭遇。 正如標題所說,我的目標是將 SQLite 資料庫遷移到 MySQL,這是由我正在接受的資料庫主題中的作業引起的。 ...
    程式設計 發佈於2024-11-08
  • 在 Mageia 9 上安裝 ASDF
    在 Mageia 9 上安裝 ASDF
    今天我們要在 Mageia 9 上安裝 ASDF。接下來的步驟是將外掛程式安裝到 PHP 和 Node.js。 要在版本 0.14.1 上安裝 ASDF,我使用了 Git ZSH 版本: git克隆 https://github.com/asdf-vm/asdf.git ~/.asdf --bra...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3