Trong lập trình, hằng số là giá trị không thay đổi được trong suốt quá trình thực thi của chương trình. Trái ngược với biến, giá trị của hằng số không thể thay đổi sau khi nó được khai báo.
Hằng số thường được sử dụng để đặt tên cho các giá trị cố định và không thay đổi trong mã nguồn của chương trình. Việc sử dụng hằng số giúp tránh được lỗi do sự thay đổi không mong muốn của giá trị.
Sử dụng const
để khai báo một hằng số.
Trong Go, bạn có thể sử dụngconst
để khai báo hằng số. Hằng số có thể là các giá trị số nguyên, số thực, chuỗi ký tự hoặc các kiểu dữ liệu khác.
Cú pháp.
const CONSTNAME type = value
Dưới đây là một ví dụ về cách khai báo một hằng số trong Go:
package main
import "fmt"
const PI = 3.14
func main() {
fmt.Println(PI)
}
Trong ví dụ này, PI
được khai báo là một hằng số với giá trị là 3.14. Sau đó, giá trị của hằng số này được in ra màn hình bằng hàm fmt.Println(PI)
trong hàm main
.
Một số quy tắc và thông tin về hằng số trong Go.
- Quy tắc đặt tên hằng số:
- Tên hằng số tuân thủ cùng quy tắc với biến.
- Thông thường tên hằng số được viết bằng chữ in hoa để dễ nhận biết và phân biệt với biến.
- Loại hằng số:
- Là hằng số có kiểu dữ liệu cụ thể (ví dụ:
const myConst int = 42
):- Loại hằng số này giữ kiểu dữ liệu và sẽ được kiểm tra kiểu khi sử dụng.
- Hằng số không có kiểu dữ liệu cụ thể (ví dụ:
const myConst = 42
):- Loại hằng số này có thể tự động phát hiện kiểu dữ liệu.
- Là hằng số có kiểu dữ liệu cụ thể (ví dụ:
- Vị trí khai báo hằng số:
- Hằng số có thể được khai báo cả bên trong và bên ngoài các hàm.
Dưới đây là một ví dụ về cách sử dụng hằng số trong Go:
package main
import "fmt"
// Hằng số ở mức toàn cục
const GlobalConst = 100
func main() {
// Hằng số ở mức cục bộ
const LocalConst = 42
fmt.Println("Global Constant:", GlobalConst)
fmt.Println("Local Constant:", LocalConst)
// Sử dụng hằng số trong biểu thức
total := GlobalConst + LocalConst
fmt.Println("Total:", total)
}
Trong ví dụ này, GlobalConst
là hằng số ở mức toàn cục và LocalConst
là hằng số ở mức cục bộ. Cả hai đều có thể được sử dụng trong cùng một chương trình.
Hằng số được khai báo với kiểu dữ liệu cụ thể.
Hằng số có kiểu (typed constants) là những hằng số được khai báo với kiểu dữ liệu cụ thể.
package main
import "fmt"
const A int = 1
func main() {
fmt.Println(A)
}
Trong ví dụ này, A
là một hằng số có kiểu int
và giá trị là 1. Trường hợp này bạn đã khai báo hằng số có kiểu dữ liệu và giá trị của nó phải thuộc kiểu dữ liệu được xác định.
Trong trường hợp này, A
được đặt kiểu dữ liệu là int
và bạn sẽ gặp lỗi nếu bạn cố gắng gán một giá trị không phải là kiểu int
cho nó.
Hằng số được khai báo không kiểu dữ liệu cụ thể.
Hằng số không có kiểu (untyped constants) là những hằng số được khai báo mà không có kiểu dữ liệu cụ thể được xác định.
package main
import "fmt"
const A = 1
func main() {
fmt.Println(A)
}
Trong ví dụ này, A
là một hằng số không có kiểu dữ liệu được xác định (untyped constant
). Khi bạn khai báo một hằng số mà không chỉ định kiểu dữ liệu, Go sẽ tự động phát hiện kiểu dữ liệu của hằng số dựa trên giá trị được gán.
Vì giá trị là một số nguyên, A
sẽ được tự động phát hiện là một hằng số có kiểu nguyên (int
). Tuy nhiên, quan trọng là trong các biểu thức, hằng số không có kiểu dữ liệu có thể tự động chuyển đổi qua lại giữa các kiểu dữ liệu dựa trên tình huống sử dụng và điều này có thể gây ra các kết quả không mong muốn nếu không được xử lý cẩn thận.
Hằng số trong Go là không thể thay đổi và chỉ có thể đọc.
Hằng số trong Go là không thể thay đổi và chỉ có thể đọc (unchangeable and read-only).
package main
import ("fmt")
func main() {
const A = 1
A = 2
fmt.Println(A)
}
Dòng A = 2
sẽ gây lỗi biên dịch vì bạn không thể gán giá trị mới cho một hằng số đã được khai báo. Hằng số được thiết lập giá trị khi khai báo và giữ nguyên giá trị của nó suốt thời gian chạy chương trình.
./prog.go:8:7: cannot assign to A
Lỗi cụ thể bạn nhìn thấy là “cannot assign to A,” nói rằng không thể gán giá trị mới cho hằng số A
sau khi đã khai báo.
Nhóm nhiều hằng số lại với nhau thành một khối.
Bạn có thể nhóm nhiều hằng số lại với nhau thành một khối để làm cho code trở nên dễ nhìn hơn.
package main
import "fmt"
const (
A int = 1
B = 3.14
C string = "Hi!"
)
func main() {
fmt.Println(A)
fmt.Println(B)
fmt.Println(C)
}
Trong ví dụ này:
A
,B
vàC
là các hằng số được khai báo trong cùng một khối sử dụngconst
.A
có kiểu làint
,B
sẽ tự động định danh kiểu dữ liệu (float64
do giá trị là số thực), vàC
có kiểu làstring
.- Cả ba hằng số đều có thể được sử dụng trong toàn bộ chương trình.