- vừa được xem lúc

Golang cơ bản: Các cấu trúc điều khiển (2/3)

0 0 16

Người đăng: Phuong Le

Theo Viblo Asia

Ở bài viết trước mình đã nói về các kiểu dữ liệu, toán tử logic, bitwise,... trong đó mình giới thiệu các kiểu hay được sử dụng trong Go, cũng như một số thông tin cơ bản và một chút "deep dive". Ở bài này chúng ta sẽ tìm hiểu về các câu lệnh như if, else, for,...

Nếu các bạn chưa đọc phần 1: Golang cơ bản: Kiểu dữ liệu và Toán tử (1/3)

Câu lệnh If Else

Trong Golang, câu lệnh if cho phép bạn thực thi một khối code (block of code) chỉ khi điều kiện nhất định là đúng. Dưới đây là cú pháp cơ bản cho câu lệnh if trong Golang:

if isRain { // mang theo ô che mưa
}

Điều kiện ở đây là một biểu thức mà kết quả trả về là một giá trị boolean (true/ false), như chúng ta đã học ở Phần 1. Đặc biệt trong Go, biểu thức điều kiện không cần nằm trong dấu ngoặc tròn (...), đồng thời chúng cũng bắt buộc phải có ngoặc nhọn {...}.

Bạn cũng có thể sử dụng câu lệnh if kết hợp với mệnh đề else để chỉ định một khối code sẽ được thực thi nếu điều kiện là sai. Dưới đây là cú pháp cho câu lệnh if kèm theo mệnh đề else/ else if:

x := 10
if x > 5 { fmt.Println("x lớn hơn 5")
} else if x < 5 { fmt.Println("x nhỏ hơn 5")
} else { fmt.Println("x bằng 5")
}

Trong ví dụ này, câu lệnh if sẽ in ra thông báo "x lớn hơn 5" trên màn hình console vì điều kiện x (10) > 5 là đúng.

Bạn hoàn toàn có thể vừa khai báo, vừa kiểm tra kết quả, đây là cách viết ngắn trong một dòng code duy nhất:

if result := computeResult(); result > 5 { fmt.Println("Kết quả lớn hơn 5")
} else if result < 5 { fmt.Println("Kết quả nhỏ hơn 5")
} else { fmt.Println("Kết quả bằng 5")
}

Câu lệnh ngắn gọn result := computeResult() khai báo một biến mới là result và gán cho nó giá trị trả về từ hàm computeResult().

Sau đó, giá trị của result được so sánh với 5 bằng câu lệnh if. Nếu result lớn hơn 5, thông báo "Kết quả lớn hơn 5" sẽ được in ra màn hình console.

Lưu ý rằng, biến result chỉ có thể truy cập được trong phạm vi của câu lệnh if trong đó nó được khai báo. Điều này bởi result là một biến cục bộ chỉ có thể sử dụng trong khối mã mà nó được định nghĩa.

Vòng lặp For

Vòng lặp for là một cấu trúc điều khiển cho phép bạn lặp lại một khối code nhiều lần. Trong Go, có ba hình thức của vòng lặp for: hình thức cơ bản, hình thức chỉ có điều kiện và hình thức vô hạn và mình sẽ đi qua cả 3 hình thức này ở bên dưới.

Hình thức cơ bản của vòng lặp for bao gồm một câu lệnh khởi tạo, một điều kiện và một câu lệnh thực thi sau (post-processing):

for i := 0; i < 10; i++ { fmt.Println(i)
}

Đoạn code trên này sẽ in ra các số từ 0 đến 9 lên màn hình console.

Hình thức chỉ có điều kiện của vòng lặp for chỉ bao gồm một điều kiện (đúng như tên gọi). Nó giống với hình thức cơ bản, nhưng không bao gồm câu lệnh khởi tạo hoặc câu lệnh xử lý sau:

x := 5
for x < 10 { fmt.Println(x) x++
} // 5
// 6
// 7
// 8
// 9

Mã này sẽ in ra các số từ 5 đến 9 lên màn hình console.

Hình thức vô hạn của vòng lặp for không bao gồm điều kiện. Nó sẽ thực thi khối mã liên tục cho đến khi bị ngắt bởi câu lệnh break hoặc câu lệnh return.

for { fmt.Println("Hello World!")
}

