Đây là hướng dẫn thứ ba trong loạt bài hướng dẫn lập trình Go của chúng tôi và nó đề cập đến các biến trong Go.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về biến là gì, các cách khai báo biến và các lỗi thương gặp liên quan tới biến trong Go.
Biến (variable) là tên được đặt cho một vị trí bộ nhớ để lưu trữ giá trị của một kiểu cụ thể. Có nhiều cú pháp khác nhau để khai báo biến trong Go. Hãy xem xét từng cái một.
var name type là cú pháp để khai báo một biến duy nhất.
package main
import "fmt"
func main() {
var age int // variable declaration
fmt.Println("My age is", age)
}
Chạy chương trình trong Playground
Câu lệnh var age int
khai báo một biến có tên age
kiểu int
. Chúng ta chưa gán bất kỳ giá trị nào cho biến này. Nếu một biến không được gán bất kỳ giá trị nào, Go sẽ tự động khởi tạo nó zero value của kiểu dữ liệu đó.
Trong trường hợp này, biến age
được gán giá trị 0
, chính là zero value của kiểu int
. Nếu bạn chạy chương trình này, bạn có thể thấy kết quả sau.
My age is 0
Một biến có thể được gán cho bất kỳ giá trị nào thuộc kiểu của nó. Trong chương trình trên, age
có thể được gán bất kỳ giá trị kiểu số nguyên nào.
package main
import "fmt"
func main() {
var age int // variable declaration
fmt.Println("My age is", age)
age = 29 //assignment
fmt.Println("My age is", age)
age = 54 //assignment
fmt.Println("My new age is", age)
}
Chạy chương trình trong Playground
Chương trình trên sẽ in kết quả sau.
My age is 0
My age is 29
My new age is 54
Một biến cũng có thể được cung cấp một giá trị ban đầu khi nó được khai báo. Sau đây là cú pháp để khai báo một biến có giá trị ban đầu.
var name type = initialvalue
package main
import "fmt"
func main() {
var age int = 29 // variable declaration with initial value
fmt.Println("My age is", age)
}
Chạy chương trình trong Playground
Trong chương trình trên, age
là một biến kiểu int
và có giá trị ban đầu 29
. Chương trình trên sẽ in kết quả sau.
My age is 29
Nó cho thấy rằng tuổi đã được khởi tạo với giá trị 29.
Nếu một biến có giá trị ban đầu, Go sẽ tự động có thể suy ra kiểu của biến đó bằng cách sử dụng giá trị ban đầu đó. Do đó, nếu một biến có giá trị ban đầu, thì giá trị type
trong khai báo biến có thể được loại bỏ.
Nếu biến được khai báo bằng cú pháp sau
var name = initialvalue
Go sẽ tự động suy ra kiểu của biến đó từ giá trị ban đầu.
Trong ví dụ sau, chúng ta có thể thấy rằng khai báo kiểu int
của biến age
đã bị loại bỏ ở dòng số 6. Vì biến có giá trị ban đầu 29
, nên Go có thể suy ra rằng nó có kiểu int
.
package main
import "fmt"
func main() {
var age = 29 // type will be inferred
fmt.Println("My age is", age)
}
Chạy chương trình trong Playground
Nhiều biến có thể được khai báo bằng một câu lệnh duy nhất.
Cú pháp khai báo nhiều biến như sau.
var name1, name2 type = initialvalue1, initialvalue2
package main
import "fmt"
func main() {
var width, height int = 100, 50 //declaring multiple variables
fmt.Println("width is", width, "height is", height)
}
Chạy chương trình trong Playground
Các kiểu có thể được loại bỏ nếu các biến có giá trị ban đầu. Vì chương trình trên có các giá trị ban đầu cho các biến nên khai báo kiểu int
có thể được loại bỏ.
package main
import "fmt"
func main() {
var width, height = 100, 50 //"int" is dropped
fmt.Println("width is", width, "height is", height)
}
Chạy chương trình trong Playground
Chương trình trên sẽ in kết quả sau ở đầu ra.
width is 100 height is 50
Như bạn đã biết, nếu giá trị ban đầu không được chỉ định cho biến width và height, giá trị 0
sẽ được gán làm giá trị ban đầu của chúng.
package main
import "fmt"
func main() {
var width, height int
fmt.Println("width is", width, "height is", height)
width = 100
height = 50
fmt.Println("new width is", width, "new height is", height)
}
Chạy chương trình trong Playground
Chương trình trên sẽ in ra kết quả sau:
width is 0 height is 0
new width is 100 new height is 50
Có thể có những trường hợp chúng ta muốn khai báo các biến thuộc các kiểu khác nhau trong một câu lệnh. Cú pháp để làm điều đó là:
var (
name1 = initialvalue1
name2 = initialvalue2
)
Chương trình sau sử dụng cú pháp trên để khai báo các biến có kiểu khác nhau.
package main
import "fmt"
func main() {
var (
name = "naveen"
age = 29
height int
)
fmt.Println("my name is", name, ", age is", age, "and height is", height)
}
Chạy chương trình trong Playground
Ở đây chúng ta khai báo một biến name
kiểu string
, age
và height
kiểu int
. (Chúng ta sẽ thảo luận về các loại khác nhau có sẵn trong Go trong hướng dẫn tiếp theo).
Chạy chương trình trên sẽ in ra kết quả sau:
my name is naveen , age is 29 and height is 0
Go cũng cung cấp một cách ngắn gọn khác để khai báo các biến. Đây được gọi là khai báo nhanh và nó sử dụng toán tử :=.
Cú pháp khai báo nhanh để khai báo một biến như sau:
name := initialvalue
Chương trình sau đây sử dụng cú pháp khai báo nhanh để khai báo biến count
được khởi tạo giá trị là 10
. Go sẽ tự động suy ra biến count
là kiểu int
vì nó đã được khởi tạo với giá trị số nguyên là 10
.
package main
import "fmt"
func main() {
count := 10
fmt.Println("Count =",count)
}
Chạy chương trình trong Playground
Chương trình trên sẽ in kết quả như sau:
Count = 10
Cũng có thể khai báo nhiều biến trong một dòng bằng cú pháp khai báo nhanh.
package main
import "fmt"
func main() {
name, age := "naveen", 29 //short hand declaration
fmt.Println("my name is", name, "age is", age)
}
Chạy chương trình trong Playground
Chương trình trên khai báo hai biến name
và age
kiểu string
và int
tương ứng.
Nếu bạn chạy chương trình trên, bạn có thể thấy kết quả sau.
my name is naveen age is 29
Khai báo nhanh yêu cầu các giá trị ban đầu cho tất cả các biến ở phía bên trái của phép gán. Chương trình sau sẽ in lỗi assignment mismatch: 2 variables but 1 values
. Điều này là do biến Age chưa được chỉ định một giá trị.
package main
import "fmt"
func main() {
name, age := "naveen" //error
fmt.Println("my name is", name, "age is", age)
}
Chạy chương trình trong Playground
Cú pháp rút gọn chỉ có thể được sử dụng khi ít nhất một trong các biến ở phía bên trái của toán tử := mới được khai báo. Hãy xem xét chương trình sau đây,
package main
import "fmt"
func main() {
a, b := 20, 30 // declare variables a and b
fmt.Println("a is", a, "b is", b)
b, c := 40, 50 // b is already declared but c is new
fmt.Println("b is", b, "c is", c)
b, c = 80, 90 // assign new values to already declared variables b and c
fmt.Println("changed b is", b, "c is", c)
}
Chạy chương trình trong Playground
Trong chương trình trên, ở dòng số 8, biến b đã được khai báo trước đó nhưng biến c mới được khai báo và do đó nó hoạt động và kết quả như sau:
a is 20 b is 30
b is 40 c is 50
changed b is 80 c is 90
Trong khi nếu chúng ta chạy chương trình bên dưới sẽ gặp lỗi
package main
import "fmt"
func main() {
a, b := 20, 30 //a and b declared
fmt.Println("a is", a, "b is", b)
a, b := 40, 50 //error, no new variables
}
Chạy chương trình trong Playground
Nó sẽ in lỗi /prog.go:8:10: no new variables on left side of :=
. Điều này là do cả hai biến a và b đều đã được khai báo và không có biến mới nào ở phía bên trái của toán tử := ở dòng số 8.
Các biến cũng có thể được gán các giá trị được tính toán trong thời gian chạy. Hãy xem xét chương trình sau đây,
package main
import (
"fmt"
"math"
)
func main() {
a, b := 145.8, 543.8
c := math.Min(a, b)
fmt.Println("Minimum value is", c)
}
Chạy chương trình trong Playground
Trong chương trình trên, math là một package và Min là một function trong package đó. Đừng lo lắng về điều đó ngay bây giờ, chúng ta sẽ thảo luận chi tiết về package và function trong các bài hướng dẫn sắp tới.
Tất cả những gì chúng ta cần biết là, giá trị của biến c
được tính tại thời gian chạy và nó là giá trị tối thiểu của hai biến a
và b
. Chương trình trên sẽ in ra kết quả sau:
Minimum value is 145.8
Vì Go được định kiểu mạnh, các biến được khai báo là thuộc một kiểu không thể được gán giá trị cho kiểu khác. Chương trình sau sẽ in lỗi cannot use "naveen" (type string) as type int in assignment
vì biến age
được khai báo là kiểu int
và chúng tôi đang cố gắng gán giá trị kiểu string
cho nó.
package main
func main() {
age := 29 // age is int
age = "naveen" // error since we are trying to assign a string to a variable of type int
}
Chạy chương trình trong Playground
Trong hướng dẫn tiếp theo, chúng ta sẽ tìm hiểu về các kiểu dữ liệu trong Go.
Cảm ơn vì đã đọc. Vui lòng gửi phản hồi và thắc mắc của bạn trong phần bình luận.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu phương thức (method) trong Go là gì? Cú pháp khai báo phương thức, so sánh phương thức với hàm, ... trong Go.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu struct là gì, cách khai báo và sử dụng một struct trong Go, struct ẩn danh, so sanh hai struct, ...
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách con trỏ (pointer) hoạt động trong Go và nó khác với con trỏ trong các ngôn ngữ khác như C và C++ như thế nào.
Chuỗi (string) xứng đáng được đề cập đặc biệt trong Go vì chúng khác biệt trong cách triển khai khi so sánh với các ngôn ngữ khác.