Xử lý lỗi khi đi bằng Gói lỗi
Xử lý lỗi là một trong những thao tác thường xuyên trong chu trình phát triển phần mềm. Đó là một khía cạnh quan trọng của lập trình tốt. Go có cách tiếp cận đơn giản và dễ sử dụng với cơ chế xử lý lỗi tích hợp sẵn. Nó dựa trên việc trả về lỗi từ các hàm và phương thức, cho phép bạn tập trung vào chức năng mã trực quan và dễ đọc.
Bạn xử lý các lỗi trong Go một cách rõ ràng, điều này dẫn đến một khuôn khổ vững chắc cho phản hồi, với khả năng triển khai logic thử lại một cách nhất quán. Các lỗi gói cung cấp chức năng bổ sung để xử lý lỗi.
Mục Lục
Gói lỗi
Gói error là một trong những gói trong thư viện chuẩn của Go. Gói này cung cấp các nguyên hàm và chức năng xử lý lỗi đơn giản để tạo và thao tác các lỗi một cách nhất quán trên mã Go.
Gói cung cấp các Mới chức năng tạo lỗi với các thông báo lỗi tùy chỉnh mà bạn có thể sử dụng giống như bất kỳ loại lỗi cài sẵn nào, chẳng hạn như không và Lỗi phương pháp của lỗi giao diện.
Các lỗi gói cũng cung cấp chức năng cho các lỗi gói và hủy gói, một phương pháp để xác nhận kiểu lỗi.
Bạn có thể nhập khẩu lỗi gói với từ khóa nhập khẩu. Chỉ cần chỉ định tên của gói trong danh sách nhập của bạn.
import "errors"
Bắt và xử lý lỗi trong Go
Kiến thức về xử lý lỗi cơ bản trong Go đặt nền tảng để hiểu lỗi bưu kiện. Hàm và phương thức trả về lỗi đi kèm với tài nguyên.
Dưới đây là một ví dụ về xử lý lỗi từ thao tác mở tệp được tích hợp sẵn hệ điều hành bưu kiện.
package mainimport (
"fmt"
"os"
)
func main() {
file, err := os.Open("filename.txt")
if err != nil {
fmt.Println(err)
}
}
Các Mở ra phương pháp của hệ điều hành gói hữu ích khi làm việc với các tệp văn bản trong Go. Nó mở một tệp, trả về một phiên bản tệp đang mở và một lỗi.
Giá trị lỗi có thể là không gõ, cho biết không có lỗi. Tuy nhiên, bạn có thể kiểm tra trường hợp khác không và xử lý lỗi nếu có. Trong trường hợp trên, khối if in lỗi.
Bạn có thể truy cập vào Lỗi phương pháp lỗi để trích xuất thêm thông tin về lỗi (thường là mô tả).
if err != nil {
fmt.Println(err.Error())
}
Ví dụ: nếu tệp không tồn tại, bạn sẽ thấy thông báo lỗi giống như sau:
Tạo lỗi trong Go
Bạn có thể tạo lỗi với Mới phương pháp của lỗi bưu kiện. Phương thức này nhận một thông báo chuỗi và trả về các lỗi gặp phải.
import "errors"func main() {
err := errors.New("something went wrong")
if err != nil {
}
}
Các chủ yếu chức năng tạo một lỗi mới và xử lý các lỗi có thể xảy ra từ việc tạo lỗi bằng một nếu tuyên bố.
Bạn cũng có thể xác định các lỗi tùy chỉnh trong Go. Phương thức thông thường sử dụng cấu trúc và hàm lỗi để triển khai cấu trúc dựa trên chức năng của lỗi.
package mainimport "fmt"
type customError struct {
info string
}
func main() {
err := customError{
info: "Something went wrong!",
}
fmt.Println(err)
}
Các lỗi tùy chỉnh struct là kế hoạch chi tiết cho lỗi và thông tin trường chuỗi sẽ chứa thông báo lỗi.
chức năng lỗi của bạn có thể thực hiện các lỗi tùy chỉnh struct và trả về một chuỗi lỗi.
func (ce customError) Error() string {
return fmt.Sprintf("A custom error occurred: %v", ce.info)
}
Các Lỗi phương pháp của lỗi tùy chỉnh struct trả về một chuỗi bằng phương thức định dạng Sprintf của gói fmt.
Lỗi gói và mở gói trong Go
Bạn có thể thêm thông tin theo ngữ cảnh vào các lỗi bằng cách gói chúng. Bạn sẽ chủ yếu sử dụng các lỗi được bao bọc để tạo các thông báo lỗi rõ ràng để gỡ lỗi chính xác.
Bạn có thể dùng Lỗi phương pháp của fmt gói cung cấp chức năng định dạng thông báo lỗi để bọc lỗi. Các Lỗi phương thức nhận một chuỗi và động từ định dạng chuỗi và lỗi và trả về lỗi được bao bọc.
import (
"fmt"
"os"
)func main() {
_, err := os.Open("filename.txt")
if err != nil {
wrappedErr := fmt.Errorf("Error opening file: %v", err)
fmt.Println(wrappedErr)
}
}
Các chủ yếu chức năng mở một tập tin với hệ điều hành gói của Mở ra và bọc lỗi bằng phương thức Errorf của fmt bưu kiện. Sau đó, nó xuất lỗi được bao bọc ra bàn điều khiển.
Bạn có thể giải nén các lỗi được bao bọc trong các chương trình của mình bằng mở gói phương pháp của lỗi bưu kiện. Các mở gói phương thức nhận lỗi được bao bọc và trả về lỗi chưa được bao bọc.
import (
"fmt"
"os"
"errors"
)func main() {
_, err := os.Open("filename.txt")
if err != nil {
wrappedErr := fmt.Errorf("Error opening file: %v", err)
unwrappedErr := errors.Unwrap(wrappedErr)
fmt.Println(unwrappedErr)
}
}
Các chủ yếu chức năng kết thúc một lỗi từ thao tác mở tệp và chưa được mởErr biến giữ lỗi chưa được mở.
Ghi nhật ký báo cáo lỗi của bạn với các gói ghi nhật ký của bên thứ ba này
Bạn sẽ cần ghi lại một số lỗi để đánh giá, gỡ lỗi và các hoạt động khác sau này trong quá trình phát triển ứng dụng của mình. Bạn có thể dùng hạ gục gói bằng các gói Uber, Logrus, Zerolog và Log15 để ghi nhật ký nhanh, có cấu trúc.