Jadual Kandungan
GO Pointer Syntax dan menangani masalah dalam penggunaan Perpustakaan Viper
Rumah pembangunan bahagian belakang Golang Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper?

Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper?

Apr 02, 2025 pm 04:00 PM
pergi bahasa ai kenapa igs

GO Pointer Syntax dan menangani masalah dalam penggunaan Perpustakaan Viper

Apabila pengaturcaraan di GO, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutamanya apabila digunakan dalam kombinasi dengan perpustakaan pihak ketiga seperti Viper, anda mungkin menghadapi beberapa isu yang memerlukan pemahaman yang mendalam. Persoalan yang akan kita bincangkan hari ini adalah tentang bagaimana untuk lulus parameter dengan betul dalam penggunaan perpustakaan Viper dan mengapa lulus penunjuk ke penunjuk diperlukan.

Terdapat beberapa modul dalam projek kami: penetapan, seksyen, global dan utama. Kod khusus adalah seperti berikut:

Menetapkan Modul:

 Taipkan tetapan struct {
    vp *viper.viper
}

func newssetting () (*tetapan, ralat) {
    VP: = viper.new ()
    VP.SetConfigname ("Config")
    VP.AddConfigPath ("Configs/")
    VP.SetConfigType ("Yaml")
    err: = vp.readinconfig ()
    jika err! = nil {
        Kembali nih, Err
    }

    kembali & menetapkan {vp: vp}, nil
}
Salin selepas log masuk

Modul Bahagian:

 Taipkan serversettings struct {
    RunMode String
    HTTPPORT String
    baca time.duration
    WriteTimeout Time.Duration
}

Func (S *Setting) ReadSection (K String, V Interface {}) ERROR {
    Err: = s.vp.unmarshalkey (k, v)
    jika err! = nil {
        kembali err
    }

    kembali nih
}
Salin selepas log masuk

Modul Global:

 var serversetting *setting.serversettings
Salin selepas log masuk

Modul Utama:

 menetapkan, err: = setting.newsetting ()

menetapkan.ReadSection ("Server", & Global.ServerSetting)
Salin selepas log masuk

Sekarang, jika anda mengubah suai baris kedua untuk menetapkan.ReadSection ("Server", Global.ServerSetting) Dalam modul utama, hasil ralat mesti ditangani (penunjuk). Mengapa ini?

Masalahnya ialah global.ServerSetting sudah menjadi penunjuk, mengapa anda perlu lulus alamatnya apabila memanggil kaedah ReadSection?

Terdapat penerangan dalam kod sumber Perpustakaan Viper:

 // NewDecoder mengembalikan penyahkod baru untuk konfigurasi yang diberikan. sekali
// penyahkod telah dikembalikan, konfigurasi yang sama tidak boleh digunakan
// lagi.
Func NewDecoder (config *decoderConfig) ( *decoder, error) {
    val: = reflect.valueof (config.result)
    jika val.kind ()! = reflect.ptr {
        kembali nil, errors.new ("Hasil mestilah penunjuk")
    }

    val = val.elem ()
    jika! val.canaddr () {
        kembali nih, errors.new ("Hasil mesti ditangani (penunjuk)")
    }
}
Salin selepas log masuk

Dari kod ini, kita dapat melihat bahawa parameter yang diluluskan bukan sahaja perlu menjadi penunjuk, tetapi juga perlu ditangani (boleh ditangani). Apabila anda lulus penunjuk ke struktur, ia tidak dapat ditangani dengan sendirinya, sehingga menyebabkan kesilapan.

Untuk mengesahkan ini, kita dapat melihat contoh berikut:

 Pakej utama

import (
    "FMT"
    "Renungkan"
)

var a *db

taip 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 ())
}
Salin selepas log masuk

Menjalankan kod ini akan mendapat output berikut:

 palsu
Benar
Salin selepas log masuk

