Tôi có câu hỏi về công cụ gofmt của Go, định dạng tự động đầu ra của các chương trình theo thông số Go chính thức (ví dụ: bạn không thể tranh luận về vị trí đặt trong Go, vì điều đó dường như được cố định bởi thông số kỹ thuật) .Các vấn đề gofmt và diff/VCS của Go?
Trên trang sau:
http://golang.org/doc/effective_go.html
theo "định dạng" đoạn, nó được viết rằng:
Như một ví dụ, không có cần phải dành nhiều thời gian xếp hàng các ý kiến trên các lĩnh vực của một cấu trúc. Gofmt sẽ làm điều đó cho bạn. Với khai
type T struct {
name string // name of the object
value int // its value
}
gofmt sẽ xếp hàng các cột:
type T struct {
name string // name of the object
value int // its value
}
Tuy nhiên tôi không hiểu tại sao này có thể có thể chơi đẹp với diff và VCSes.
Ví dụ, nếu tôi có một dòng sản phẩm mới:
confuzzabler int // doo doo be doo
và chạy một diff, tôi nên có được điều này:
2d1
< confuzzabler int // doo doo be doo
7d5
<
Và cuộc sống sẽ là tất cả tốt: các chương trình diff dòng duy nhất đã thay đổi.
Tuy nhiên nếu tôi lại chạy gofmt Tôi nhận điều này:
type T struct {
confuzzabler int // doo doo be doo
name string // name of the object
value int // its value
}
Và bây giờ tôi lại chạy diff và tôi có được điều này:
2,4c2,3
< confuzzabler int // doo doo be doo
< name string // name of the object
< value int // its value
---
> name string // name of the object
> value int // its value
7d5
<
Đó là một cao khó hiểu và gây hiểu lầm diff đầu ra vì chỉ có một dòng thay đổi.
Làm thế nào để bạn đối phó với điều này với tư cách là nhà phát triển Go?
Trước đó được bình chọn là "Offtopic" vui lòng đọc FAQ SO đây: http://stackoverflow.com/faq trong đó nêu rõ rằng SO là "đúng nơi" [sic] để đặt câu hỏi về lập trình công cụ (Tôi phải nêu rõ điều này vì gần đây tôi đã có câu hỏi về một công cụ được giảm giá và ai đó đã bỏ phiếu để đóng nó ... Không có khóa học nào đề xuất bất kỳ nơi nào khác để đăng câu hỏi của tôi). – SyntaxT3rr0r
Tôi nhận thấy điều này phần lớn làm nổi bật những thiếu sót của các công cụ * diff * quá ngu ngốc để hiểu rằng cả hai mã nguồn thực sự chính xác giống như chương trình Go nhưng tôi vẫn muốn biết cách xử lý vấn đề * gofmt * này. – SyntaxT3rr0r
@ Jonathan Leffler: nếu bạn đọc kỹ câu hỏi của tôi, bạn sẽ thấy rằng đó chính xác là ** vấn đề tôi mô tả. Thực hiện thay đổi nhỏ đối với mã nguồn, do bản chất của * gofmt *, có thể làm cho * gofmt * thay đổi nhiều dòng mã ngay cả khi bạn chỉ thay đổi một dòng (vì nó sắp xếp lại ** tất cả ** dòng của bạn, chứ không phải chỉ là cái bạn đã thêm). Đây là cái gì đó thường thúc đẩy các nhà phát triển hạt bởi vì nó tạo ra sự khác biệt "không có gì". Chỉ cần nhìn xem có bao nhiêu người ở đây trên SO phàn nàn về những người làm kiểu liên kết mà * gofmt * làm "bởi vì nó làm rối loạn sự khác biệt". – SyntaxT3rr0r