- Published on
การตั้งชื่อในภาษา Go
- Authors
- Name
- Somprasong Damyos
- @somprasongd
Golang Naming Conventions
บทความนี้จะแนะนำวิธีการตั้งชื่อในภาษา Go กัน ซึ่งจะแบ่งออกเป็น 3 ระดับ
— Package Names
— — Files Names
— — — Function
— — — Type
— — — Variable
— — — Constant
Package Name Convention
ตัวพิมพ์เล็กเท่านั้น และควรเป็นคำคำเดียว ห้ามใช้ underscore (
_
) หรือตั้งชื่อแบบ camelCaseตัวอย่าง
github.com/username/project
ซึ่งจะดีกว่าการตั้งแบบด้านล่างนี้
github.com/username/PROJECT or github.com/username/Project
ในกรณีที่ชื่อยาว ให้ใช้ชื่อย่อ หรือคั่นด้วย dash (
-
) แทนตัวอย่าง
github.com/username/postgresusers or github.com/username/pgusers or github.com/username/postgres-users
การใช้ชื่อย่อจาก Golang official named packages
package strconv ดีกว่า package string-conversion package os ดีกว่า package operatingSystem package doc ดีกว่า package documentation package syslog ดีกว่า package system-log package ioutil ดีกว่า package io_utility
หลีกเลี่ยงไม่ตั้งชื่อชนกับ standard library package names
File Name Convention
ใช้ตัวพิมพ์เล็กทั้งหมด ไม่ตั้งชื่อแบบ camelCase
ควรใช้ชื่อสั้นๆ แต่สามารถสื่อความหมายถึงโค้ดด้านใน หรือจุดประสงค์ของไฟล์นั้นๆ
ถ้ามีหลายคำให้คั่นแต่และคำด้วย underscore (
_
)ตัวอย่าง
config.go database.go db_config.go user_service.go user_service_notification.go service.go
ซึ่งจะดีกว่าการตั้งแบบด้านล่างนี้
userController.go dbConfig.go userService.go
สำหรับไฟล์ test ให้ลงท้ายด้วย
_test.go
เสมอ
Function Name Convention
ตั้งชื่อด้วย camelCase
เมื่อต้องการ export ให้ตั้งขึ้นด้วยตัวพิมพ์ใหญ่ (PascalCase)
ตัวอย่าง
writeToFile() // unexported, only visible within the package WriteToFile() // exported, visible within and outside the package
หลีกเลี่ยงการตั้งชื่อซ้ำกับ package name
ตัวอย่าง
package log log.Info() // good log.LogInfo() // bad, because it repeats the package name.
Type Name Convention
type name จะรวมทั้ง stuct, interface, type aliases
- ตั้งชื่อด้วย PascalCase
- ถ้าไม่ต้องการ export ให้ตั้งขึ้นต้นด้วยตัวพิมพ์เล็ก (camelCase)
- ชื่อ element ให้ใช้วิธีเดียวกัน
ตัวอย่าง
type user struct {
ID uint64 // exported element
CreatedAt time.Time // exported element
deletedAt time.Time // unexported element
}
Variables and Constants Names Convention
ใช้ camel case เมื่อต้องการ export ให้ขึ้นตัวด้วยตัวพิมพ์ใหญ่
กรณีชื่อย่อ ให้ชนิดตัวพิมพ์เดียวกันทั้งคำย่อ ตัวอย่างคำว่า
URL
จะตั้งเป็นURL
หรือurl
ตัวอย่าง
URL --> urlService or URLService HTTP --> ServeHTTP not ServerHttp
ถ้าตัวแปลนั้นมีการใช้งานใน package private scope ให้ตั้งชื่อเต็ม ห้ามย่อ เช่น
patientRepository
ถ้าตัวแปลนั้นมีการใช้งานภายใน function scope ให้ตั้งเป็นชื่อย่อได้ 2-4 ตัวอักษร เช่น
patient
→pt
แต่ต้องระวังไม่ใช้ชนกับชื่อของ package, ตัวแปลใน upper scope และ receiver type
Reveiver Name Convention
- ให้ตั้งสั้นๆ แค่ 1 ตัว หรือใช้ตัวย่อของ type name
- ไม่ใช้
this
หรือself
Comments
ให้เว้นช่องว่างหลัง //
ตัวอย่าง
writeToFile() // unexported, only visible within the package
WriteToFile() // exported, visible within and outside the package
ซึ่งจะดีกว่าการตั้งแบบด้านล่างนี้
writeToFile() //unexported, only visible within the package
WriteToFile() //exported, visible within and outside the package