Apakah enum?
Enum, singkatan daripada penghitungan, ialah jenis data khas yang mewakili satu set nilai yang dinamakan. Ia digunakan untuk mentakrifkan koleksi nilai malar yang berkaitan secara konsep, meningkatkan kebolehbacaan kod dan mengurangkan ralat yang disebabkan oleh penggunaan nilai literal sewenang-wenangnya.
// Enum in Java enum TrafficLight { RED, YELLOW, GREEN }
# Enum in Python from enum import Enum class TrafficLight(Enum): RED = 1 GREEN = 2 BLUE = 3
Enum dalam Go
Go tidak menyokong enum secara asli. Walau bagaimanapun, terdapat cara popular untuk mentakrifkan enum dalam Go ialah menggunakan pendekatan iota.
package main type TrafficLight int const ( RED TrafficLight = iota // 0 GREEN // 1 BLUE // 2 ) func main() { fmt.Println(RED) // Output: 0 }
Walau bagaimanapun, terdapat beberapa masalah apabila berurusan dengan enum dengan cara ini:
- Kekurangan Kaedah Terbina dalam: Tiada sokongan langsung untuk ciri seperti menyenaraikan semua nilai enum atau menukar antara rentetan dan enum.
- Keselamatan Jenis Terhad: Enum biasanya diwakili menggunakan jenis asas (cth., int atau rentetan), yang meningkatkan risiko tugasan yang tidak diingini.
- Kerumitan Pensirilan dan Penyahserikatan: Pemetaan enum ke dan dari format seperti JSON memerlukan pengendalian tambahan.
Perpustakaan xybor-x/enum
Libray xybor-x/enum menyediakan penyelesaian yang elegan, mudah digunakan dan berkuasa untuk Go enum tanpa penjanaan kod.
Terdapat beberapa jenis enum yang boleh anda gunakan dengan xybor-x/enum, sila pilih yang paling sesuai.
enum asas
Kebaikan ?
- Mudah.
- Menyokong nilai malar.
Keburukan ?
- Tiada kaedah terbina dalam.
- Tiada jenis keselamatan.
- Kurang sokongan bersiri dan penyahserikatan. Seperti enum tradisional, enum asas tidak mempunyai kaedah terbina dalam. Tetapi anda boleh menggunakan fungsi utiliti xybor-x/enum untuk mengendalikan jenis enum ini.
package main type Role int const ( RoleUser Role = iota RoleAdmin ) func init() { enum.Map(RoleUser, "user") enum.Map(RoleAdmin, "admin") // Optional: ensure no new enum values can be added to Role. enum.Finalize[Role]() } func main() { // Print the corresponding string. fmt.Println(enum.ToString(RoleUser)) // Output: user // Print out all valid enums. fmt.Println(enum.All[Role]()) // Output: [0 1] // Parse an enum from int. r1, ok := enum.FromInt[Role](1) fmt.Println(ok) // Output: true fmt.Println(enum.ToString(r1)) // Output: admin // Parse an enum from string. r2, ok := enum.FromString[Role]("admin") fmt.Println(ok) // Output: true fmt.Println(r2) // Output: 1 // Serialize json. data, err := enum.MarshalJSON(RoleUser) fmt.Println(err) // Output: nil fmt.Println(string(data)) // Output: "user" }
WrapEnum
Kebaikan ?
- Menyokong nilai malar.
- Menyediakan banyak kaedah terbina dalam yang berguna.
- Sokongan pensirilan dan penyahserilan penuh di luar kotak.
Keburukan ?
- Hanya menyediakan keselamatan jenis asas.
package main // Only need to change the two following lines fromthe Basic enum. type role any type Role = enum.WrapEnum[role] const ( RoleUser Role = iota RoleAdmin ) func init() { enum.Map(RoleUser, "user") enum.Map(RoleAdmin, "admin") // Optional: ensure no new enum values can be added to Role. enum.Finalize[Role]() } func main() { // Print the corresponding string. No need to use enum.ToString. fmt.Println(RoleUser) // Output: user // Print out all valid enums. fmt.Println(enum.All[Role]()) // Output: [user admin] // Parse an enum from int. r1, ok := enum.FromInt[Role](1) fmt.Println(ok) // Output: true fmt.Println(r1) // Output: admin // Parse an enum from string. r2, ok := enum.FromString[Role]("admin") fmt.Println(ok) // Output: true fmt.Println(r2) // Output: admin // Now you can use json.Marshal instead of enum.MarshalJSON. data, err := json.Marshal(RoleUser) fmt.Println(err) // Output: nil fmt.Println(string(data)) // Output: "user" }
WrapEnum ialah enum yang paling sesuai untuk kes umum. Walau bagaimanapun, ia hanya menyediakan keselamatan jenis asas. Jika anda mahukan yang lebih ketat, pertimbangkan untuk menggunakan SafeEnum.
// WrapEnum cannot prevent this type of invalid declaration. // Consider using SafeEnum. r := Role(42)
SafeEnum
SafeEnum mentakrifkan enum jenis selamat yang kuat. Seperti WrapEnum, ia menyediakan satu set kaedah terbina dalam untuk memudahkan kerja dengan enum.
SafeEnum menguatkuasakan keselamatan jenis yang ketat, memastikan bahawa hanya nilai enum pratakrif dibenarkan. Ia menghalang penciptaan jenis enum baharu secara tidak sengaja, memberikan set nilai yang sah yang terjamin.
Kebaikan ?
- Memberikan keselamatan jenis yang kuat.
- Menyediakan banyak kaedah terbina dalam yang berguna.
- Sokongan pensirilan dan penyahserilan penuh di luar kotak.
Keburukan ?
- Tidak menyokong nilai malar.
Mengapakah sokongan berterusan penting?
Sesetengah alat analisis statik (seperti nogo untuk bazel, golangci-lint dengan sambungan menyeluruh) menyokong penyemakan penyataan suis lengkap dalam enum tetap. Dengan memilih enum dengan sokongan berterusan, anda boleh mendayakan fungsi ini dalam alatan ini.
// Enum in Java enum TrafficLight { RED, YELLOW, GREEN }
Rujukan
xybor-x/enum: https://github.com/xybor-x/enum
Medium: https://medium.com/@huykingsofm/enum-handling-in-go-a2727154435e
Viblo Vietnam: https://viblo.asia/p/cac-van-de-cua-go-enum-va-cach-giai-quyet-voi-xybor-xenum-Yym401A9J91
Atas ialah kandungan terperinci Pergi masalah dan penyelesaian Enum dengan xybor-x/enum. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Pakej "Strings" Go menyediakan ciri -ciri yang kaya untuk membuat operasi rentetan cekap dan mudah. 1) Gunakan strings.contains () untuk memeriksa substrings. 2) Strings.split () boleh digunakan untuk menghuraikan data, tetapi ia harus digunakan dengan berhati -hati untuk mengelakkan masalah prestasi. 3) Strings.join () sesuai untuk rentetan pemformatan, tetapi untuk dataset kecil, gelung = lebih efisien. 4) Untuk rentetan besar, lebih cekap untuk membina rentetan menggunakan rentetan.builder.