Ini menunjukkan bahawa apabila A diluluskan (iaitu penunjuk), unsur -unsurnya tidak dapat ditangani, sementara ketika & A diluluskan (iaitu penunjuk penunjuk), unsur -unsurnya dapat ditangani.

Oleh itu, apabila menggunakan kaedah pembacaan, kita perlu lulus & global.

Atas ialah kandungan terperinci Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana cara memainkan urutan gambar dengan lancar dengan animasi CSS? Bagaimana cara memainkan urutan gambar dengan lancar dengan animasi CSS? Apr 04, 2025 pm 05:57 PM

Bagaimana untuk mencapai main balik gambar seperti video? Banyak kali, kita perlu melaksanakan fungsi pemain video yang serupa, tetapi kandungan main balik adalah urutan imej. terus ...

Mengapa kod RXJS saya tidak berkuatkuasa semasa beroperasi di sungai? Mengapa kod RXJS saya tidak berkuatkuasa semasa beroperasi di sungai? Apr 04, 2025 pm 06:27 PM

Mengapa kod saya tidak berkuat kuasa apabila menggunakan RXJS untuk beroperasi di sungai? Belajar RXJS ...

Bagaimana untuk melaksanakan kesan bersarang anotasi teks dalam editor quill? Bagaimana untuk melaksanakan kesan bersarang anotasi teks dalam editor quill? Apr 04, 2025 pm 05:21 PM

Penyelesaian untuk melaksanakan anotasi teks bersarang dalam editor Quill. Semasa menggunakan editor quill untuk anotasi teks, kita sering perlu menggunakan editor quill untuk ...

Kenapa tidak ada maklumat permintaan halaman di rangkaian konsol selepas melompat Vue-router? Kenapa tidak ada maklumat permintaan halaman di rangkaian konsol selepas melompat Vue-router? Apr 04, 2025 pm 05:27 PM

Kenapa tidak ada maklumat permintaan halaman di rangkaian konsol selepas melompat Vue-router? Apabila menggunakan Vue-Router untuk pengalihan halaman, anda mungkin melihat ...

Bagaimana cara menggunakan CSS untuk mencapai kesan main balik yang lancar dari urutan imej? Bagaimana cara menggunakan CSS untuk mencapai kesan main balik yang lancar dari urutan imej? Apr 04, 2025 pm 04:57 PM

Bagaimana untuk merealisasikan fungsi bermain gambar seperti video? Ramai kali, kita perlu mencapai kesan main balik video yang serupa dalam aplikasi, tetapi kandungan main balik tidak ...

Bagaimana untuk mengubahsuai dan memainkan semula kuki yang diminta di Chrome Devtools? Bagaimana untuk mengubahsuai dan memainkan semula kuki yang diminta di Chrome Devtools? Apr 04, 2025 pm 05:48 PM

Cara mengubahsuai dan memainkan semula kuki yang diminta dengan berkesan di Chromedevtools menggunakan Chrome ...

Mengapa tidak ada output apabila menggunakan RXJS untuk memproses elemen aliran? Bagaimana menggunakan dan dari pengendali dengan betul? Mengapa tidak ada output apabila menggunakan RXJS untuk memproses elemen aliran? Bagaimana menggunakan dan dari pengendali dengan betul? Apr 04, 2025 pm 06:36 PM

Perbincangan mengenai masalah apabila menggunakan RXJS untuk beroperasi pada unsur -unsur dalam aliran dalam pembelajaran dan menggunakan RXJS ...

Bagaimana untuk mencapai kesan elemen input yang tinggi tetapi teks yang tinggi di bahagian bawah? Bagaimana untuk mencapai kesan elemen input yang tinggi tetapi teks yang tinggi di bahagian bawah? Apr 04, 2025 pm 10:27 PM

Bagaimana untuk mencapai ketinggian elemen input adalah sangat tinggi tetapi teks terletak di bahagian bawah. Dalam pembangunan front-end, anda sering menghadapi beberapa keperluan pelarasan gaya, seperti menetapkan ketinggian ...

See all articles