DEV Community

meotism
meotism

Posted on • Updated on

Some popular Go libraries

*Lint:

  • Khái niệm: Là một thư viện hỗ trợ phân tích source code để gắn cờ kiểm tra lỗi lập trình, bug, lỗi cấu trúc không đúng, kiểm tra duplicate, ...

  • Cài đặt:
    go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
    golangci-lint version
    golangci-lint help linters
    //Để chạy linters tại project thư mục test:
    golangci-lint run test/main.go

  • Config golangCI-lint:
    Có 2 cách để config golangCI-lint: thông qua cmd hoặc file

  • CMD:(cấu trúc câu lệnh "$ golangci-lint help linters | sed -n '/Linters presets:/,$p'")
    //Ví dụ:
    golangci-lint run -p bugs -p error test/main.go

  • config file .golangci.yml:
    //Ví dụ:
    linters-settings:
    errcheck:
    check-blank: true
    (#)report about not checking of error in type assertions: 'a:=b.(MyStruct)'
    check-type-assertions: true
    (#)Path to a file containing list of functions to exclude from checking.
    exclude: /path/to/file.txt

*Go validator:

  • Mục đích: dùng để đảm bảo dữ liệu vào hệ thống đúng cấu trúc struct và trên các thẻ tag.
  • Cài đặt: go get github.com/go-playground/validator/v10
  • Để bắt lỗi validatorError: err := validate.Struct(user) validationErrors := err.(validator.ValidationErrors)
  • Loại validator: Package hỗ trợ cho struct, biến, tùy chỉnh kiểu dữ liệu fields,...
  • Ví dụ về validator: Kiểm tra tính hợp lệ các thuộc tính trong struct: type User struct { Id int valid:"required" Name string valid:"required" Email string valid:"email~email k hop le" (~ để thay đổi message khi lỗi) Password string valid:"required" } Cách kiểm tra: if ok, err := govalidator.ValidateStruct(user); err != nil { fmt.Print(err) // In ra các thông báo lỗi } else { fmt.Print("Struct hợp lệ") } *Note: nếu có quá nhiều trường cần require thì viết func: func init() { govalidator.SetFieldsRequiredByDefault(true) } rồi những trường nào không cần require thêm tag valid: "-". Khi cần nhiều ràng buộc thì cách nhau bằng dấu phẩy.

*Logrus:

  • Định nghĩa: Dùng để ghi dữ liệu về sự kiện xảy ra trong ứng dụng khi hoạt động.(Log)
  • Mục đích: Vì trong môi trường develop thì IDE có hỗ trợ debug báo lỗi để biết dễ phát hiện và biết lỗi chỗ nào. Nhưng trên môi trường product thì không thể xem lỗi xảy ra.
  • Lưu ý: Thường sẽ ghi log những dữ liệu đầu vào và đầu ra, thông tin liên quan đến thay đổi dữ liệu, performance và thông tin bất thường. Những thông tin nhạy cảm không nên ghi log hoặc log được mã hóa(thông tin người dùng, mật khẩu,...)
  • Cài đặt: go get "github.com/Sirupsen/logrus" Cách dùng cơ bản tương tự "fmt" Ngoài ra có log.SetFormatter(&log.JSONFormatter{}), Log level.

*Sentry:

  • Định nghĩa: Sau khi để hiển thị lỗi trong môi trường product thì Sentry dùng để theo dõi lỗi và sự kiện tại flow đó
  • Cài đặt: go get "github.com/Sirupsen/logrus"

Top comments (0)