Đầu tiên một số nền tảng. Ngữ pháp chính thức của cờ vây sử dụng dấu chấm phẩy ";"
làm dấu chấm dứt trong nhiều sản phẩm, nhưng các chương trình cờ vây có thể bỏ qua hầu hết chúng (và chúng phải có nguồn rõ ràng, dễ đọc; gofmt
cũng loại bỏ dấu chấm phẩy không cần thiết).
Đặc điểm kỹ thuật liệt kê các quy tắc chính xác. Spec: Dấu chấm phẩy:
Ngữ pháp chính thức sử dụng dấu chấm phẩy ";" như những kẻ hủy diệt trong một số tác phẩm. Các chương trình Go có thể bỏ qua hầu hết các dấu chấm phẩy này bằng cách sử dụng hai quy tắc sau:
Khi đầu vào được chia thành các mã thông báo, dấu chấm phẩy tự động được chèn vào dòng mã thông báo ngay sau mã thông báo cuối cùng của dòng nếu mã đó là
- một định danh
- một số nguyên , dấu phẩy động , ảo , rune hoặc chuỗi ký tự
- một trong những từ khóa
break
, continue
, fallthrough
, hoặcreturn
- một trong các toán tử và dấu phân cách ++, -,),], hoặc}
Để cho phép các câu lệnh phức tạp chiếm một dòng, có thể bỏ qua dấu chấm phẩy trước dấu đóng ")" hoặc "}".
Vì vậy, như bạn có thể thấy nếu bạn chèn một ký tự dòng mới sau dấu ngoặc đơn )
, dấu chấm phẩy ;
sẽ được chèn tự động và do đó dòng tiếp theo sẽ không được coi là phần tiếp theo của dòng trước đó. Đây là những gì đã xảy ra trong trường hợp của bạn và vì vậy dòng tiếp theo bắt đầu bằng .Scan(&ReadUser.ID,...
sẽ cung cấp cho bạn lỗi thời gian biên dịch vì lỗi này đứng riêng (không có dòng trước) là lỗi thời gian biên dịch:syntax error: unexpected .
Vì vậy, bạn có thể ngắt dòng của mình tại bất kỳ điểm nào không mâu thuẫn với các quy tắc được liệt kê ở điểm 1.
trên.
Thông thường bạn có thể phá vỡ đường dây của bạn sau dấu phẩy ,
, sau khi mở ngoặc ví dụ như (
, [
, {
, và sau một chấm .
có thể được tham khảo một lĩnh vực hoặc các phương pháp của một số giá trị. Bạn cũng có thể ngắt dòng của mình sau các toán tử nhị phân (những toán tử yêu cầu 2 toán hạng), ví dụ:
i := 1 +
2
fmt.Println(i) // Prints 3
Một điều đáng lưu ý ở đây là nếu bạn có cấu trúc hoặc lát cắt hoặc bản đồ nghĩa đen liệt kê các giá trị ban đầu và bạn muốn ngắt dòng sau khi liệt kê giá trị cuối cùng, bạn phải đặt dấu phẩy bắt buộc ,
mặc dù đây là giá trị cuối cùng và không nhiều hơn sẽ theo sau, ví dụ:
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
Điều này tuân theo quy tắc dấu chấm phẩy và cũng để bạn có thể sắp xếp lại và thêm các dòng mới mà không cần phải quan tâm đến việc thêm / xóa dấu phẩy cuối cùng; Ví dụ: bạn có thể chỉ cần hoán đổi 2 dòng mà không phải xóa và thêm dấu phẩy mới:
s := []int {
4, 5, 6,
1, 2, 3,
}
Điều tương tự cũng áp dụng khi liệt kê các đối số cho một lệnh gọi hàm:
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)