Khái niệm về hằng số
Trong lập trình, hằng số cũng giống như biến số, tuy nhiên không thay đổi được giá trị. Chúng ta chỉ có thể gán giá trị cho hằng lúc khai báo, và từ đó về sau hằng đó sẽ mang mãi một giá trị đó và không thể thay đổi.
Cách khai báo hằng trong Golang
Cú pháp: const <tên hằng> <kiểu dữ liệu> = <giá trị>
Để khai báo một hằng thì chúng ta dùng từ khóa const
, ví dụ:
1
2
3
4
5
6
7
8
package main
import "fmt"
func main() {
const message string = "Hello World"
fmt.Println(message)
}
Ở ví dụ trên, chúng ta khai báo hằng số tên là message
, kiểu dữ liệu là string
và gán giá trị Hello World
Bởi vì hằng số không thể thay đổi giá trị, do đó nếu chúng ta gán giá trị khác vào hằng thì chương trình sẽ báo lỗi
1
2
3
4
5
6
7
8
9
10
11
package main
import "fmt"
func main() {
const message string = "Hello World"
message = "Hi"
fmt.Println(message)
}
// cannot assign to message (constant "Hello World" of type string)
Mục đích của việc khai báo hằng số là dùng để lưu các giá trị được dùng nhiều lần mà không cần phải khai báo lại, những giá trị mang tính không thay đổi, ví dụ như const Pi = 3.14
So sánh giữa khai báo hằng không có kiểu giá trị và có kiểu giá trị
Khai báo hằng không có kiểu giá trị
Chúng ta có thể khai báo hằng mà không cần kiểu giá trị cụ thể. Ví dụ như bên dưới, khai báo hằng số a có giá trị là 1, sau đó khai báo biến num1 kiểu int và num2 kiểu int32, cả 2 biến này đều có thể gán giá trị của hằng số a.
1
2
3
4
5
6
7
8
9
10
package main
import "fmt"
func main() {
const a = 1
var num1 int = a
var num2 int32 = a
fmt.Println(num1, num2)
}
Khai báo hằng có kiểu giá trị
Khi khai báo hằng số có kiểu giá trị, thì sau này chúng ta chỉ có thể gán giá trị của hằng vào biến mang cùng kiểu giá trị mà thôi. Ví dụ như bên dưới, khai báo hằng số a có kiểu int, sau đó khai báo biến num1 kiểu int và num2 kiểu int32, khi chúng ta gán giá trị của hằng a (kiểu int) vào biến num2 (kiểu int32) thì sẽ có lỗi và không thực hiện được.
1
2
3
4
5
6
7
8
9
10
11
12
package main
import "fmt"
func main() {
const a int = 1
var num1 int = a
var num2 int32 = a
fmt.Println(num1, num2)
}
// cannot use a (constant 1 of type int) as type int32 in variable declaration