ข้อกำหนดการเขียนโค้ด Go ของ Bank Salad
(blog.banksalad.com)- ทีม Bank Salad ใช้งาน Go อย่างจริงจังมาเป็นเวลา 4 ปี และได้กำหนดข้อกำหนดการเขียนโค้ดขึ้นจากความผิดพลาดและการลองผิดลองถูกหลากหลายรูปแบบ
เอกสารที่ควรอ่านไว้
เอกสารแนวทาง convention และ best practices หลายฉบับที่แนะนำให้อ่านสักครั้ง
- The Zen of Go
- คำอธิบายรายละเอียดของแต่ละข้อ: The Zen of Go | Dave Cheney
- ฉบับแปลภาษาเกาหลี ปรัชญาของ Go | marsettler.com
- Go Proverbs
- Effective Go | go.dev
- CodeReviewComments · golang/go Wiki | GitHub
- Practical Go | Dave Cheney
- คู่มือสไตล์ของทีม Thanos (ภาษาเกาหลี, ต้นฉบับ)
- คู่มือสไตล์ของทีม Uber (ภาษาเกาหลี, ต้นฉบับ)
- Ashley McNamara + Brian Ketelsen. Go best practices | YouTube
- Idiomatic Go | Sourcegraph
- Go Style Best Practices | Google
แนวปฏิบัติในการเขียนโค้ด
- Don't panic
- ฟังก์ชันที่อาจเกิด panic ควรใส่ prefix
must/ Panic vs Fatal - Panic safe goroutine / การรวบรวมผลลัพธ์ที่ concurrent safe
- Error stacking / Error handling / Error logging
- No named return
- การตั้งค่า HTTP client / การนำ HTTP connection กลับมาใช้ซ้ำ
- เมื่อต้องประกาศ slice ให้กำหนด len, cap / Nil slice vs Empty slice
- Bool map และ struct{} map / ตรวจสอบ
okเมื่อ query map / Avoid map loop - ใช้
rangeเมื่อลูปกับสตริง / ความยาวของสตริง - ใช้
context.Background()แทนcontext.TODO() - นิยมใช้ Early return
- ใช้
time.Duration/ ไทม์โซน - Table-driven test / No monkey patch / Deterministic test
- Avoid reflect
- Functional options
สไตล์การเขียนโค้ด
เนื้อหาที่อธิบายไว้เป็นสไตล์ของทีม Bank Salad และแนะนำให้แต่ละองค์กรพิจารณาปรับใช้ตามบริบทของตน แทนที่จะทำตามทุกข้อแบบตรงตัว
- ลำดับอาร์กิวเมนต์ของฟังก์ชัน
- การตั้งชื่อฟังก์ชันทดสอบ
- ลำดับการประกาศภายในไฟล์
- ลำดับของ import
- เอกพจน์ใช้ get พหูพจน์ใช้ list
- หลีกเลี่ยงคำที่กำกวม
- การตั้งชื่อ const
- การตั้งชื่อแพ็กเกจ
- โครงสร้างโปรเจกต์
2 ความคิดเห็น
:woman_running:
อ่านบทความดี ๆ นี้อย่างเพลิดเพลินมากครับ ผมคิดว่าบริษัทสองแห่งในประเทศที่ใช้ Go ได้ดีที่สุดคือ BankSalad กับ AB180