1 Tổng quan về Toán tử trong Golang

Trong ngôn ngữ Go, toán tử được sử dụng để thực hiện các hoạt động mã chương trình, bao gồm các hoạt động số học, so sánh quan hệ, hoạt động logic và nhiều hơn nữa. Các toán tử khác nhau tương ứng với các chức năng và kịch bản sử dụng khác nhau. Hiểu và nắm vững những toán tử này là nền tảng cho lập trình hiệu quả.

2 Toán tử Số học

Ngôn ngữ Go cung cấp một tập hợp các toán tử số học:

  • Cộng (+): Phép cộng
  • Trừ (-): Phép trừ
  • Nhân (*): Phép nhân
  • Chia (/): Phép chia
  • Dư (%): Phép chia lấy dư

Ví dụ:

package main

import "fmt"

func main() {
    // Phép cộng
    sum := 10 + 5
    fmt.Println("10 + 5 =", sum) // Xuất ra 15

    // Phép trừ
    diff := 10 - 5
    fmt.Println("10 - 5 =", diff) // Xuất ra 5

    // Phép nhân
    prod := 10 * 5
    fmt.Println("10 * 5 =", prod) // Xuất ra 50

    // Phép chia
    quot := 10 / 5
    fmt.Println("10 / 5 =", quot) // Xuất ra 2

    // Phép chia lấy dư
    rem := 10 % 5
    fmt.Println("10 % 5 =", rem) // Xuất ra 0
}

3 Toán tử Logic

Các toán tử logic trong ngôn ngữ Go được sử dụng để kết nối nhiều điều kiện (thường được sử dụng cho giá trị boolean). Nó bao gồm ba loại: AND (&&), OR (||) và NOT (!).

3.1 AND (&&)

Khi tất cả các điều kiện đều đúng, kết quả của phép vận hành "AND" là đúng.

Ví dụ:

package main

import "fmt"

func main() {
    fmt.Println(true && true)   // Xuất ra true
    fmt.Println(true && false)  // Xuất ra false
    fmt.Println(false && false) // Xuất ra false
    // Kết quả là true chỉ khi cả hai điều kiện đều đúng
}

3.2 OR (||)

Nếu ít nhất một điều kiện là đúng, kết quả của phép vận hành "OR" là đúng.

Ví dụ:

package main

import "fmt"

func main() {
    fmt.Println(true || true)   // Xuất ra true
    fmt.Println(true || false)  // Xuất ra true
    fmt.Println(false || false) // Xuất ra false
    // Kết quả là true nếu ít nhất một điều kiện là đúng
}

3.3 NOT (!)

Được sử dụng để đảo ngược giá trị boolean của một điều kiện.

Ví dụ:

package main

import "fmt"

func main() {
    fmt.Println(!true)  // Xuất ra false
    fmt.Println(!false) // Xuất ra true
    // Đảo ngược giá trị boolean
}

4 Toán tử So sánh

Các toán tử so sánh trong ngôn ngữ Go được sử dụng để so sánh hai biến hoặc giá trị:

  • Bằng với (==)
  • Không bằng (!=)
  • Lớn hơn (>)
  • Nhỏ hơn (<)
  • Lớn hơn hoặc bằng (>=)
  • Nhỏ hơn hoặc bằng (<=)

Kết quả của các phép so sánh là một giá trị boolean: true hoặc false.

5 Toán tử Bitwise

Trong Go, các toán tử bitwise cho phép chúng ta trực tiếp thao tác trên các bit nhị phân của dữ liệu:

  • Bitwise AND (&)
  • Bitwise OR (|)
  • Bitwise XOR (^)
  • Dịch bit sang trái (<<)
  • Dịch bit sang phải (>>)

Các toán tử bitwise chủ yếu được sử dụng trong lập trình cấp thấp, chẳng hạn như các hoạt động phần cứng trực tiếp, mã hóa và các kịch bản khác.

6 Toán tử Gán

Toán tử gán được sử dụng để gán giá trị cho biến. Trong ngôn ngữ Go, có nhiều dạng của toán tử gán:

  • Gán đơn (=)
  • Gán cộng (+=)
  • Gán trừ (-=)
  • Gán nhân (*=)
  • Gán chia (/=)
  • Gán phần dư (%=)

Những toán tử này làm cho mã chương trình trở nên ngắn gọn hơn. Ví dụ, x += 1 tương đương với x = x + 1.

7 Toán tử Đặc biệt

7.1 Toán tử Tăng (++) và Giảm (--)

Toán tử tăng (++) và toán tử giảm (--) được sử dụng để cộng thêm 1 và trừ đi 1 từ giá trị của một biến, tương ứng. Chúng là các toán tử duy nhất trong ngôn ngữ Go có thể tác động trực tiếp lên biến chính nó (không phải trên một biểu thức).

package main

import "fmt"

func main() {
    x := 1
    x++
    fmt.Println("x++ =", x) // Xuất ra 2

    y := 10
    y--
    fmt.Println("y-- =", y) // Xuất ra 9
}

Chú ý rằng trong ngôn ngữ Go, x++ hoặc x-- không thể là một phần của biểu thức. Ví dụ, z := x++ không được phép.

7.2 Chuyển đổi Kiểu Dữ Liệu

Ngôn ngữ Go là ngôn ngữ tĩnh, có nghĩa là khi một biến được khai báo, kiểu dữ liệu của nó không thể thay đổi. Do đó, đôi khi cần chuyển đổi một biến từ một kiểu sang một kiểu khác. Go không có chuyển đổi kiểu tự động; cần phải chuyển đổi kiểu tường minh.

Ví dụ:

package main

import (
	"fmt"
)

func main() {
	var i int = 42
	fmt.Println(float64(i)) // Chuyển int sang float64

	var f float64 = 3.14
	fmt.Println(int(f)) // Chuyển float64 sang int, phần thập phân sẽ bị loại bỏ
}

Khi thực hiện chuyển đổi kiểu dữ liệu, quan trọng để đảm bảo rằng dữ liệu an toàn trong quá trình chuyển đổi, ví dụ như sự mất mát độ chính xác có thể xảy ra khi chuyển đổi một số thực sang số nguyên.