Mengapa Pembungkus fmt.Fprintf Saya Mencetak Output Tidak Dijangka?

DDD
Lepaskan: 2024-11-12 22:51:02
asal
418 orang telah melayarinya

Why Does My fmt.Fprintf Wrapper Print Unexpected Output?

Melalukan Argumen kepada Fungsi Variadik

Fungsi variadik dalam Go menerima bilangan argumen yang berubah-ubah, yang disimpan sebagai kepingan jenis yang ditentukan. Apabila memanggil fungsi variadic, adalah penting untuk memahami cara hujah dihantar.

Masalah: Output Tambahan dalam fmt.Fprintf Wrapper

Pertimbangkan kod berikut yang cuba membuat pembalut di sekeliling fmt.Fprintf dengan argumen panjang boleh ubah:

func Die(format string, args ...interface{}) {
    str := fmt.Sprintf(format, args)
    fmt.Fprintf(os.Stderr, "%v\n", str)
    os.Exit(1)
}
Salin selepas log masuk

Apabila memanggil Die("foo"), output mengandungi "%%!(EXTRA []antara muka {}=[])" yang tidak dijangka.

Penyelesaian: Menggunakan Ellipsis ... untuk Lulus Argumen

Isu timbul daripada menghantar kepingan args terus ke fmt.Sprintf. Untuk menghantar argumen secara individu dengan betul, pengendali elipsis ... mesti digunakan:

package main

import (
    "fmt"
    "os"
)

func Die(format string, args ...interface{}) {
    str := fmt.Sprintf(format, args...)
    fmt.Fprintf(os.Stderr, "%v\n", str)
    os.Exit(1)
}

func main() {
    Die("foo")
}
Salin selepas log masuk

Dengan menggunakan ..., setiap elemen hirisan args dihantar sebagai argumen berasingan kepada fmt.Sprintf, menyelesaikan mengeluarkan dan menghasilkan output yang dijangkakan:

foo
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Pembungkus fmt.Fprintf Saya Mencetak Output Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan