亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
go指針語法及viper庫使用中的尋址問題
首頁 後端開發(fā) Golang 在使用Go語言和viper庫時,為什麼傳遞指針的指針是必要的?

在使用Go語言和viper庫時,為什麼傳遞指針的指針是必要的?

Apr 02, 2025 pm 04:00 PM
go語言 ai 為什麼 igs

go指針語法及viper庫使用中的尋址問題

在使用go語言進行編程時,理解指針的語法和使用方法至關重要,尤其是在與第三方庫如viper結合使用時,可能會遇到一些需要深入理解的問題。今天我們要探討的問題是關於在viper庫的使用中,如何正確地傳遞參數,以及為什麼傳遞一個指針的指針是必要的。

在我們的項目中有幾個模塊:setting、section、global和main。具體代碼如下:

setting模塊:

 type setting struct {
    vp *viper.viper
}

func newsetting() (*setting, error) {
    vp := viper.new()
    vp.setconfigname("config")
    vp.addconfigpath("configs/")
    vp.setconfigtype("yaml")
    err := vp.readinconfig()
    if err != nil {
        return nil, err
    }

    return &setting{vp: vp}, nil
}

section模塊:

 type serversettings struct {
    runmode string
    httpport string
    readtimeout time.duration
    writetimeout time.duration
}

func (s *setting) readsection(k string, v interface{}) error {
    err := s.vp.unmarshalkey(k, v)
    if err != nil {
        return err
    }

    return nil
}

global模塊:

 var serversetting *setting.serversettings

main模塊:

 setting, err := setting.newsetting()

setting.readsection("server", &global.serversetting)

現在,如果在main模塊中將第二行修改為setting.readsection("server", global.serversetting),會報錯result must be addressable (a pointer)。這是為什麼呢?

問題在於,global.serversetting已經是一個指針,為什麼在調用readsection方法時,還需要傳遞它的地址呢?

在viper庫的源碼中有這樣的說明:

 // newdecoder returns a new decoder for the given configuration. once
// a decoder has been returned, the same configuration must not be used
// again.
func newdecoder(config *decoderconfig) (*decoder, error) {
    val := reflect.valueof(config.result)
    if val.kind() != reflect.ptr {
        return nil, errors.new("result must be a pointer")
    }

    val = val.elem()
    if !val.canaddr() {
        return nil, errors.new("result must be addressable (a pointer)")
    }
}

從這段代碼可以看出,傳遞的參數不僅需要是一個指針,還需要是可以尋址的(can be addressable)。當你傳遞一個結構體的指針時,它本身並不能被尋址,因此會導致錯誤。

為了驗證這一點,我們可以看一下下面的例子:

 package main

import (
    "fmt"
    "reflect"
)

var a *db

type db struct {
}

func main() {
    val := reflect.valueof(a)
    val = val.elem()
    fmt.println(val.canaddr())

    val = reflect.valueof(&a)
    val = val.elem()
    fmt.println(val.canaddr())
}

運行這段代碼會得到如下輸出:

 false
true

這表明傳遞a本身(即一個指針)時,其元素無法被尋址,而傳遞&a(即指針的指針)時,其元素是可以被尋址的。

因此,在使用readsection方法時,我們需要傳遞&global.serversetting,因為這樣傳遞的是一個指針的地址,它是可以被尋址的,從而滿足viper庫的要求。

以上是在使用Go語言和viper庫時,為什麼傳遞指針的指針是必要的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

全球最權威的加密貨幣行情網站Top10(2025最新版) 全球最權威的加密貨幣行情網站Top10(2025最新版) Jul 29, 2025 pm 12:48 PM

2025年十大權威加密貨幣行情與數據分析平臺為:1. CoinMarketCap,提供全面的市值排名和基礎市場數據;2. CoinGecko,以獨立性和信任分數提供多維度項目評估;3. TradingView,擁有最專業(yè)的K線圖表和技術分析工具;4. 幣安行情,作為最大交易所提供最直接的實時數據;5. 歐易行情,突出衍生品關鍵指標如持倉量和資金費率;6. Glassnode,專注於鏈上數據如活躍地址和巨鯨動向;7. Messari,提供機構級研究報告和嚴格標準化數據;8. CryptoCompa

幣圈免費行情網站怎麼選? 2025年最全測評 幣圈免費行情網站怎麼選? 2025年最全測評 Jul 29, 2025 pm 06:36 PM

2025年最適合查詢穩(wěn)定幣行情的免費工具依次為:1. 幣安,數據權威、交易對豐富,集成TradingView圖表適合技術分析;2. 歐易,界面清晰、功能整合強,支持Web3賬戶與DeFi一站式操作;3. CoinMarketCap,收錄幣種多,穩(wěn)定幣板塊可查看市值排名與脫錨情況;4. CoinGecko,數據維度全面,提供信任分數與社區(qū)活躍度指標,立場中立;5. 火幣(HTX),行情穩(wěn)定、操作友好,適合主流資產查詢;6. Gate.io,新幣與小眾幣種收錄最快,是挖掘潛力項目的首選;7. Tra

