07/09/2018, 13:41

Cách Convert Integer sang String trong Golang

Trong Golang bạn có thể nối chuỗi theo một số cách khác nhau trong đó hai cách phổ biến được sử dụng đó là: Sử dụng strconv hoặc Sử dụng Sprintf Sử Dụng Package strconv Với cách này thì bạn có thể sử dụng public method .Itoa() có trong package strconv để chuyển đổi integer sang ...

Convert Integer sang String trong Golang

Trong Golang bạn có thể nối chuỗi theo một số cách khác nhau trong đó hai cách phổ biến được sử dụng đó là:

  • Sử dụng strconv hoặc
  • Sử dụng Sprintf

Sử Dụng Package strconv

Với cách này thì bạn có thể sử dụng public method .Itoa() có trong package strconv để chuyển đổi integer sang string:

func Itoa(integerToConvert int) string

Ví dụ như sau:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    fmt.Println("Helllo " + strconv.Itoa(2018))
}

Ngoài method .Itoa() trên thì cũng các method tương tự khác trong strconv như .FormatInt() giúp chúng ta có thể thực hiện công việc tương tự. Bạn đọc cũng lưu ý với cách làm làm thì trong source code của file Golang bạn cần import một package strconv trước khi sử dụng.

Sử Dụng Package fmt

Package fmt trong Golang cung cấp public method Sprintf() dùng để format dữ liệu dựa trên format được quy định trước và trả về chuỗi String.

func Sprintf(formatIdentifier string, a ...interface{}) string

Giá trị của đối số truyền vào cho tham số formatIdentifier ở trên tuỳ vào vào format bạn muốn trả về. Ở đây bạn có thể sử dụng %d cho số nguyên, %s cho chuỗi, %v hoặc %#v cho struct...

Ví dụ:

package main

import (
    "fmt"
)

func main() {
    fmt.Println(fmt.Sprintf("%s %d", "Helllo", 2018))
}

Ở đoạn code trên bạn cần lưu ý hai điều:

  • Thứ nhất: Bạn cần import package fmt để có thể sử dung Sprintf.
  • Thứ hai: Hàm fmt.Sprintf() không xuất ra kết quả ra standard output (stdout) mà chỉ trả về giá trị là một chuỗi. Do đó nếu muốn in ra kết quả bạn cần sử dụng thêm fmt.Println() hoặc một method tương tự.

Nên Dùng fmt.Sprintf() hay strconv.Itoa()

Xét về mặt performance thì sử dụng fmt.Sprintf() sẽ tốn ít bộ nhớ RAM hơn, tuy nhiên lại có tốc độ xử lý chậm hơn strconv.Itoa(). Dưới đây là kết quả thu về sau khi thực hiện benchmark so sánh performance giữa hai method trên:

BenchmarkItoa                           30000000           52.6 ns/op         2 B/op           1 allocs/op
BenchmarkItoaSprintf                    5000000            299 ns/op          16 B/op          2 allocs/op
BenchmarkItoaBig                        10000000           140 ns/op          16 B/op          1 allocs/op
BenchmarkItoaSprintfBig                 5000000            363 ns/op          24 B/op          2 allocs/op

Cột đầu tiên mỗi dòng sẽ bao gồm tên method Itoa hoặc Sprintf và kiểm tra với hai trường hợp dữ liệu là Integer thông thường và dữ liệu là Big Integer. Cột tiếp theo hiển thị dung lượng bộ nhớ sử dụng và cột tiếp sau là thời gian sử dụng của mỗi method.

0