Scroll to top
Ép kiểu dữ liệu trong Golang

Ép kiểu dữ liệu trong Golang

ByAdmin 2023-01-10 18:38
5 min read

Hãy tìm hiểu cách ép kiểu dữ liệu trong ngôn ngữ lập trình Golang. Bạn sẽ học được cách sử dụng toán tử ép kiểu, hàm của thư viện strconv và lưu ý khi ép kiểu giữa các kiểu số thực và kiểu số nguyên.

Ngôn ngữ lập trình Golang quy định chặt chẽ và nghiệm ngặt về kiểu dữ liệu, do đó không cho phép tự động chuyển đổi kiểu dữ liệu (ép kiểu dữ liệu)

Ép kiểu trong Golang

Trong Go, các kiểu dữ liệu có thể chuyển đổi bằng cách sử dụng toán tử type(value).

Đoạn code sau đây sẽ báo lỗi:

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (  
    "fmt"
)

func main() {  
    a := 5      //int
    b := 3.4    //float64
    sum := a + b
    fmt.Println(sum)
}

// Lỗi: invalid operation: a + b (mismatched types int and float64)

Code trên không chạy vì Golang là một ngôn ngữ kiểu dữ liệu cứng, kiểu dữ liệu của biến phải được xác định trong khi khai báo, và không thể thay đổi được sau đó. Trong trường hợp của bạn, biến a được khai báo là kiểu int và biến b được khai báo là kiểu float64, vì vậy họ không thể cộng lại với nhau mà không ép kiểu.

Để giải quyết vấn đề này, bạn cần ép kiểu cho biến a sang kiểu float64 trước khi thực hiện phép cộng:

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (  
    "fmt"
)

func main() {  
    a := 5      //int
    b := 3.4    //float64
    sum := float64(a) + b
    fmt.Println(sum)
}

// Kết quả là 8.4

Hoặc bạn có thể ép kiểu cho biến b thành kiểu int, nhưng lại sẽ mất phần thập phân của b

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (  
    "fmt"
)

func main() {  
    a := 5      //int
    b := 3.4    //float64
    sum := a + int(b)
    fmt.Println(sum)
}

// Kết quả là 8

Chú ý khi ép kiểu chuyển giữa kiểu số thực và kiểu số thực, có thể mất dữ liệu do việc làm tròn hoặc thiếu phần thập phân. Do đó, bạn cần phải cân nhắc kỹ trước khi ép kiểu và xem xét xem ép kiểu này có hợp lý trong tình huống cụ thể của bạn hay không.

Sử dụng strconv để chuyển đổi chuỗi và số trong Golang

Go cung cấp thư viện strconv để hỗ trợ chuyển đổi giữa các kiểu dữ liệu chuỗi và các kiểu số.

Chuyển đổi chuỗi sang số

Bạn có thể sử dụng hàm strconv.Atoi(string) để chuyển đổi chuỗi sang kiểu int:

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var myString string = "101"
    var myInt, _ = strconv.Atoi(myString) // ép kiểu string sang int
    fmt.Println(myInt) // in ra 101
}

Trong ví dụ trên, hàm Atoi trả về hai giá trị, giá trị int được ép kiểu và lỗi nếu có

Bạn cũng có thể sử dụng hàm strconv.ParseFloat(string, bitSize) để chuyển đổi chuỗi sang kiểu float64:

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var myString string = "3.14"
    var myFloat, _ = strconv.ParseFloat(myString, 64) // ép kiểu string sang float64, với bitSize = 64
    fmt.Println(myFloat) // in ra 3.14
}

Trong ví dụ trên, hàm ParseFloat trả về hai giá trị, giá trị float64 được ép kiểu và lỗi nếu có.

Chuyển đổi số sang chuỗi

Bạn có thể sử dụng hàm strconv.Itoa(int) để chuyển đổi kiểu int sang chuỗi:

Copy go
1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var myInt int = 101
    var myString = strconv.Itoa(myInt) // ép kiểu int sang string
    fmt.Println(myString) // in ra "101"
}

Cũng giống như ép kiểu bằng toán tử, khi ép kiểu sử dụng hàm strconv cũng có thể mất dữ liệu do việc làm tròn hoặc thiếu phần thập phân. Do đó, bạn cần phải cân nhắc kỹ trước khi ép kiểu và xem xét xem ép kiểu này có hợp lý trong tình huống cụ thể của bạn hay không.

Đánh giá bài viết: 5/5 (20 đánh giá)
Bạn chưa đánh giá

Bình luận

Author
hoclaptrinh.io author
Tác giả:Yuto Yasunaga

Mình là một full stack developer, tốt nghiệp và làm việc tại Nhật Bản. Trang web này là nơi mình tổng hợp, đúc kết và lưu trữ lại những kiến thức trong quá trình học và làm việc liên quan đến IT.
Hy vọng những bài viết ở website này sẽ có ích cho bạn.