Hướng dẫn lập trình Go: Nhập dữ liệu người dùng và điều khiển luồng chương trình

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")
}

Thẻ: Go control-flow input-handling fmt-package loop-structures

Đăng vào ngày 10 tháng 6 lúc 02:41