"Mình có thể dùng hình thức cơ bản để mô phỏng hai hình thức khác không nhỉ?"

Bạn có thể để trống bất kỳ phần nào của hình thức cơ bản. Nếu bạn muốn mô phỏng hình thức chỉ có điều kiện từ hình thức cơ bản, đây là một ví dụ:

for i := 5; i < 10; { // <-- bỏ trống phần post loop fmt.Println(i)
}

Vòng lặp For với Range

Vòng lặp for kèm theo từ khoá range là một công cụ được sử dụng khá nhiều trong Go, nó cho phép bạn dễ dàng lặp qua các phần tử của mảng, chuỗi, slice, map mà không cần viết for cơ bản và index một cách rõ ràng:

arr := [5]int{1, 2, 3, 4, 5} for i, v := range arr { fmt.Println(i, v)
} // 0 1
// 1 2
// 2 3
// 3 4
// 4 5

Từ khoá range duyệt qua các phần tử của mảng arr, và các biến lặp i và v lần lượt được gán chỉ số và giá trị của từng phần tử.

Câu lệnh Switch Case

Câu lệnh switch case tương tự như một loạt các câu lệnh if được nối lại với nhau. Nó cho phép bạn kiểm tra một giá trị duy nhất với nhiều trường hợp khả thi và thực thi một khối mã dựa vào trường hợp (case) phù hợp nhất:

x := 3 switch x {
case 1: fmt.Println("x bằng 1")
case 2: fmt.Println("x bằng 2")
case 3: fmt.Println("x bằng 3")
default: fmt.Println("x không bằng 1, 2 hoặc 3")
} // x bằng 3

Câu lệnh switch sẽ xem xét giá trị của biến x và kiểm tra nó với từng trường hợp một cách tuần tự từ trên xuống.

Từ khoá "fallthrough"

Từ khoá "fallthrough" được sử dụng để cho phép mã trong câu lệnh switch "rơi vào" trường hợp sau, mà không thoát khỏi câu lệnh switch.

package main import "fmt" func main() { i := 45 switch { case i < 10: fmt.Println("i nhỏ hơn 10") case i < 50: fmt.Println("i nhỏ hơn 50") fallthrough // <--------------- case i < 100: fmt.Println("i nhỏ hơn 100") }
} // i nhỏ hơn 50
// i nhỏ hơn 100

Sau khi phù hợp với trường hợp thứ hai i < 50, luồng sẽ không bị gián đoạn do từ khoá "fallthrough", và tiếp tục vào trường hợp tiếp theo.

Nguồn tham khảo

Bài viết được dịch từ Go Fundamentals: Control Structures (P2)

Bình luận

Bài viết tương tự

- vừa được xem lúc

gRPC - Nó là gì và có nên sử dụng hay không?

Nhân một ngày rảnh rỗi, mình ngồi đọc lại RPC cũng như gRPC viết lại để nhớ lâu hơn. Vấn đề là gì và tại sao cần nó .

0 0 131

- vừa được xem lúc

Embedded Template in Go

Getting Start. Part of developing a web application usually revolves around working with HTML as user interface.

0 0 56

- vừa được xem lúc

Tạo Resful API đơn giản với Echo framework và MySQL

1. Giới thiệu.

0 0 60

- vừa được xem lúc

Sử dụng goquery trong golang để crawler thông tin các website Việt Nam bị deface trên mirror-h.org

. Trong bài viết này, mình sẽ cùng mọi người khám phá một package thu thập dữ liệu có tên là goquery của golang. Mục tiêu chính của chương trình crawler này sẽ là lấy thông tin các website Việt Nam bị deface (là tấn công, phá hoại website, làm thay đổi giao diện hiển thị của một trang web, khi người

0 0 237

- vừa được xem lúc

Tạo ứng dụng craw dữ liệu bing với Golang, Mysql driver

Chào mọi người . Lâu lâu ta lại gặp nhau 1 lần, để tiếp tục series chia sẻ kiến thức về tech, hôm nay mình sẽ tìm hiểu và chia sẻ về 1 ngôn ngữ đang khá hot trong cộng đồng IT đó là Golang.

0 0 75

- vừa được xem lúc

Golang: Rest api and routing using MUX

Routing with MUX. Let's create a simple CRUD api for a blog site. # All . GET articles/ .

0 0 54