[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.

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=2

Vậ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 main

import "fmt"

const (
    a = iota
    b
    c
)
func main() {
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
}

Output

0
1
2

IOTA 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 = iota


 b
//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 main

import "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
8

Lầ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
12

Enum 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 main

import "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
3

Trong chương trình trên, chúng tôi đã tạo một loại mới

type Size uint8

Sau đó, 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 3

Nế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 main

import "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
3

Chú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

medium

Chú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.

 
 
Tag: golang cơ bản go