Bài học theo mô-đun (5/5)
Đầu vào/đầu ra với fmt
Gói fmt của thư viện chuẩn là công cụ chính để bạn in sang
bảng điều khiển, định dạng chuỗi và đọc đầu vào. Nếu bạn đã sử dụng
printf ở C bạn sẽ cảm thấy như ở nhà nhưng có thêm một số cải tiến
nhờ các động từ %v và %T.
Print, Println, Printf: ba chức năng, ba hành vi
fmt.Print("ciao ", "mondo") // "ciao mondo" (niente newline finale)
fmt.Println("ciao", "mondo") // "ciao mondo\n" (newline + spazi tra argomenti)
fmt.Printf("eta=%d\n", 36) // "eta=36\n" (format string esplicita)Những động từ bạn sẽ sử dụng mọi lúc
| Động từ | Nó in gì | Ví dụ |
|---|---|---|
%v | "giá trị mặc định" — hoạt động trên mọi loại | {Ada 36} |
%+v | như %v nhưng có tên trường trong cấu trúc | {Name:Ada Age:36} |
%#v | Biểu diễn giá trị "Cú pháp Go" | main.User{Name:"Ada", Age:36} |
%T | loại giá trị | float64 |
%d | số nguyên trong cơ số 10 | 42 |
%f | phao | 3.140000 |
%.2f | nổi với 2 số thập phân | 3.14 |
%s | chuỗi | Ada |
%q | chuỗi "trích dẫn" (có dấu ngoặc kép và dấu thoát) | "Ada\n" |
%t | bool | true |
%x | thập lục phân (chữ thường) | 2a |
%b | nhị phân | 101010 |
u := struct{ Name string; Age int }{"Ada", 36}
fmt.Printf("%v\n", u) // {Ada 36}
fmt.Printf("%+v\n", u) // {Name:Ada Age:36}
fmt.Printf("%T\n", 3.14) // float64Sprintf: xây dựng chuỗi mà không cần in chúng
Giao diện tương tự như Printf, nhưng kết quả được trả về cho bạn dưới dạng
string:
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anniBạn sẽ sử dụng nó liên tục để xây dựng thông báo, nhật ký và lỗi.
Errorf: chuỗi + gói lỗi
fmt.Errorf tạo error với định dạng kiểu Printf. Với
động từ đặc biệt %w bạn có thể bọc một lỗi hiện có để bảo toàn lỗi đó
chuỗi (chúng tôi sẽ đề cập sâu hơn về vấn đề này trong mô-đun Giao diện):
if _, err := os.Open("missing"); err != nil {
return fmt.Errorf("apertura config: %w", err)
}Đến lượt bạn
In chuỗi 'ciao mondo' bằng fmt.Println.
Hiển thị gợi ý
`fmt.Println` nhận vào một chuỗi và thêm chính dòng mới đó.
Giải pháp khả dụng sau 3 lần thử
Sử dụng fmt.Printf để in 'eta=36' theo sau là một dòng mới, sử dụng động từ %d cho số nguyên.
Hiển thị gợi ý
`Printf` không thêm dòng mới: bạn phải bao gồm `\\n` trong chuỗi định dạng.
Giải pháp khả dụng sau 3 lần thử
Động từ nào in ra LOẠI động của một giá trị?
fmt.Printf("?\n", 3.14)Tóm tắt lại
Print/Println/Printfkhác nhau về khoảng trắng và dòng mới.%vlà ký tự đại diện hoạt động trên mọi loại;%+vhiển thị tên trường.%Tin loại (hữu ích cho việc gỡ lỗi nhanh).Sprintfxây dựng chuỗi;Errorftạo ra lỗi khi gói (%w).PrintfKHÔNG thêm dòng mới: tự viết nó theo chuỗi định dạng.