Go menggunakan pakej "Strings" untuk operasi rentetan. 1) Gunakan fungsi string.join untuk rentetan sambatan. 2) Gunakan Strings.Contains Fungsi untuk mencari substrings. 3) Gunakan fungsi Strings.Replace untuk menggantikan rentetan. Fungsi -fungsi ini adalah cekap dan mudah digunakan dan sesuai untuk pelbagai tugas pemprosesan rentetan.

TheBytespackageingoisessentialforefficientbytesliceManipulation, menawarkanFunctionsLikecontains, index, andReplaceForsearchingandModifingBinaryData.ItenhancesperformanceandCodereadability, MakingitavitalToolforhandlingBinaryData, NetworkProtocols, andfilePoLoCols, danFilePoLols, danFilePoLols, danFilePoLols, danFilePoLols, danFilePoLols, danFilePoLols, danFilePols, danfile, danfile, danfile, danfile, danfile, danfile, danfile

Pergi menggunakan pakej "pengekodan/binari" untuk pengekodan dan penyahkodan binari. 1) Pakej ini menyediakan binary.write dan binari. Baca fungsi untuk menulis dan membaca data. 2) Beri perhatian untuk memilih Endian yang betul (seperti Bigendian atau Littleendian). 3) Penjajaran data dan pengendalian ralat juga penting untuk memastikan ketepatan dan prestasi data.

"Bytes" PakejingoOfferseficientFunctionsFormAnipulatingBytesLices.1) usebytes.joinforconcatenatingslices, 2) bytes.bufferforincrementalwriting, 3) bytes.indexorbytes.indexbyteforsearching, 4)

Theencoding/BinaryPackageingoisfecefectiveFectimizingBinaryOperationsduetoitssupportforendiannessandefficientdatahandling.toenhancePreforance: 1) usebinary.nativiaryendianfornativeendiannesstoavoidbyteswapping.2) Batchreadandwriteoperationsoperationstoreducei/ooover

Pakej Bytes Go digunakan terutamanya untuk memproses irisan byte dengan cekap. 1) Menggunakan bait.Buffer boleh melakukan splicing rentetan dengan cekap untuk mengelakkan peruntukan memori yang tidak perlu. 2) Fungsi bait. Digunakan untuk membandingkan irisan byte dengan cepat. 3) Fungsi bytes.index, bytes.split dan bytes.ReplaceAll boleh digunakan untuk mencari dan memanipulasi kepingan byte, tetapi isu -isu prestasi perlu diberi perhatian.

Pakej byte menyediakan pelbagai fungsi untuk memproses irisan byte dengan cekap. 1) Gunakan bytes.Contains untuk memeriksa urutan byte. 2) Gunakan bytes.split untuk memecah irisan byte. 3) Gantikan urutan byte bytes.replace. 4) Gunakan bytes.join untuk menyambungkan kepingan byte berganda. 5) Gunakan bytes.buffer untuk membina data. 6) gabungan bytes.map untuk pemprosesan ralat dan pengesahan data.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver Mac版
Alat pembangunan web visual

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa
