Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Bagaimana untuk menukar jenis yang diketahui kepada penunjuk kepada parameter jenis dalam suis?

Bagaimana untuk menukar jenis yang diketahui kepada penunjuk kepada parameter jenis dalam suis?

Feb 09, 2024 am 11:30 AM
Ralat kompilasi

Bagaimana untuk menukar jenis yang diketahui kepada penunjuk kepada parameter jenis dalam suis?

Editor PHP Banana akan memperkenalkan kepada anda cara menukar jenis yang diketahui kepada penunjuk yang menunjuk kepada parameter jenis dalam suis. Dalam pengaturcaraan, kadangkala kita perlu menukar pembolehubah jenis yang diketahui kepada penunjuk untuk operasi yang lebih fleksibel dalam atur cara. Penukaran ini boleh dicapai dengan menggunakan operator "&". Awalan nama pembolehubah dengan operator "&" untuk menukarnya menjadi penunjuk kepada pembolehubah. Dengan cara ini, kita boleh menggunakan penunjuk dalam atur cara untuk memanipulasi pembolehubah dan bukannya hanya memberikan atau membacanya. Seterusnya, kami akan memperincikan cara melakukan penukaran jenis ini dan menyediakan kod sampel untuk membantu anda memahami dengan lebih baik.

Kandungan soalan

Saya cuba menulis fungsi yang menukar tatasusunan bait rentetan json kepada tatasusunan bait lain berdasarkan parameter jenis bagi nilai pulangan adalah seperti berikut:

  • peta[rentetan]antaramuka{}: ditukar kepada peta[rentetan]antaramuka{}
  • []bait: Tiada penukaran, kembali seperti sedia ada
  • struct: Tukar kepada struct

Kod saya adalah seperti berikut:

func getjsondata[t any](jsonbytearray []byte) (result *t, err error) {
    var buff t

    switch any(result).(type) { // https://appliedgo.com/blog/a-tip-and-a-trick-when-working-with-generics
    case *[]byte:
        result = &t(jsonbytearray)
    default:
        err = json.unmarshal(jsonbytearray, &buff)
        result = &buff
    }

    return
}
Salin selepas log masuk

Kod ini menyebabkan ralat jenis apabila menukar jenis jsonbytearray kepada t, seperti ditunjukkan di bawah:

cannot convert jsonByteArray (variable of type []byte) to type T
Salin selepas log masuk

Bagaimana untuk menetapkan penuding pembolehubah jenis []bait ini kepada nilai pulangan jenis generik?

Penyelesaian

Disebabkan t受到any的约束,所以不能直接转换。您必须断言 &jsonbytearray 实际上与该开关情况下的 *t jenis yang sama:

func getjsondata[t any](jsonbytearray []byte) (result *t, err error) {
    var buff t

    switch any(result).(type) {
    case *[]byte:
        result = any(&jsonbytearray).(*t)
    default:
        err = json.unmarshal(jsonbytearray, &buff)
        result = &buff
    }

    return
}
Salin selepas log masuk

Ini membuatkan ralat kompilasi hilang, tetapi reka bentuk ini tidak begitu baik. Jika anda perlu menggunakan json.unmarshal 专门用于一种类型 (*[]byte), anda lebih baik menukar tapak panggilan daripada menggunakan fungsi generik.

Saya menganggap matlamat anda adalah untuk membenarkan pemanggil mendapatkan sepotong bait seperti sedia ada, dan bukannya membuangnya. Kemudian di tapak panggilan anda boleh memanggil fungsi sebagai

data := GetJsonData[[]byte](jsonByteArray)
Salin selepas log masuk

Ini bermakna pada ketika ini anda sudah tahu jsonbytearray ialah kepingan bait.

Kemudian, tiada sebab untuk memanggil fungsi ini. Anda hanya boleh mendapatkan alamat parameter: data := &jsonbytearray ,并在其他地方使用 json.unmarshal .

Atas ialah kandungan terperinci Bagaimana untuk menukar jenis yang diketahui kepada penunjuk kepada parameter jenis dalam suis?. 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 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu 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)

Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime Kekunci mana yang perlu ditekan semasa menjalankan kod python secara sublime Apr 03, 2024 pm 03:54 PM

Kekunci pintasan untuk menjalankan kod Python dalam Teks Sublime ialah: Windows dan Linux: Ctrl + B Mac: Cmd + B Letakkan kursor dalam kod. Tekan kekunci pintasan. Kod akan dijalankan menggunakan penterjemah Python lalai sistem.

Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? Penjelasan terperinci tentang warisan fungsi C++: Bagaimana untuk menggunakan 'penunjuk kelas asas' dan 'penunjuk kelas terbitan' dalam warisan? May 01, 2024 pm 10:27 PM

Dalam pewarisan fungsi, gunakan "penunjuk kelas asas" dan "penunjuk kelas terbitan" untuk memahami mekanisme pewarisan: apabila penuding kelas asas menghala ke objek kelas terbitan, transformasi ke atas dilakukan dan hanya ahli kelas asas diakses. Apabila penuding kelas terbitan menghala ke objek kelas asas, hantaran ke bawah dilakukan (tidak selamat) dan mesti digunakan dengan berhati-hati.