什麼是穩(wěn)定幣?一文看懂穩(wěn)定幣! 什麼是穩(wěn)定幣?一文看懂穩(wěn)定幣! Jul 29, 2025 pm 01:03 PM

穩(wěn)定幣是價值錨定法幣或商品的加密貨幣,旨在解決比特幣等價格波動問題,其重要性體現在作為避險工具、交易媒介和連接法幣與加密世界的橋樑。 1. 法幣抵押穩(wěn)定幣由美元等法定貨幣全額儲備支持,優(yōu)點是機制簡單穩(wěn)定,缺點是依賴中心化機構信任,代表項目有USDT、USDC;2. 加密貨幣抵押穩(wěn)定幣通過超額抵押主流加密資產發(fā)行,優(yōu)點是去中心化和透明,缺點是面臨清算風險,代表項目為DAI;3. 算法穩(wěn)定幣依靠算法調節(jié)供需維持價格穩(wěn)定,優(yōu)點是無需抵押、資本效率高,缺點是機制複雜、風險高,曾出現脫錨崩潰案例,目前仍處探

Ethena財庫策略:穩(wěn)定幣第三帝國的崛起 Ethena財庫策略:穩(wěn)定幣第三帝國的崛起 Jul 30, 2025 pm 08:12 PM

目錄雙幣系統(tǒng)大逃殺真實採用仍未發(fā)生結語2023年8月,MakerDAO生態(tài)借貸協(xié)議Spark給出$DAI8%的年化收益,隨后孫割分批進入,累計投入23萬枚$stETH,最高佔Spark存款量15%以上,逼得MakerDAO緊急提案,把利率下調到5%。 MakerDAO的本意是“補貼”$DAI的使用率,差點變成孫宇晨的SoloYield。 2025年7月,Ethe

什麼是比特幣Taproot升級? Taproot有什麼好處? 什麼是比特幣Taproot升級? Taproot有什麼好處? Jul 30, 2025 pm 08:27 PM

目錄什麼是比特幣?比特幣如何運作?為什麼比特幣不可擴展?什麼是BIP(比特幣改進提案)?什麼是比特幣Taproot更新?支付到Taproot(P2TR):Taproot的好處:節(jié)省空間隱私優(yōu)勢安全升級結論:?比特幣是第一個能夠在不使用第三方的情況下實現收發(fā)資金的數字貨幣。由於比特幣是軟件,像任何其他軟件一樣,它需要更新和錯誤修復。比特幣Taproot就是這樣一個為比特幣引入新功能的更新。加密貨幣現在是一個熱門話題。人們已經談論了多年,但現在隨著價格快速上漲,突然間每個人都決定加入並投資它們。令人

以太坊(ETH) NFT 七日銷量近1.6億美元,貸款機構借助 World ID 推出無擔保加密貸款 以太坊(ETH) NFT 七日銷量近1.6億美元,貸款機構借助 World ID 推出無擔保加密貸款 Jul 30, 2025 pm 10:06 PM

目錄加密市場全景掘金熱門代幣VINEVine( 114.79%,流通市值1.44億美元)ZORAZora( 16.46%,流通市值2.9億美元)NAVXNAVIProtocol( 10.36%,流通市值3,576.24萬美元)Alpha解讀過去7天以太坊鏈上NFT銷售額近1.6億美元,CryptoPunks居第一去中心化證明者網絡Succinct推出Succinct基金會,或為代幣TGE

比特幣為什麼有上限?為什麼比特幣上限為2100萬枚 比特幣為什麼有上限?為什麼比特幣上限為2100萬枚 Jul 30, 2025 pm 10:30 PM

比特幣的總量上限為2100萬枚,這是由算法設計決定的不可更改的規(guī)則。1. 通過工作量證明機制和每21萬個區(qū)塊減半的發(fā)行規(guī)則,新幣發(fā)行量呈指數級遞減,最終在2140年左右停止增發(fā)。2. 總量2100萬枚源于等比數列求和,初始獎勵50枚比特幣,每次減半后累加總和收斂于2100萬,由代碼固化并不可篡改。3. 自2009年誕生以來,四次減半事件均顯著推動價格上漲,驗證了稀缺性機制的有效性,并形成全球共識。4. 固定總量賦予比特幣抗通脹性和數字黃金屬性,市值在2025年突破2.1萬億美元,成為全球第五大資

幣安Treehouse(TREE幣)是什麼?即將上線的Treehouse項目概述,代幣經濟與未來發(fā)展分析 幣安Treehouse(TREE幣)是什麼?即將上線的Treehouse項目概述,代幣經濟與未來發(fā)展分析 Jul 30, 2025 pm 10:03 PM

目錄什麼是Treehouse(TREE)? Treehouse(TREE)如何運作? Treehouse產品tETHDOR——分散報價利率GoNuts積分系統(tǒng)Treehouse亮點TREE代幣和代幣經濟學概述2025年第三季度路線圖開發(fā)團隊、投資者和合作夥伴Treehouse創(chuàng)始團隊投資基金夥伴總結隨著DeFi的不斷擴張,固定收益產品的需求日益增長,其作用類似於債券在傳統(tǒng)金融市場中的作用。然而,在區(qū)塊鏈上構建

See all articles