Skip to content

spf13/cast

Kho lưu trữ: spf13/cast: safe and easy casting from one type to another in Go (github.com)

Tài liệu: spf13/cast: safe and easy casting from one type to another in Go (github.com)

Giới thiệu

cast là một thư viện chuyển đổi kiểu đơn giản, dùng để chuyển đổi nhanh từ kiểu này sang kiểu khác, có thể tiết kiệm nhiều thao tác phức tạp.

Cài đặt

go get github.com/spf13/cast

Ví dụ

Chuỗi

go
cast.ToString("mayonegg")         // "mayonegg"
cast.ToString(8)                  // "8"
cast.ToString(8.31)               // "8.31"
cast.ToString([]byte("one time")) // "one time"
cast.ToString(nil)                // ""

var foo interface{} = "one more time"
cast.ToString(foo)                // "one more time"

Số nguyên

go
cast.ToInt(8)                  // 8
cast.ToInt(8.31)               // 8
cast.ToInt("8")                // 8
cast.ToInt(true)               // 1
cast.ToInt(false)              // 0

var eight interface{} = 8
cast.ToInt(eight)              // 8
cast.ToInt(nil)                // 0

Số thực

go
cast.ToFloat64(8)                  // 8.0
cast.ToFloat64(8.31)               // 8.31
cast.ToFloat64("8.31")             // 8.31
cast.ToFloat64(nil)                // 0.0

var foo interface{} = 8.31
cast.ToFloat64(foo)                // 8.31

Boolean

go
cast.ToBool(true)                  // true
cast.ToBool(1)                     // true
cast.ToBool("true")                // true
cast.ToBool("True")                // true
cast.ToBool("TRUE")                // true
cast.ToBool(0)                     // false
cast.ToBool("false")               // false
cast.ToBool(nil)                   // false

var foo interface{} = true
cast.ToBool(foo)                   // true

Thời gian

go
cast.ToTime("2023-01-01")          // time.Time
cast.ToTime("2023-01-01 12:00:00") // time.Time
cast.ToTime(time.Now())            // time.Time
cast.ToTime(nil)                   // zero time

cast.ToDuration("1h")              // time.Duration
cast.ToDuration("1m")              // time.Duration
cast.ToDuration("1s")              // time.Duration

Các hàm chuyển đổi an toàn

Cast cung cấp các hàm chuyển đổi an toàn với hậu tố E để trả về lỗi:

go
str, err := cast.ToStringE("hello")
if err != nil {
    // Xử lý lỗi
}

num, err := cast.ToIntE("abc")
if err != nil {
    // err sẽ không nil vì "abc" không thể chuyển thành số nguyên
}

Các hàm chuyển đổi với giá trị mặc định

Cast cũng cung cấp các hàm với hậu tố E để trả về lỗi và giá trị mặc định:

go
// Sử dụng giá trị mặc định khi chuyển đổi thất bại
num := cast.ToInt("abc")  // Trả về 0 khi thất bại

// Hoặc sử dụng hàm với E để xử lý lỗi
num, err := cast.ToIntE("abc")
if err != nil {
    num = 42 // Giá trị mặc định
}

Best Practices

  1. Sử dụng hàm an toàn: Sử dụng các hàm có hậu tố E khi cần xử lý lỗi
  2. Kiểm tra nil: Cast xử lý nil an toàn nhưng nên kiểm tra trước khi cần
  3. Performance: Cast được tối ưu hóa tốt cho hầu hết các trường hợp
  4. Type safety: Luôn kiểm tra kiểu dữ liệu đầu vào khi không chắc chắn

Kết luận

spf13/cast là một thư viện hữu ích cho việc chuyển đổi kiểu dữ liệu trong Go. Với cú pháp đơn giản và an toàn, cast giúp giảm thiểu code boilerplate và xử lý lỗi khi chuyển đổi giữa các kiểu dữ liệu khác nhau.

Golang by www.golangdev.cn edit