การเยื้องใน Go: แท็บหรือช่องว่าง?


125

มีเอกสารมาตรฐานการเขียนโค้ดของ Google Go ที่กำหนดว่าต้องการให้แท็บหรือช่องว่างสำหรับการเยื้องใน Go ซอร์สโค้ดหรือไม่ ถ้าไม่ตัวเลือกที่ได้รับความนิยมมากกว่า (ทางสถิติ) คืออะไร?

  1. คำแนะนำอย่างเป็นทางการคืออะไร? (ถ้ามี)
  2. ทางเลือกที่เป็นที่นิยมมากขึ้นคืออะไร?

คำตอบ:


195

คำแนะนำอย่างเป็นทางการคือการจัดรูปแบบรหัสของคุณด้วย

go fmt

หรือใช้คำสั่ง gofmt โดยตรง

gofmt -w .

คุณสามารถอ่านเพิ่มเติมได้ที่นี่ในบล็อก golang.org หรือจากเอกสารEffective go :

การเยื้อง
เราใช้แท็บสำหรับการเยื้องและ gofmt จะส่งเสียงโดยค่าเริ่มต้น ใช้ช่องว่างเฉพาะเมื่อคุณต้องการ


59
ตกลงมันเป็นแท็บ
Erik Kaplun

1
ใช่แท็บสำหรับการเยื้องเป็นคำแนะนำอย่างเป็นทางการ คุณสามารถใช้การเว้นวรรคตามที่ @Intermernet ชี้ให้เห็น แต่ไม่ใช่คำแนะนำ
ANisus

19
@ErikAllik จริงๆแล้วตำแหน่งอย่างเป็นทางการไม่ใช่ "ใช้แท็บ" แต่เป็น "ใช้go fmtกับรหัสของคุณก่อนส่ง" (โปรดทราบว่ายังมีgofmt) สิ่งที่ฉันพยายามทำให้เกิดขึ้นคือ Go ทำสิ่งนี้ให้ถูกต้องไม่ใช่แค่การประกาศนโยบาย แต่เป็นการใช้เครื่องมือที่บังคับใช้ นี่เป็นเรื่องแปลกดังนั้นพยายามก้มหน้ารับแนวคิดนี้และนำgo fmtไปใช้ โปรดทราบว่ายังมีโซลูชันอัตโนมัติ (เช่นปลั๊กอิน Go อย่างเป็นทางการสำหรับ Vim รองรับ:Fmtคำสั่ง IIRC)
kostix


2
ฉันคิดว่าเป็นที่น่าสังเกตว่าการใช้ / ต้องใช้เครื่องมือไม่ได้หยุดการโต้แย้งทั้งหมด แต่หมายความว่าแทนที่จะทำให้คนอื่นโกรธคุณสำหรับตัวเลือกที่มีความคิดเห็นของคุณผู้คนกลับโกรธคุณที่ยอมรับเครื่องมือ (และที่ผู้ผลิตเครื่องมือสำหรับ ทางเลือกที่แสดงความคิดเห็นของพวกเขา)
mtraceur

22

แก้ไข 2:คำตอบเดิมของเขาที่ด้านล่างไม่ถูกต้อง ส่วนที่ถูกต้องของไฟล์ต้นฉบับที่เชื่อมโยง (30/12/2019 ปัจจุบัน) คือ:

Gofmt จัดรูปแบบโปรแกรม Go ใช้แท็บสำหรับการเยื้องและช่องว่างสำหรับการจัดแนว การจัดแนวจะถือว่าตัวแก้ไขกำลังใช้แบบอักษรที่มีความกว้างคงที่

ขอบคุณTehSphinX ที่ชี้ให้เห็นสิ่งนี้!

ข้อมูลทั้งหมดด้านล่างบรรทัดนี้ไม่ถูกต้อง

แก้ไข:คำตอบเดิมที่ด้านล่างไม่ถูกต้อง ส่วนที่ถูกต้องของไฟล์ต้นฉบับที่เชื่อมโยง (วันที่ 25/07/2014 ปัจจุบัน) คือ:

Gofmt จัดรูปแบบโปรแกรม Go
ใช้แท็บ (width = 8) สำหรับการเยื้องและช่องว่างสำหรับการจัดแนว

คำตอบเดิม (เลิกใช้แล้ว):

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จะหายไป (และ-commentsเป็นเอกสารที่ไม่ได้อย่างน้อย; ยังไม่ได้ดูอย่างใกล้ชิด)
วิลเลียม

2
@billisphere ขอบคุณฉันได้อัปเดตคำตอบพร้อมส่วนที่เกี่ยวข้องของไฟล์ที่ลิงก์แล้ว
Intermernet

5
เมื่อคุณใช้อักขระแท็บจะไม่มีสิ่งที่เรียกว่าการใช้ความกว้างของแท็บโดยเฉพาะดังนั้นตัวเลือก (เดิม) ของความกว้างของแท็บจึงไม่มีผลและควรลบส่วน "width = 8" ของข้อความที่อัปเดตออกความกว้างของแท็บถูกกำหนดค่าในโปรแกรมดู ข้อผิดพลาดนี้ยังมีอยู่ในแหล่งที่มาที่เชื่อมโยง
thomasrutter

2
สิ่งนี้ล้าสมัย ไม่มีการกล่าวถึงแท็บวิดท์อีกต่อไปในเอกสารของgofmtคำสั่ง ถูกลบออกที่นี่: github.com/golang/go/commit/…
TehSphinX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.