Thụt lề trong Go: tab hay dấu cách?


125

Có tài liệu quy ước viết mã chuẩn của Google Go ở đâu đó đặt liệu các tab hoặc khoảng trắng có được ưu tiên cho thụt lề trong mã nguồn Go không? Nếu không, tùy chọn (về mặt thống kê) phổ biến hơn là gì?

  1. Khuyến nghị chính thức là gì? (nếu có)
  2. Sự lựa chọn phổ biến hơn là gì?

Câu trả lời:


195

Khuyến nghị chính thức là định dạng mã của bạn với

go fmt

hoặc sử dụng lệnh gofmt trực tiếp

gofmt -w .

Bạn có thể đọc thêm về nó tại đây trên blog golang.org hoặc từ tài liệu Go hiệu quả :

Thụt lề
Chúng tôi sử dụng các tab để thụt lề và gofmt phát chúng theo mặc định. Chỉ sử dụng dấu cách nếu bạn phải.


59
OK, vậy là các tab.
Erik Kaplun

1
Có, các tab để thụt lề là khuyến nghị chính thức. Bạn có thể sử dụng thụt lề khoảng trắng như @Intermernet đã chỉ ra, nhưng đó không phải là khuyến nghị.
ANisus

19
@ErikAllik, thực ra, vị trí chính thức không phải là "sử dụng các tab" mà là "sử dụng go fmttrên mã của bạn trước khi gửi nó" (lưu ý rằng cũng có gofmt). Những gì tôi đang cố gắng thực hiện là Go thực hiện đúng điều này không chỉ bằng cách tuyên bố một chính sách mà bằng cách áp dụng một công cụ thực thi nó. Điều này là không phổ biến, vì vậy hãy cố gắng uốn nắn ý tưởng này và áp dụng go fmt. Lưu ý rằng thậm chí còn có các giải pháp tự động (ví dụ: plugin Go chính thức cho Vim hỗ trợ :Fmtlệnh, IIRC).
kostix


2
Tôi nghĩ rằng điều đáng chú ý là việc áp dụng / yêu cầu một công cụ không ngăn chặn mọi tranh luận, nhưng nó có nghĩa là thay vì mọi người nổi giận với bạn vì những lựa chọn cố chấp của bạn, mọi người lại giận bạn vì đã chấp nhận công cụ (và những người chế tạo công cụ cho sự lựa chọn cố chấp của họ).
mtraceur

22

CHỈNH SỬA 2: câu trả lời ban đầu của anh ấy ở phía dưới bây giờ không chính xác. Phần chính xác của tệp nguồn được liên kết (hiện tại là 30/12/2019) là:

Định dạng Gofmt Các chương trình Go. Nó sử dụng các tab để thụt lề và khoảng trống để căn chỉnh. Căn chỉnh giả định rằng trình chỉnh sửa đang sử dụng phông chữ có chiều rộng cố định.

Cảm ơn TehSphinX đã chỉ ra điều này!

TẤT CẢ THÔNG TIN DƯỚI ĐÂY ĐÂY LÀ ĐÚNG

CHỈNH SỬA: Câu trả lời ban đầu ở dưới cùng hiện không chính xác. Phần chính xác của tệp nguồn được liên kết (hiện tại là 25/07/2014) là:

Định dạng Gofmt Các chương trình Go.
Nó sử dụng các tab (width = 8) để thụt lề và khoảng trống để căn chỉnh.

Câu trả lời ban đầu (không được dùng nữa):

Formatting control flags:
    -comments=true
        Print comments; if false, all comments are elided from the output.
    -tabs=true
        Indent with tabs; if false, spaces are used instead.
    -tabwidth=8
        Tab width in spaces.

4
-tabs-tabwidthđang đi (và -commentskhông còn được ghi nhận ít nhất; đã không nhìn kĩ hơn)
William

2
@billisphere Cảm ơn, tôi đã cập nhật câu trả lời với phần có liên quan của tệp được liên kết.
Intermernet

5
Khi bạn sử dụng các ký tự tab, không có gì gọi là sử dụng chiều rộng tab cụ thể, vì vậy tùy chọn chiều rộng tab (trước đây) không có tác dụng và phần "width = 8" của văn bản cập nhật sẽ bị xóa. Chiều rộng tab được định cấu hình trong trình xem . Lỗi này cũng tồn tại trong nguồn được liên kết.
thomasrutter

2
Điều này đã lỗi thời. Không còn đề cập đến băng thông trong tài liệu của gofmtlệnh. Nó đã bị xóa ở đây: github.com/golang/go/commit/…
TehSphinX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.