


Sprintf dengan 3 hujah jenis penunjuk yang berbeza (boleh jadi nol). Pengendali ternary tidak tersedia, bagaimana untuk mengelakkan menulis berpuluh-puluh baris?
Editor PHP Zimo berada di sini untuk menjawab soalan tentang fungsi Sprintf. Kadangkala kita perlu menggunakan fungsi Sprintf untuk memformat rentetan, tetapi dalam beberapa kes, kita mungkin menghadapi situasi dengan parameter tiga jenis penunjuk yang berbeza, dan parameter ini mungkin tiada. Dalam kes ini, kami tidak boleh menggunakan operator ternary, jika tidak, kod akan menjadi verbose dan tidak mudah dibaca. Jadi, bagaimanakah kita harus mengelak daripada menulis berpuluh-puluh baris kod yang panjang? Seterusnya, saya akan berkongsi dengan anda penyelesaian mudah.
Kandungan soalan
Saya mahu mencipta rentetan ini menggunakan sprintf
message := fmt.sprintf("unit %s has a level of %v, but is of category %v", *entity.name, *entity.levelcode, *entity.categorycode)
Dalam entiti, pembolehubah ialah penunjuk, yang boleh menjadi nil
:
name
是*string
levelcode
具有*levelcode
Jeniscategorycode
具有*categorycode
Jenis
Tetapi jika mereka mempunyai nilai, saya mahu nilai itu bukan penunjuk. (iaitu unit abc mempunyai tahap sifar tetapi tergolong dalam kategori snap-in )
Tidak kira bahasa apa yang saya gunakan, saya akan menulis seperti ini:
message := fmt.sprintf("unit %s has a level of %v, but is of %v category", entity.name != nil ? *entity.name : "nil", entity.levelcode != nil ? *entity.levelcode : "nil", entity.categorycode != nil ? *entity.categorycode : "nil")
Tetapi go tidak membenarkan pengendali ternary. Jika saya tidak mengendalikan nilai nil, sprintf
akan membuang pengecualian.
Jadi, adakah saya perlu bermula seperti ini?
if entity.Name == nil && entity.LevelCode != nil && entity.CategoryCode != nil) { message := "Unit nil has a Level of nil, but is of nil Category" } else { if entity.Name != nil && entity.LevelCode != nil && entity.CategoryCode != nil) { message := fmt.Sprintf("Unit %s has a Level of nil, but is of nil Category", entity.Name != nil ? *entity.Name : "nil") } else { ... for 9 combinations of values nil or not nil values, and 9 sprintf formats? } } What the shortest way to dump my variables content in a formatted line?
Penyelesaian
Terima kasih, dengan bantuan anda saya berjaya membina fungsi tersebut.
// value treat pointers that can be nil, and return their values if they aren't. func value[t any](v *t) string { if (v != nil) { return fmt.sprintf("%v", *v) } else { return "nil" } }
Dipanggil begini
message := fmt.Sprintf("Unit %s has a Level of %v, but is of %v Category", value(entity.Name), value(entity.LevelCode), value(entity.CategoryCode))
Menulis lima kenyataan untuk satu sprintf
...tetapi ia berkesan.
Atas ialah kandungan terperinci Sprintf dengan 3 hujah jenis penunjuk yang berbeza (boleh jadi nol). Pengendali ternary tidak tersedia, bagaimana untuk mengelakkan menulis berpuluh-puluh baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Artikel ini membincangkan pakej GO's Reflect, yang digunakan untuk manipulasi kod runtime, bermanfaat untuk siri, pengaturcaraan generik, dan banyak lagi. Ia memberi amaran tentang kos prestasi seperti pelaksanaan yang lebih perlahan dan penggunaan memori yang lebih tinggi, menasihati penggunaan yang bijak dan terbaik

Artikel ini membincangkan menggunakan ujian yang didorong oleh jadual di GO, satu kaedah yang menggunakan jadual kes ujian untuk menguji fungsi dengan pelbagai input dan hasil. Ia menyoroti faedah seperti kebolehbacaan yang lebih baik, penurunan duplikasi, skalabiliti, konsistensi, dan a

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan
