Chuyển đến nội dung chính
Mô-đun 1 · Bài học 5 trong tổng số 55/50 trong khóa học~10 min
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

Go
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}
%+vnhư %v nhưng có tên trường trong cấu trúc{Name:Ada Age:36}
%#vBiểu diễn giá trị "Cú pháp Go"main.User{Name:"Ada", Age:36}
%Tloại giá trịfloat64
%dsố nguyên trong cơ số 1042
%fphao3.140000
%.2fnổi với 2 số thập phân3.14
%schuỗiAda
%qchuỗi "trích dẫn" (có dấu ngoặc kép và dấu thoát)"Ada\n"
%tbooltrue
%xthập lục phân (chữ thường)2a
%bnhị phân101010
Go
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) // float64

Sprintf: 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:

Go
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anni

Bạ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):

Go
if _, err := os.Open("missing"); err != nil {
    return fmt.Errorf("apertura config: %w", err)
}

Đến lượt bạn

tập thể dục#go.m1.l5.e1
Nỗ lực: 0Đang tải…

In chuỗi 'ciao mondo' bằng fmt.Println.

Đang tải trình chỉnh sửa…
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ử

tập thể dục#go.m1.l5.e2
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ử

Quiz#go.m1.l5.e3
Sẵn sàng

Động từ nào in ra LOẠI động của một giá trị?

Go
fmt.Printf("?\n", 3.14)
Tùy chọn trả lời

Tóm tắt lại

  • Print/Println/Printf khác nhau về khoảng trắng và dòng mới.
  • %v là ký tự đại diện hoạt động trên mọi loại; %+v hiển thị tên trường.
  • %T in loại (hữu ích cho việc gỡ lỗi nhanh).
  • Sprintf xây dựng chuỗi; Errorf tạo ra lỗi khi gói (%w).
  • Printf KHÔNG thêm dòng mới: tự viết nó theo chuỗi định dạng.