Go語言中的循環與指針問題:為什麼v.name都是'博客”?
Go語言循環與指針陷阱:詳解v.name
全為“博客”的原因
Go語言中的for...range
循環和指針結合使用時,容易出現一些令人困惑的問題。本文通過一個例子,深入剖析for...range
循環的機制以及指針的使用,解釋為什麼代碼輸出結果全為“博客”。
以下代碼片段展示了這個問題:
type student struct { name string age int } func main() { m := make(map[string]*student) stus := []student{ {name: "pprof.cn", age: 18}, {name: "測試", age: 23}, {name: "博客", age: 28}, } for _, stu := range stus { m[stu.name] = &stu // 問題出在這裡} for k, v := range m { fmt.Println(k, "=>", v.name) } }
運行這段代碼,輸出結果將全部是博客
。這是因為for...range
循環中的stu
變量並非每次迭代都創建一個新的變量。它是一個循環變量,其內存地址在整個循環過程中保持不變。 因此, &stu
始終指向同一個內存地址。每次迭代都將這個相同的地址賦值給map中的值,最終map中所有指針都指向了最後一個stu
變量,即{name: "博客", age: 28}
。
解決方法:創建新的變量副本
為了避免這個問題,需要在每次迭代中創建stu
的副本,而不是直接使用其地址:
for _, stu := range stus { s := stu // 創建stu的副本m[stu.name] = &s }
通過創建新的變量s
, m[stu.name] = &s
現在指向的是s
的內存地址,而s
在每次迭代中都是一個新的變量,從而解決了指針指向同一內存地址的問題,最終輸出結果將正確反映每個學生的姓名。
理解for...range
循環的機制以及指針的特性,對於編寫高效且正確的Go代碼至關重要。 避免此類陷阱的關鍵在於,在循環中使用指針時,要確保每個指針都指向不同的內存地址。
以上是Go語言中的循環與指針問題:為什麼v.name都是'博客”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

介紹去中心化金融(DeFi)正在改變用戶與區塊鏈技術的交互方式,為交易、借貸和收益創造創造無縫靈活的途徑。 Solayer(LAYER)正是這一變革的核心,它構建了一個跨多條區塊鏈連接流動性和實用性的協議。隨著DeFi的普及以及對高效跨鏈基礎設施需求的增長,Solayer正吸引著交易員、開發者和投資者的關注,他們正在尋找下一個重大機遇。本文將解釋Solayer的概念,詳細介紹其創新功能和代幣經濟學,並展望其2030年

目錄如何選擇加密貨幣進行短期交易?短期交易最佳加密貨幣列表比特幣雪崩索拉納狗狗幣多邊形世界幣Chainlink新興企業如何選擇加密貨幣進行短期交易?短期交易是指購買加密貨幣並持有一段時間,從幾分鐘到幾天不等。這種方法前景光明,但也存在風險,耗時較長,因為你需要持續關注市場行情。但這還不是全部;在選擇合適的加密貨幣資產時,你還應該注意以下幾點:波動性:短期交易成功的主要指標之一是高揮發性加密貨幣的價值;價值越高,價格波動越大,從而創造更

你不需要是經濟學家也能感受到經濟的動盪。物價下跌,工作穩定性下降,每個人似乎都對自己的財務未來感到焦慮。什麼是穩定幣?穩定幣就像加密世界中的救生衣:一種設計用來保持價值穩定的數字貨幣,通常與美元或黃金等穩定資產掛鉤。與比特幣或以太坊等價格波動劇烈的加密貨幣不同,穩定幣追求穩定性。當經濟風暴來襲時,投資者自然會尋求穩定,而穩定幣恰好提供了這種避險資產——免受波動的影響。為什麼穩定幣在經濟不穩定時蓬勃發展在

目錄 什麼是VitaInu(VINU)?什麼是VINU代幣? 2025年VINU幣價格預測VitaInu(VINU)價格預測2025-2030至2030年VitaInu(VINU)價格預測2025年VitaInu價格預測2026年VitaInu價格預測2027年VitaInu價格預測2028年VitaInu價格預測2029年VitaInu價格預測2030年VitaInu價格預測解讀VINU的市場表現

Solana鏈上兩大Meme幣——MooDeng(MOODENG)、GoatseusMaximus(GOAT)昨(11)日登陸幣安「Alpha」平台後迅速翻紅,重燃投資人熱情,其中MOODENG幣價單日狂飆逾123%,一舉刷新今年以來新高。幣安Alpha主要聚焦於早期潛力幣種,通常會上架社群熱度高、有成長潛力的幣種,如今正式上線MOODENG、GOAT,不僅為這兩款Meme幣注入資金活水,更讓Solana生態再

區塊鏈技術持續改變著人們在線上交換價值、驗證信息和建立信任的方式。隨著去中心化應用在各行各業的蓬勃發展,跨多個區塊鏈確認聲明和身份的能力變得越來越重要,也越來越複雜。傳統的、依賴於中心化權威的信任模型往往不足以支撐去中心化的生態系統,因此對區塊鏈原生驗證解決方案的需求也日益增長。 SignProtocol(SIGN)通過提供一個用於跨多個區塊鍊網絡創建、驗證和管理證明的框架來應對這一挑戰。 SignProtocol旨在打造一個全鏈

加密貨幣市場項目隨著區塊鏈發展而不斷湧現,目的就是改變傳統金融實踐,SwissCheese就是其中一個項目。據了解,SwissCheese是一個讓用戶能夠交易通證化股票的去中心化平台,旨在增強市場的可及性並降低交易成本,為更具包容性的金融環境鋪平道路。平台的原生代幣為SWCH,主要作用就是交易、治理等。該項目上線後立即引起了投資者的關注,但僅僅了解SWCH是什麼幣種?還不能分析出SWCH值得投資嗎?結合當前數據來看,SWCH具有一定的

目錄ALPACA幣最新新聞和價格動態AlpacaFinance(ALPACA)是什麼? AlpacaFinance是如何運作的? ALPACA幣是什麼? ALPACA代幣經濟學ALPACA價格走勢分析2025年ALPACA價格預測AlpacaFinance(ALPACA)未來展望ALPACA幣怎麼買?總結AlpacaFinance(ALPACA)是幣安智能鏈上的借貸協議,具有槓桿收益農業的特徵。自幣安宣布將於5月2日下架AL
