Giới thiệu
Trong lập trình Go, việc xử lý đầu vào từ người dùng và điều khiển luồng thực thi là những kỹ năng cơ bản. Bài viết này sẽ hướng dẫn cách sử dụng các hàm nhập liệu và cấu trúc điều khiển luồng.
Nhập dữ liệu người dùng
Hàm fmt.Scan
Sử dụng để đọc nhiều giá trị từ đầu vào, tách biệt bằng khoảng trắng.
package main
import "fmt"
func main() {
var tenDangNhap string
var tuoi int
fmt.Print("Nhập tên và tuổi, cách nhau bởi dấu cách: ")
soLuong, loi := fmt.Scan(&tenDangNhap, &tuoi)
fmt.Printf("Số giá trị đọc được: %d, Lỗi: %v, Tên: %s, Tuổi: %d\n", soLuong, loi, tenDangNhap, tuoi)
}
Lưu ý: Nếu chỉ nhấn Enter mà không nhập đủ số giá trị cần thiết, chương trình sẽ không dừng.
Hàm fmt.Scanln
Tương tự fmt.Scan nhưng dừng khi gặp ký tự xuống dòng.
package main
import "fmt"
func main() {
var tenDangNhap string
var tuoi int
fmt.Print("Nhập tên và tuổi (kết thúc bằng Enter): ")
soLuong, loi := fmt.Scanln(&tenDangNhap, &tuoi)
fmt.Printf("Tên: %s, Tuổi: %d\n", tenDangNhap, tuoi)
}
Hàm fmt.Scanf
Cho phép định dạng đầu vào theo mẫu.
package main
import "fmt"
func main() {
var ten string
fmt.Print("Nhập theo mẫu 'Tên: '")
soLuong, loi := fmt.Scanf("Tên: %s", &ten)
fmt.Printf("Tên đọc được: %s\n", ten)
}
Cảnh báo: Cần để khoảng trắng sau placeholder nếu có ký tự tiếp theo trong đầu vào.
Đọc toàn bộ dòng
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Nhập một dòng văn bản: ")
dong, _, _ := reader.ReadLine()
fmt.Printf("Bạn đã nhập: %s\n", dong)
}
Điều khiển luồng
Cấu trúc if-else
package main
import "fmt"
func main() {
var chucVu string
fmt.Print("Nhập chức vụ: ")
fmt.Scanln(&chucVu)
if chucVu == "admin" {
fmt.Println("Chào quản trị viên")
} else if chucVu == "nhanvien" {
fmt.Println("Chào nhân viên")
} else {
fmt.Printf("Chào %s\n", chucVu)
}
}
Cấu trúc switch-case
package main
import "fmt"
func main() {
var loaiTaiKhoan string
fmt.Print("Nhập loại tài khoản: ")
fmt.Scanln(&loaiTaiKhoan)
switch loaiTaiKhoan {
case "vip":
fmt.Println("Tài khoản Vip")
case "thuong":
fmt.Println("Tài khoản thường")
default:
fmt.Println("Loại tài khoản không xác định")
}
}
Vòng lặp for
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 5; i++ {
fmt.Println("Lần lặp thứ", i)
time.Sleep(time.Second)
}
}
Lệnh continue
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println("Số lẻ:", i)
time.Sleep(time.Second)
}
}
Lệnh break
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println("Đếm:", i)
time.Sleep(time.Second)
}
}
Lệnh goto
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
for j := 0; j < 5; j++ {
if j == 3 {
goto KETTHUC
}
fmt.Printf("%d-%d ", i, j)
}
fmt.Println()
}
KETTHUC:
fmt.Println("\nKết thúc chương trình")
}