Bagaimana untuk menjalankan bahasa C dalam notepad++ Bagaimana untuk menjalankan bahasa C dalam notepad++ Apr 08, 2024 am 10:06 AM

Notepad++ sendiri tidak boleh menjalankan program bahasa C dan memerlukan pengkompil luaran untuk menyusun dan melaksanakan kod. Untuk menggunakan pengkompil luaran, anda boleh menyediakannya seperti berikut: 1. Muat turun dan pasang pengkompil bahasa C 2. Cipta alat tersuai dalam Notepad++ dan konfigurasikan laluan dan parameter fail boleh laku pengkompil; atur cara dan simpan dengan sambungan fail .c 4. Pilih fail program bahasa C dan pilih alat tersuai dari menu "Jalankan" untuk menyusun 5. Lihat hasil kompilasi dan keluarkan ralat kompilasi atau mesej kejayaan. Jika kompilasi berjaya, fail boleh laku akan dihasilkan.

Apakah maksud val dalam java Apakah maksud val dalam java Apr 25, 2024 pm 10:06 PM

Kata kunci val dalam Java digunakan untuk mengisytiharkan pembolehubah tempatan yang tidak berubah, iaitu nilainya tidak boleh diubah setelah ditetapkan. Ciri-cirinya ialah: Kebolehubahan: Setelah dimulakan, pembolehubah val tidak boleh ditugaskan semula. Skop setempat: pembolehubah val hanya boleh dilihat dalam blok kod di mana ia diisytiharkan. Jenis inferens: Pengkompil Java akan membuat kesimpulan jenis pembolehubah val berdasarkan ungkapan yang diberikan. Pembolehubah tempatan sahaja: val hanya boleh digunakan untuk mengisytiharkan pembolehubah tempatan, bukan medan kelas atau parameter kaedah.

Apakah maksud = dalam java Apakah maksud = dalam java Apr 26, 2024 pm 11:30 PM

Operator "=" dalam bahasa pengaturcaraan Java digunakan untuk menetapkan nilai kepada pembolehubah, menyimpan nilai di sebelah kanan ungkapan dalam pembolehubah di sebelah kiri. Penggunaan: pembolehubah = ungkapan, dengan pembolehubah ialah nama pembolehubah yang menerima tugasan, dan ungkapan ialah segmen kod yang mengira atau mengembalikan nilai.

Perbezaan antara const dan statik dalam c++ Perbezaan antara const dan statik dalam c++ May 01, 2024 am 10:54 AM

Pengubah suai const menunjukkan pemalar dan nilai tidak boleh diubah suai statik menunjukkan jangka hayat dan skop pembolehubah. Ahli data yang diubah suai oleh const tidak boleh diubah suai selepas pemulaan Pembolehubah yang diubah suai oleh statik dimulakan apabila atur cara dimulakan dan dimusnahkan apabila atur cara itu akan wujud walaupun tiada objek aktif dan boleh diakses merentas fungsi. Pembolehubah tempatan yang diubah suai oleh const mesti dimulakan apabila diisytiharkan, manakala pembolehubah tempatan yang diubah suai oleh statik boleh dimulakan kemudian. Pembolehubah ahli kelas yang diubah suai const mesti dimulakan dalam senarai pembina atau permulaan, manakala pembolehubah ahli kelas yang diubah suai statik boleh dimulakan di luar kelas.

Perbincangan tentang kedudukan bahasa Go: Apakah ciri-ciri bahasa peringkat atasan? Perbincangan tentang kedudukan bahasa Go: Apakah ciri-ciri bahasa peringkat atasan? Mar 14, 2024 am 08:51 AM

Perbincangan tentang kedudukan bahasa Go: Apakah ciri-ciri bahasa peringkat atasan? Dalam bidang pembangunan perisian, bahasa pengaturcaraan boleh dibahagikan kepada kategori yang berbeza mengikut matlamat reka bentuk dan kedudukan mereka, salah satunya dipanggil bahasa peringkat atas. Bahasa peringkat atas merujuk kepada bahasa pengaturcaraan yang lebih abstrak dan tahap yang lebih tinggi daripada bahasa peringkat rendah Mereka biasanya mempunyai fungsi yang lebih berkuasa dan tahap abstraksi yang lebih tinggi, dan boleh melaksanakan fungsi yang kompleks dengan lebih cepat. Sebagai bahasa pengaturcaraan moden, bahasa Go juga dianggap sebagai bahasa peringkat atas, jadi apakah ciri yang ada padanya? Seterusnya kita akan membincangkan

Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Bagaimana untuk menyekat parameter jenis dalam kaedah generik Java? Apr 30, 2024 pm 01:30 PM

Untuk mengehadkan parameter jenis dalam kaedah generik Java, gunakan sintaks dengan Bound ialah jenis atau antara muka. Oleh itu, parameter hanya menerima jenis yang mewarisi daripada Bound atau melaksanakan antara muka Bound. Sebagai contoh, hadkan T kepada jenis yang setanding dengan dirinya sendiri.

See all articles