Bài học theo mô-đun (4/5)
Toán tử
Go có các toán tử cổ điển mà bạn mong đợi, kèm theo một số điều bất ngờ:
số học, so sánh, logic, bitwise. Không có toán tử ternary
(a ? b : c), không quá tải, không chuyển đổi ngầm định giữa các loại.
Đơn giản là một tính năng.
số học
a, b := 10, 3
fmt.Println(a + b) // 13
fmt.Println(a - b) // 7
fmt.Println(a * b) // 30
fmt.Println(a / b) // 3 ← divisione INTERA tra interi
fmt.Println(a % b) // 1 ← resto (modulo)Tăng và giảm là TUYÊN BỐ, không phải biểu thức
x++ và x-- không tạo ra giá trị: chúng là "hành động" và không có gì
nhiều hơn nữa. Không y := x++ như trong C.
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6So sánh
== != < <= > >= trả lại bool. Chúng áp dụng cho số và chuỗi; cho
cấu trúc TẤT CẢ các trường phải có thể so sánh được (không có lát/bản đồ bên trong).
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // trueLogic với ngắn mạch
&&, ||, !. Chúng đoản mạch từ trái sang phải: nếu lần đầu tiên
toán hạng đủ để xác định kết quả, toán hạng thứ hai thậm chí còn không
được đánh giá.
adult := age >= 18
seniorAdult := age >= 18 && age < 65Theo chiều bit
& VÀ, | HOẶC, ^ XOR, << dịch trái, >> dịch chuyển phải, &^ VÀ
KHÔNG (rõ ràng một chút). Chúng rất hữu ích cho cờ, phân tích nhị phân và
tối ưu hóa:
flags := uint8(0b0000_0011)
flags |= 0b0000_0100 // imposta un bit: 0000_0111
flags &^= 0b0000_0010 // cancella un bit: 0000_0101
hasFlag := flags & 0b0000_0100 != 0 // trueKhông có chuyển đổi tiềm ẩn
1 + 1.5 trong Go biên dịch, vì cả hai đều là những chữ chưa được gõ.
Nhưng var i int = 1; i + 1.5 thực hiện KHÔNG: bạn cần float64(i) + 1.5.
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5Đến lượt bạn
Tính phần còn lại của phép chia 17 cho 5 và in ra. Dự kiến: 2.
Hiển thị gợi ý
Toán tử modulo là `%`.
Giải pháp khả dụng sau 3 lần thử
In đúng nếu độ tuổi từ 18 đến 65, nếu không thì in sai.
Hiển thị gợi ý
Kết hợp hai so sánh với `&&`.
Giải pháp khả dụng sau 3 lần thử
Mã này in gì?
a, b := 7, 2
fmt.Println(a/b, a%b)Tóm tắt lại
- Số học cổ điển;
/giữa các số nguyên là phép chia số nguyên (cắt ngắn). ++và--là câu lệnh, không phải biểu thức: khôngy := x++.- Các toán tử so sánh và logic tạo ra
bool;&&/||đoản mạch. - Bitwise
& | ^ << >> &^cho cờ và phân tích cú pháp nhị phân. - Không có chuyển đổi ngầm giữa các loại khác nhau: sử dụng
type(x).