[Golang cơ bản] IOTA trong Golang
Post on: 2023-03-16 00:37:57 | in: Golang
IOTA là một hằng số đặc biệt trong Go, được sử dụng trong khai báo hằng số để định danh các giá trị số nguyên liên tiếp.
- [Golang nâng cao] Goroutines trong Golang
- [Golang nâng cao] Channel trong Golang
- [Golang nâng cao] Select Statement trong Golang
Tổng quan
IOTA là một định danh được sử dụng với hằng số và giúp định nghĩa các hằng số sử dụng các số nguyên tăng tự động một cách đơn giản. Từ khóa IOTA đại diện cho hằng số nguyên bắt đầu từ số 0. Vì vậy, nó có thể được sử dụng để tạo ra các hằng số hiệu quả trong Go. Chúng cũng có thể được sử dụng để tạo enum trong Go như chúng ta sẽ thấy sau trong hướng dẫn này.
Không sử dụng IOTA để tạo hằng số tăng tự động:
const (
a = 0
b = 1
c = 2
)Sử dụng IOTA để tạo hằng số tăng tự động:
const (
a = iota
b
c
)Cả hai sẽ
a=0
b=1
c=2Vậy IOTA là:
- Một bộ đếm bắt đầu với số 0.
- Tăng lên 1 sau mỗi dòng.
- Chỉ được sử dụng với hằng số.
IOTA bắt đầu với giá trị 0 và tăng lên 1 sau mỗi dòng, nhưng cũng có một số điều cần lưu ý. Đầu tiên, hãy xem một ví dụ đơn giản trong đó iota bắt đầu với giá trị 0 và tăng lên 1 sau mỗi dòng.
package mainimport "fmt"
const (
a = iota
b
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
Output
0
1
2IOTA thiết lập giá trị của a bằng số 0. Sau đó, trên mỗi dòng mới, giá trị này sẽ được tăng thêm 1 đơn vị. Do đó, kết quả đầu ra sẽ là 0, tiếp theo là 1 và cuối cùng là 2.
Nhiều hơn về IOTA
Hãy xem thêm một số điểm khác liên quan đến IOTA:
- Từ khóa IOTA có thể được sử dụng trên mỗi dòng. Trong trường hợp đó, IOTA sẽ bắt đầu từ 0 và tăng lên trên mỗi dòng mới. Điều này sẽ giống như trường hợp trên.
const (
a = iota
b = iota
c = iota
)Kết quả sẽ là:
0
1
2- Từ khóa "iota" có thể được bỏ qua. Trong trường hợp đó, "iota" cũng sẽ bắt đầu từ số 0 và tăng dần trên mỗi dòng mới. Điều này giống như hai trường hợp được đề cập ở trên.
const (
a = iota
b
c = iota
)Kết quả sẽ là:
0
1
2- Sẽ không có sự tăng dần nếu có một dòng trống hoặc một dòng được chú thích.
const (
a = iotab
//comment
c
)
Kết quả sẽ là:
0
1
2- Giá trị Iota sẽ được thiết lập lại và bắt đầu lại từ số 0 nếu từ khóa "const" được sử dụng lại.
const (
a = iota
b
)
const (
c = iota
)Kết quả sẽ là:
0
1
0- Việc tăng dần Iota có thể bị bỏ qua bằng cách sử dụng một định danh trống.
const (
a = iota
_
b
c
)Kết quả sẽ là:
0
2
3- Các biểu thức Iota - iota cho phép sử dụng các biểu thức để đặt bất kỳ giá trị nào cho hằng số.
package mainimport "fmt"
const (
a = iota
b = iota + 4
c = iota * 4
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
Kết quả sẽ là:
0
5
8Lần đầu tiên, giá trị Iota là 0, do đó đầu ra là 0.
Trên dòng tiếp theo, giá trị Iota là 1, do đó đầu ra là 1+4=5.
Trên dòng tiếp theo, giá trị Iota là 2, do đó đầu ra là 2*4=8.
- Iota cũng có thể bắt đầu từ một số khác không - biểu thức Iota cũng có thể được sử dụng để bắt đầu Iota từ bất kỳ số nào.
const (
a = iota + 10
b
c
)Kết quả sẽ là:
10
11
12Enum trong Golang
IOTA cung cấp một cách tự động để tạo một enum trong Golang. Hãy xem một ví dụ.
package mainimport "fmt"
type Size uint8
const (
small Size = iota
medium
large
extraLarge
)
func main() {
fmt.Println(small)
fmt.Println(medium)
fmt.Println(large)
fmt.Println(extraLarge)
}
Output
0
1
2
3Trong chương trình trên, chúng tôi đã tạo một loại mới
type Size uint8Sau đó, chúng ta đã khai báo một số hằng số có kiểu Size. Hằng số đầu tiên small được đặt là iota, do đó nó sẽ được đặt là 0.
small Size = iotaĐó là lý do tại sao
fmt.Println(small) >> outputs 0
fmt.Println(medium) >> outputs 1
fmt.Println(large) >> outputs 2
fmt.Println(extraLarge) >> outputs 3Nếu không sử dụng IOTA, chúng ta phải rõ ràng đặt giá trị cho từng giá trị enum.
package mainimport "fmt"
type Size uint8
const (
small Size = 0
medium Size = 1
large Size = 2
extraLarge Size = 3
)
func main() {
fmt.Println(small)
fmt.Println(medium)
fmt.Println(large)
fmt.Println(extraLarge)
}
Output
0
1
2
3Chúng ta cũng có thể định nghĩa một phương thức toString trên kiểu Size để in ra giá trị chính xác của enum. Xem chương trình bên dưới:
package main
import "fmt"
type Size int
const (
small = Size(iota)
medium
large
extraLarge
)
func main() {
var m Size = 1
m.toString()
}
func (s Size) toString() {
switch s {
case small:
fmt.Println("Small")
case medium:
fmt.Println("Medium")
case large:
fmt.Println("Large")
case extraLarge:
fmt.Println("Extra Large")
default:
fmt.Println("Invalid Size entry")
}
}Output
mediumChúng tôi đã định nghĩa một phương thức toString cho kiểu Size. Nó có thể được sử dụng để in ra giá trị chuỗi của hằng số kiểu Size.
Tổng kết
Đó là tất cả những điều cần biết về IOTA và Kiểu liệt kê (enum) trong Go. Hy vọng bạn đã thích bài viết này. Hãy chia sẻ ý kiến phản hồi / cải thiện / lỗi trong phần bình luận.



![[Golang nâng cao] Tìm hiểu về & và * trong golang](https://tuhocweb.com//uploads/images/202306/14/images.png)

