Đi - Biến
Một biến không là gì ngoài tên được đặt cho vùng lưu trữ mà chương trình có thể thao tác. Mỗi biến trong Go có một kiểu cụ thể, xác định kích thước và cách bố trí bộ nhớ của biến, phạm vi giá trị có thể được lưu trong bộ nhớ đó và tập hợp các thao tác có thể áp dụng cho biến.
Tên của một biến có thể bao gồm các chữ cái, chữ số và ký tự gạch dưới. Nó phải bắt đầu bằng một chữ cái hoặc một dấu gạch dưới. Chữ hoa và chữ thường khác nhau vì cờ vây có phân biệt chữ hoa chữ thường. Dựa trên các kiểu cơ bản đã giải thích ở chương trước, sẽ có các kiểu biến cơ bản sau:
Sr.No | Loại & Mô tả |
---|---|
1 |
byte Điển hình là một octet đơn (một byte). Đây là một kiểu byte. |
2 |
int Kích thước tự nhiên nhất của số nguyên cho máy. |
3 | float32 Một giá trị dấu chấm động chính xác duy nhất. |
Ngôn ngữ lập trình Go cũng cho phép định nghĩa nhiều loại biến khác nhau như Enumeration, Pointer, Array, Structure và Union, mà chúng ta sẽ thảo luận trong các chương tiếp theo. Trong chương này, chúng ta sẽ chỉ tập trung vào các kiểu biến cơ bản.
Định nghĩa biến trong Go
Định nghĩa biến cho trình biên dịch biết vị trí và dung lượng lưu trữ cần tạo cho biến. Định nghĩa biến chỉ định một kiểu dữ liệu và chứa danh sách một hoặc nhiều biến của kiểu đó như sau:
var variable_list optional_data_type;
Đây, optional_data_type là kiểu dữ liệu Go hợp lệ bao gồm byte, int, float32, complex64, boolean hoặc bất kỳ đối tượng nào do người dùng xác định, v.v., và variable_listcó thể bao gồm một hoặc nhiều tên định danh được phân tách bằng dấu phẩy. Một số khai báo hợp lệ được hiển thị ở đây -
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
Tuyên bố “var i, j, k;”khai báo và định nghĩa các biến i, j và k; hướng dẫn trình biên dịch tạo các biến có tên i, j và k kiểu int.
Các biến có thể được khởi tạo (gán giá trị ban đầu) trong khai báo của chúng. Loại biến được trình biên dịch tự động đánh giá dựa trên giá trị được truyền cho nó. Bộ khởi tạo bao gồm một dấu bằng theo sau là một biểu thức hằng số như sau:
variable_name = value;
Ví dụ,
d = 3, f = 5; // declaration of d and f. Here d and f are int
Đối với định nghĩa không có bộ khởi tạo: các biến có thời lượng lưu trữ tĩnh được khởi tạo ngầm định bằng nil (tất cả các byte đều có giá trị 0); giá trị ban đầu của tất cả các biến khác là giá trị 0 của kiểu dữ liệu của chúng.
Khai báo kiểu tĩnh khi di chuyển
Khai báo biến kiểu tĩnh cung cấp sự đảm bảo cho trình biên dịch rằng có một biến có sẵn với kiểu và tên đã cho để trình biên dịch có thể tiến hành biên dịch thêm mà không yêu cầu chi tiết đầy đủ của biến. Một khai báo biến chỉ có ý nghĩa tại thời điểm biên dịch, trình biên dịch cần khai báo biến thực sự tại thời điểm liên kết của chương trình.
Thí dụ
Hãy thử ví dụ sau, trong đó biến đã được khai báo với một kiểu và được khởi tạo bên trong hàm chính:
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T\n", x)
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
20
x is of type float64
Khai báo kiểu động / Suy luận kiểu trong Go
Khai báo biến kiểu động yêu cầu trình biên dịch diễn giải kiểu của biến dựa trên giá trị được truyền cho nó. Trình biên dịch không yêu cầu một biến phải có kiểu tĩnh như một yêu cầu cần thiết.
Thí dụ
Hãy thử ví dụ sau, trong đó các biến đã được khai báo mà không có bất kỳ kiểu nào. Lưu ý, trong trường hợp kiểu suy luận, chúng tôi đã khởi tạo biếny với: = toán tử, trong khi x được khởi tạo bằng toán tử =.
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T\n", x)
fmt.Printf("y is of type %T\n", y)
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
20
42
x is of type float64
y is of type int
Khai báo biến hỗn hợp khi di chuyển
Các biến của các kiểu khác nhau có thể được khai báo một lần bằng cách sử dụng suy luận kiểu.
Thí dụ
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T\n", a)
fmt.Printf("b is of type %T\n", b)
fmt.Printf("c is of type %T\n", c)
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
3
4
foo
a is of type int
b is of type int
c is of type string
Giá trị và giá trị trong cờ vây
Có hai loại biểu thức trong cờ vây -
lvalue- Các biểu thức tham chiếu đến một vị trí bộ nhớ được gọi là biểu thức "lvalue". Giá trị có thể xuất hiện ở dạng bên trái hoặc bên phải của bài tập.
rvalue- Thuật ngữ rvalue đề cập đến một giá trị dữ liệu được lưu trữ tại một số địa chỉ trong bộ nhớ. Giá trị là một biểu thức không thể có giá trị được gán cho nó, có nghĩa là giá trị có thể xuất hiện ở bên phải nhưng không xuất hiện bên trái của một phép gán.
Các biến là các giá trị và do đó có thể xuất hiện ở bên trái của một phép gán. Các chữ số là các giá trị và do đó có thể không được gán và không thể xuất hiện ở phía bên trái.
Câu lệnh sau là hợp lệ -
x = 20.0
Câu lệnh sau không hợp lệ. Nó sẽ tạo ra lỗi thời gian biên dịch -
10 = 20