Memelihara Integriti Berbilang Argumen dalam Ralat Terformat
Untuk melaksanakan versi tersuai ralat. Baharu yang membenarkan pemformatan hujah berubah-ubah, kita menghadapi cabaran teknikal. Seperti yang ditunjukkan oleh kod yang disediakan:
<code class="go">func NewError(format string, a ...interface{}) error { return errors.New(fmt.Sprintf(format, a)) }</code>
Parameter ...secara tidak sengaja digabungkan ke dalam tatasusunan tunggal semasa penyebutan kaedah, yang membawa kepada pemformatan yang salah. Penyelesaiannya terletak pada meniru kefungsian fmt.Errorf, seperti yang dilihat dalam kod sumbernya:
<code class="go">func Errorf(format string, a ...interface{}) error { return errors.New(Sprintf(format, a...)) }</code>
Perhatikan bahawa ... operator mengikuti selepas senarai parameter. Dalam Go, sintaks ini membolehkan penghantaran argumen sebagai nilai berasingan dan bukannya satu tatasusunan gabungan. Spesifikasi menggariskan tingkah laku ini:
Jika argumen akhir boleh diserahkan kepada jenis kepingan []T, ia mungkin dihantar tidak berubah sebagai nilai untuk parameter ...T jika argumen diikuti oleh ... .
Dengan memasukkan ... operator seperti yang dilihat dalam fmt.Errorf, kami memastikan bahawa berbilang argumen mengekalkan keperibadiannya semasa pemformatan, menghasilkan yang diingini tingkah laku:
<code class="go">func NewError(format string, a ...interface{}) error { return errors.New(fmt.Sprintf(format, a...)) }</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Integriti Hujah dalam Ralat Terformat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!