在 Go 中設計優雅的函數 API 需要遵循命名約定、最佳化參數類型、管理錯誤和考慮可測試性。使用命名約定明確區分函數名稱和方法名稱,識別 API 類別或目的。最佳化參數類型,使用結構體取代指標或值類型,定義清晰的輸入和輸出參數。使用錯誤類型表示 API 呼叫失敗的原因,避免直接傳回錯誤字串或值。編寫可單元測試的函數,避免使用全域狀態或共用可變資料。
在Go 中設計優雅的函數API
#設計的函數API 直觀又易於使用對於建立可維護且可擴充的程式碼庫至關重要。以下是如何在 Go 中實現:
1. 使用命名約定
get_
、calculate_
。 // Get the current user. func GetCurrentUser() *User { ... } // Calculate the discount for a given user. func CalculateDiscountForUser(user *User) float64 { ... }
2. 最佳化參數類型
type User struct { ID int Name string IsPremium bool } func CreateUser(u *User) error { ... }
3. 管理錯誤
error
介面。 errors.Is
和 errors.As
檢查特定錯誤類型。 import "errors" var ErrUserNotFound = errors.New("user not found") func GetUserByID(id int) (*User, error) { ... }
4. 考慮可測試性
import ( "fmt" "io" ) // Logger接口定义了Write方法。 type Logger interface { Write(string) } // FileLogger将日志写入文件。 type FileLogger struct { File *io.File } // Write implements the Logger interface. func (l *FileLogger) Write(msg string) { fmt.Fprintf(l.File, msg) } // NewLogger创建新的日志记录器。 func NewLogger(path string) (Logger, error) { f, err := os.Create(path) if err != nil { return nil, err } return &FileLogger{f}, nil }
實戰案例:一個簡單的雜湊函數API
#考慮一個產生雜湊的函數API:
// Hash计算给定字符串的哈希值。 func Hash(s string) string { ... }
我們可以透過將輸入類型宣告為字串並分離雜湊功能和格式化功能來改進此API:
// ComputeHash计算给定字符串的哈希值。 func ComputeHash(s string) []byte { ... } // FormatHash格式化哈希值以进行显示或比较。 func FormatHash(hash []byte) string { ... }
這樣,我們就可以隔離API 的功能,並使API 更易於擴展和測試。
以上是在Golang中如何設計優雅的函數API?的詳細內容。更多資訊請關注PHP中文網其他相關文章!