ホームページ >バックエンド開発 >Golang >Golang でエレガントな関数 API を設計するにはどうすればよいですか?

Golang でエレガントな関数 API を設計するにはどうすればよいですか?

王林
王林オリジナル
2024-04-12 18:06:01821ブラウズ

Go でエレガントな関数 API を設計するには、命名規則に従い、パラメーターの型を最適化し、エラーを管理し、テスト容易性を考慮する必要があります。命名規則を使用して関数名とメソッド名を明確に区別し、API カテゴリまたは目的を識別します。パラメーターの型を最適化し、ポインターや値の型の代わりに構造体を使用し、明確な入力パラメーターと出力パラメーターを定義します。エラー タイプを使用して API 呼び出しが失敗した理由を表し、エラー文字列または値を直接返さないようにします。単体テスト可能な関数を作成し、グローバル状態や共有可変データの使用を避けてください。

Golang でエレガントな関数 API を設計するにはどうすればよいですか?

Go でのエレガントな関数 API の設計

設計された関数 API は直感的で使いやすく、構築に役立ちます保守可能で信頼性の高い機能、拡張されたコードベースが重要です。 Go でこれを行う方法は次のとおりです:

1. 命名規則を使用する

  • スネーク ケースまたはキャメル ケースを使用して、一貫した命名スタイルを維持します。
  • 関数名とメソッド名を明確に区別してください。
  • プレフィックスを使用して API カテゴリまたは目的を識別します (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. エラーの管理

  • エラー タイプを使用して、API 呼び出しが失敗した理由を明確に示します。
  • エラー文字列や値を直接返すことは避け、代わりに標準の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。