Khóa học go

Biến và khai báo biến trong Go Lang

0 phút đọc

Biến là một khái niệm cơ bản trong bất kỳ ngôn ngữ lập trình nào, và Golang (hay Go) cũng không ngoại lệ. Biến là một vùng nhớ được đặt tên để lưu trữ dữ liệu có thể thay đổi trong quá trình thực thi chương trình. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách khai báo, khởi tạo, và sử dụng biến trong Golang, cùng với các quy tắc và phạm vi của biến.

Khai Báo Biến

1. Sử Dụng Từ Khóa var

Cách phổ biến nhất để khai báo biến trong Golang là sử dụng từ khóa var. Cú pháp cơ bản như sau:

var tên_biến kiểu_dữ_liệu = giá_trị

Ví dụ:

package main

import "fmt"

func main() {
    var i int = 10
    var s string = "Hello, Go!"
    fmt.Println(i)
    fmt.Println(s)
}

Trong ví dụ trên, chúng ta khai báo hai biến is với kiểu dữ liệu intstring, và khởi tạo chúng với các giá trị tương ứng.

2. Khai Báo Biến Không Khởi Tạo

Nếu không khởi tạo giá trị cho biến, Golang sẽ tự động gán giá trị mặc định (zero value) cho biến đó. Cú pháp như sau:

var tên_biến kiểu_dữ_liệu

Ví dụ:

package main

import "fmt"

func main() {
    var i int
    var s string
    fmt.Println(i) // Output: 0
    fmt.Println(s) // Output: ""
}

Trong ví dụ này, biến i được gán giá trị mặc định là 0 và biến s được gán giá trị mặc định là chuỗi rỗng "".

3. Khai Báo Biến Ngắn Gọn

Golang cung cấp một cách khai báo biến ngắn gọn sử dụng toán tử :=. Cú pháp này chỉ có thể được sử dụng bên trong các hàm.

tên_biến := giá_trị

Ví dụ:

package main

import "fmt"

func main() {
    i := 10
    s := "Hello, Go!"
    fmt.Println(i)
    fmt.Println(s)
}

Trong ví dụ này, Golang tự động suy luận kiểu dữ liệu của biến dựa trên giá trị được gán.

Quy Tắc Đặt Tên Biến

Khi đặt tên biến trong Golang, cần tuân theo các quy tắc sau:

  • Tên biến phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới (_).
  • Tên biến có thể chứa các chữ cái, chữ số và dấu gạch dưới.
  • Tên biến không được bắt đầu bằng chữ số.
  • Tên biến phân biệt chữ hoa và chữ thường (ví dụ: car, Car, và CAR là ba biến khác nhau).
  • Tên biến bắt đầu bằng chữ cái thường chỉ có thể truy cập trong cùng một package (biến không xuất).
  • Tên biến bắt đầu bằng chữ cái hoa có thể truy cập từ các package khác (biến xuất).

Ví dụ:

package main

import "fmt"

func main() {
    var empName string = "John"
    var EmpAddress string = "123 Main St"
    fmt.Println(empName)
    fmt.Println(EmpAddress)
}

Giá Trị Mặc Định (Zero Value)

Khi khai báo biến mà không khởi tạo giá trị, Golang sẽ gán giá trị mặc định cho biến đó. Các giá trị mặc định phụ thuộc vào kiểu dữ liệu của biến:

  • int: 0
  • float32, float64: 0.0
  • bool: false
  • string: ""
  • pointer, slice, map, channel, function: nil

Ví dụ:

package main

import "fmt"

func main() {
    var quantity float32
    var price int16
    var product string
    var inStock bool

    fmt.Println(quantity) // Output: 0
    fmt.Println(price)    // Output: 0
    fmt.Println(product)  // Output: ""
    fmt.Println(inStock)  // Output: false
}

Phạm Vi của Biến

Phạm vi của biến xác định vùng mã mà biến có thể được truy cập. Trong Golang, phạm vi của biến được chia thành hai loại chính: biến cục bộ và biến toàn cục.

1. Biến Cục Bộ

Biến cục bộ được khai báo bên trong một hàm hoặc một khối mã và chỉ có thể truy cập trong phạm vi của hàm hoặc khối mã đó.

Ví dụ:

package main

import "fmt"

func main() {
    var localVar int = 10
    fmt.Println(localVar) // Output: 10
}

// fmt.Println(localVar) // Error: undefined local variable

Trong ví dụ này, biến localVar chỉ có thể truy cập bên trong hàm main.

2. Biến Toàn Cục

Biến toàn cục được khai báo bên ngoài tất cả các hàm và có thể truy cập từ bất kỳ hàm nào trong cùng một package.

Ví dụ:

package main

import "fmt"

var globalVar int = 20

func main() {
    fmt.Println(globalVar) // Output: 20
}

func anotherFunction() {
    fmt.Println(globalVar) // Output: 20
}

Trong ví dụ này, biến globalVar có thể truy cập từ cả hai hàm mainanotherFunction.

Khai Báo Nhiều Biến

Golang cho phép khai báo nhiều biến trên cùng một dòng hoặc trong cùng một khối mã để tăng tính rõ ràng và dễ bảo trì.

Ví dụ: Khai Báo Trên Cùng Một Dòng

package main

import "fmt"

func main() {
    var a, b, c int = 1, 2, 3
    fmt.Println(a, b, c) // Output: 1 2 3
}

Ví dụ: Khai Báo Trong Một Khối

package main

import "fmt"

func main() {
    var (
        a int = 1
        b int = 2
        c string = "Hello"
    )
    fmt.Println(a, b, c) // Output: 1 2 Hello
}

Biến Bị Che Khuất (Variable Shadowing)

Biến bị che khuất xảy ra khi một biến cục bộ có cùng tên với một biến toàn cục. Trong trường hợp này, biến cục bộ sẽ được ưu tiên sử dụng trong phạm vi của nó.

Ví dụ:

package main

import "fmt"

var shadowVar int = 100

func main() {
    var shadowVar int = 200
    fmt.Println(shadowVar) // Output: 200
}

Trong ví dụ này, biến shadowVar cục bộ trong hàm main sẽ che khuất biến shadowVar toàn cục.

Kết Luận

Biến là một phần quan trọng trong lập trình Golang, cho phép lưu trữ và thao tác dữ liệu một cách hiệu quả. Hiểu rõ cách khai báo, khởi tạo, và sử dụng biến sẽ giúp bạn viết mã Golang rõ ràng, hiệu quả và dễ bảo trì hơn. Bài viết này đã cung cấp một cái nhìn tổng quan chi tiết về biến trong Golang, từ các quy tắc đặt tên, giá trị mặc định, phạm vi biến, đến cách khai báo nhiều biến và xử lý biến bị che khuất. Hy vọng rằng bạn sẽ áp dụng những kiến thức này vào các dự án lập trình của mình một cách hiệu quả.

Gợi ý câu hỏi phỏng vấn

Gợi ý bài viết

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Khoá học javascript từ cơ bản đến chuyên sâuYoutube Techmely