Apakah ralat bahasa pergi?

青灯夜游
Lepaskan: 2023-02-06 14:10:26
asal
8485 orang telah melayarinya

Dalam bahasa Go, eof merujuk kepada akhir ralat fail Ia adalah pembolehubah ralat yang paling penting dalam bahasa Go Ia wujud dalam pakej io dan digunakan untuk menunjukkan penghujung aliran input. Oleh kerana setiap fail mempunyai penghujung, "io.EOF" selalunya tidak dianggap sebagai ralat. Adalah lebih penting untuk menunjukkan penghujung aliran input.

Apakah ralat bahasa pergi?

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

ralat akhir fail (EOF) golang

Fungsi ini sering mengembalikan pelbagai ralat, yang boleh menjadi menarik hingga akhir pengguna, Tetapi untuk program, ini merumitkan keadaan. Banyak kali, program mesti bertindak balas secara berbeza bergantung pada jenis ralat. Mari kita pertimbangkan contoh:

membaca n bait daripada fail. Jika n adalah sama dengan panjang fail, sebarang ralat dalam proses membaca menunjukkan kegagalan. Jika n kurang daripada panjang fail, pemanggil akan berulang kali membaca data bersaiz tetap sehingga akhir fail. Ini menyebabkan pemanggil perlu mengendalikan pelbagai ralat yang disebabkan oleh akhir fail secara berasingan.

Atas sebab ini, io包 memastikan bahawa sebarang kegagalan baca yang disebabkan oleh akhir fail mengembalikan ralat yang sama - io.EOF, yang ditakrifkan dalam pakej io:

package io
import "errors"
// EOF is the error returned by Read when no more input is available.
var EOF = errors.New("EOF")
Salin selepas log masuk

Fahami io.EOF

io.EOF ialah pembolehubah dalam pakej io, yang menunjukkan ralat akhir fail:

package io23var EOF = errors.New("EOF")
Salin selepas log masuk

Lihat juga dokumentasi terperinci melalui arahan berikut:

$ go doc io.EOF
var EOF = errors.New("EOF")
EOF is the error returned by Read when no more input is available. Functions
should return EOF only to signal a graceful end of input. If the EOF occurs
unexpectedly in a structured data stream, the appropriate error is either
ErrUnexpectedEOF or some other error giving more detail.
$
Salin selepas log masuk

io.EOF mungkin pembolehubah ralat yang paling penting dalam bahasa Go. Ia digunakan untuk menunjukkan penghujung aliran input Kerana setiap fail mempunyai akhir, Oleh itu, io.EOF tidak dianggap sebagai ralat dalam banyak kes Adalah lebih penting untuk menunjukkan penghujung aliran input.

Kecacatan dalam reka bentuk io.EOF

Malangnya, reka bentuk io.EOF dalam perpustakaan standard adalah bermasalah , EOF ialah End- Singkatan daripada Of-File Menurut konvensyen bahasa Go, singkatan huruf besar secara amnya mewakili pemalar, io.EOF telah tersilap ditakrifkan sebagai pembolehubah, yang membawa kepada percambahan keizinan API kebenaran ialah reka bentuk mana-mana modul atau fungsi Keperluan tertinggi Dengan meminimumkan kebenaran, ralat yang tidak perlu dalam kod boleh ditemui seawal mungkin

Sebagai contoh, reka bentuk keselamatan yang penting bagi bahasa Go melarang penukaran jenis tersirat Oleh itu, dengan reka bentuk ini kita boleh dengan mudah Menemui pepijat dalam program Selain itu, bahasa Go melarang definisi pembolehubah tempatan yang tidak digunakan (kecuali parameter fungsi, jadi parameter fungsi adalah sebahagian daripada antara muka fungsi) dan melarang. import pakej yang tidak digunakan, yang merupakan amalan terbaik untuk meminimumkan kebenaran Reka bentuk kebenaran API minimum ini bukan sahaja meningkatkan kualiti program, tetapi juga meningkatkan prestasi alat penyusunan dan fail sasaran keluaran Oleh kerana EOF ditakrifkan sebagai pembolehubah, ini menyebabkan pembolehubah berniat jahat Tukar Kod berikut ialah cara yang elegan untuk menguburkan perangkap:

Walaupun ini adalah jenaka, ia benar-benar mendedahkan kecacatan reka bentuk. antara muka EOF: ia mempunyai risiko keselamatan yang serius. >io.EOF ditukar kepada pemalar
func init() {2    io.EOF = nil3}
Salin selepas log masuk

Idea penambahbaikan yang jelas ialah mentakrifkan io.EOF sebagai pemalar Walau bagaimanapun, kerana EOF sepadan dengan jenis antara muka ralat dan pemalar semasa sintaks bahasa Go tidak menyokong penentuan antara muka jenis tetap Tetapi kami Sekatan ini boleh dipintas melalui beberapa helah.Pemalar dalam bahasa Go mempunyai jenis utama bool/int/float/string/nil. . Pemalar bukan sahaja tidak termasuk jenis yang kompleks seperti antara muka, tetapi juga tatasusunan pemalar tidak disokong Walau bagaimanapun, terdapat peraturan lanjutan yang penting untuk pemalar: jenis baharu yang ditakrifkan dengan bool/int/float/string/nil! kerana jenis asas juga menyokong pemalar.Sebagai contoh, kami mentakrifkan semula jenis Rentetan aksara, ia juga boleh menyokong pemalar:

Dalam contoh ini, MyString ialah jenis yang baru ditakrifkan, dan pemalar jenis ini boleh ditakrifkan kerana jenis rentetan asasnya menyokong pemalar

Jadi apakah jenis asas io.EOF ditakrifkan melalui ralat.New("EOF"). pelaksanaan fungsi ini:

type MyString string2const name MyString = "chai2010"
Salin selepas log masuk
Oleh itu, jenis asas EOF ialah struktur ralat.errorString Jenis struktur tidak menyokong pemalar penentuan. struktur errorString dan rentetan ralat yang sepadan dengan io.EOF ialah "EOF".

Kami boleh melaksanakan semula jenis ralat baharu dengan rentetan sebagai jenis asas untuk EOF:

package errors 
// New returns an error that formats as the given text. 
func New(text string) error {
    return &errorString{text} 
} 

// errorString is a trivial implementation of error. 
type errorString struct {
    s string
}

func (e *errorString) Error() string {
    return e.s
}
Salin selepas log masuk
Baharu ini io.errorString melaksanakan dua ciri: Pertama, ia memenuhi antara muka ralat ; Kedua, ia ditakrifkan semula berdasarkan jenis rentetan, jadi ia menyokong definisi pemalar Oleh itu, kita boleh mentakrifkan semula io.EOF sebagai pemalar berdasarkan errorString:

Dengan cara ini, EOF menjadi pemalar yang boleh ditentukan pada jenis masa penyusunan, nilai pemalar masih rentetan "EOF" Tetapi ia juga membawa masalah baru: EOF bukan lagi jenis antara muka, adakah ia akan memusnahkan keserasian kod lama?

[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Apakah ralat bahasa pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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