Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mereka bentuk API fungsi elegan di Golang?

Bagaimana untuk mereka bentuk API fungsi elegan di Golang?

王林
王林asal
2024-04-12 18:06:01808semak imbas

Mereka bentuk API berfungsi yang elegan dalam Go memerlukan mengikut konvensyen penamaan, mengoptimumkan jenis parameter, mengurus ralat dan mempertimbangkan kebolehujian. Gunakan konvensyen penamaan untuk membezakan dengan jelas nama fungsi dan kaedah serta mengenal pasti kategori atau tujuan API. Optimumkan jenis parameter, gunakan struktur dan bukannya penunjuk atau jenis nilai, dan tentukan parameter input dan output yang jelas. Gunakan jenis ralat untuk mewakili sebab mengapa panggilan API gagal dan elakkan daripada mengembalikan rentetan ralat atau nilai secara terus. Tulis fungsi yang boleh diuji unit dan elakkan menggunakan keadaan global atau data boleh ubah yang dikongsi.

Bagaimana untuk mereka bentuk API fungsi elegan di Golang?

Mereka bentuk API berfungsi yang elegan dalam Go

Mereka bentuk API berfungsi yang intuitif dan mudah digunakan adalah penting untuk membina asas kod yang boleh diselenggara dan berskala. Begini cara melakukannya dalam Go:

1. Gunakan konvensyen penamaan

  • Kekalkan gaya penamaan yang konsisten, menggunakan bekas ular atau unta.
  • Bezakan dengan jelas antara nama fungsi dan nama kaedah.
  • Gunakan awalan untuk mengenal pasti kategori atau tujuan API, seperti get_, calculate_. 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.Iserrors.As
  • import "errors"
    
    var ErrUserNotFound = errors.New("user not found")
    
    func GetUserByID(id int) (*User, error) { ... }

2. Optimumkan jenis parameter

    Pertimbangkan untuk menggunakan struktur bukannya penunjuk atau jenis nilai untuk meningkatkan kebolehbacaan dan pengendalian ralat.
  • Tentukan parameter input dan output dengan jelas dan elakkan menggunakan senarai parameter variadic.
  • Pertimbangkan untuk menggunakan alias jenis untuk memudahkan definisi jenis yang kompleks.
  • 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
    }

3. Urus Ralat

Gunakan jenis ralat untuk menunjukkan dengan jelas sebab panggilan API gagal.

Elakkan daripada mengembalikan rentetan atau nilai ralat secara langsung, sebaliknya gunakan antara muka error standard.

Gunakan errors.Is dan errors.As untuk menyemak jenis ralat tertentu.

🎜
// Hash计算给定字符串的哈希值。
func Hash(s string) string { ... }
🎜🎜4. Fikirkan tentang kebolehujian🎜🎜🎜🎜Tulis fungsi untuk ujian unit. 🎜🎜Elakkan menggunakan keadaan global atau data boleh ubah yang dikongsi. 🎜🎜Gunakan antara muka atau suntikan kebergantungan untuk mensimulasikan kebergantungan luaran. . 🎜
// ComputeHash计算给定字符串的哈希值。
func ComputeHash(s string) []byte { ... }

// FormatHash格式化哈希值以进行显示或比较。
func FormatHash(hash []byte) string { ... }
🎜 Dengan cara ini kita boleh mengasingkan kefungsian API dan menjadikannya lebih mudah untuk dilanjutkan dan diuji. 🎜

Atas ialah kandungan terperinci Bagaimana untuk mereka bentuk API fungsi elegan di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn