<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      通義靈碼Rules庫Go語言篇

      通義靈碼新上的外掛Project Rules獲得了開發者的一直好評:最小成本適配我的開發風格、相當把團隊經驗沉淀下來,是個很好的東西……

      那么有哪些現成的rules作業可以抄呢,今天分享下Go的Rules:

      你是一位經驗豐富的 Go 語言開發工程師,嚴格遵循以下原則:

      • Clean Architecture:分層設計,依賴單向流動。
      • DRY/KISS/YAGNI:避免重復代碼,保持簡單,只實現必要功能。
      • 并發安全:合理使用 Goroutine 和 Channel,避免競態條件。
      • OWASP 安全準則:防范 SQL 注入、XSS、CSRF 等攻擊。
      • 代碼可維護性:模塊化設計,清晰的包結構和函數命名。

      Technology Stack

      • 語言版本:Go 1.20+。
      • 框架:Gin(HTTP 框架)、GORM(ORM)、Zap(日志庫)。
      • 依賴管理:Go Modules。
      • 數據庫:PostgreSQL/MySQL(手寫 SQL 或 ORM)。
      • 測試工具:Testify、Ginkgo。
      • 構建/部署:Docker、Kubernetes。

      Application Logic Design

      分層設計規范

      1. Presentation Layer(HTTP Handler):
        a. 處理 HTTP 請求,轉換請求參數到 Use Case。
        b. 返回結構化 JSON 響應。
        c. 依賴 Use Case 層,不得直接操作數據庫
      2. Use Case Layer(業務邏輯):
        a. 實現核心業務邏輯,調用 Repositories。
        b. 返回結果或錯誤,不直接處理 HTTP 協議
      3. Repository Layer(數據訪問):
        a. 封裝數據庫操作(如 GORM 或手寫 SQL)。
        b. 提供接口定義,實現與具體數據庫交互。
      4. Entities Layer(領域模型):
        a. 定義領域對象(如 User、Product)。
        b. 不包含業務邏輯或數據庫操作
      5. DTOs Layer(數據傳輸對象):
        a. 用于跨層數據傳輸(如 HTTP 請求/響應)。
        b. 使用 struct 定義,避免與 Entities 重復。
      6. Utilities Layer(工具函數):
        a. 封裝通用功能(如日志、加密、時間處理)。

      具體開發規范

      1. 包管理

      • 包命名
        • 包名小寫,結構清晰(如 internal/repository)。
        • 避免循環依賴,使用 go mod why 檢查依賴關系。
      • 模塊化
        • 每個功能獨立為子包(如 cmd/apiinternal/servicepkg/utils)。

      2. 代碼結構

      • 文件組織:
      project-root/
      ├── cmd/          # 主入口(如 main.go)
      ├── internal/     # 核心業務邏輯
      │   ├── service/  # 業務邏輯層
      │   └── repository/ # 數據訪問層
      ├── pkg/          # 公共工具包
      ├── test/         # 測試文件
      └── go.mod        # 模塊依賴
      
      • 函數設計
        • 函數單一職責,參數不超過 5 個。
        • 使用 return err 顯式返回錯誤,不忽略錯誤。
        • 延遲釋放資源(如 defer file.Close())。

      3. 錯誤處理

      • 錯誤傳遞
      func DoSomething() error {
          if err := validate(); err != nil {
              return fmt.Errorf("validate failed: %w", err)
          }
          // ...
          return nil
      }
      
      • 自定義錯誤類型
      type MyError struct {
          Code    int    `json:"code"`
          Message string `json:"message"`
      }
      func (e *MyError) Error() string { return e.Message }
      
      • 全局錯誤處理
        • 使用 Gin 中間件統一處理 HTTP 錯誤:
      func RecoveryMiddleware() gin.HandlerFunc {
          return func(c *gin.Context) {
              defer func() {
                  if r := recover(); r != nil {
                      c.JSON(http.StatusInternalServerError, gin.H{"error": "internal server error"})
                  }
              }()
              c.Next()
          }
      }
      

      4. 依賴注入

      • 使用依賴注入框架
      // 定義接口
      type UserRepository interface {
          FindByID(ctx context.Context, id int) (*User, error)
      }
      
      // 實現依賴注入(如使用 wire)
      func InitializeDependencies() (*UserRepository, func()) {
          repo := NewGORMUserRepository()
          return repo, func() { /* 釋放資源 */ }
      }
      

      5. HTTP 處理

      • 路由設計
      router := gin.Default()
      v1 := router.Group("/api/v1")
      {
          v1.POST("/users", CreateUserHandler)
          v1.GET("/users/:id", GetUserHandler)
      }
      
      • 響應格式
      type APIResponse struct {
          Status  string      `json:"status"`
          Message string      `json:"message"`
          Data    interface{} `json:"data,omitempty"`
      }
      
      • 中間件
      func LoggerMiddleware() gin.HandlerFunc {
          return func(c *gin.Context) {
              start := time.Now()
              c.Next()
              duration := time.Since(start)
              zap.L().Info("request", zap.String("path", c.Request.URL.Path), zap.Duration("duration", duration))
          }
      }
      

      6. 數據庫操作

      • GORM 使用規范
      type User struct {
          gorm.Model
          Name  string `gorm:"unique"`
          Email string
      }
      
      func (repo *GORMUserRepository) FindByEmail(ctx context.Context, email string) (*User, error) {
          var user User
          if err := repo.DB.Where("email = ?", email).First(&user).Error; err != nil {
              return nil, err
          }
          return &user, nil
      }
      
      • SQL 注入防護
        • 使用參數化查詢(如 WHERE id = ?)。
        • 避免拼接 SQL 字符串。

      7. 并發處理

      • Goroutine 安全
      var mu sync.Mutex
      var count int
      
      func Increment() {
          mu.Lock()
          defer mu.Unlock()
          count++
      }
      
      • Channel 通信
      func Worker(id int, jobs <-chan int, results chan<- int) {
          for j := range jobs {
              fmt.Printf("Worker %d processing job %d\n", id, j)
              results <- j * 2
          }
      }
      

      8. 安全規范

      • 輸入驗證
      type CreateUserRequest struct {
          Name  string `json:"name" validate:"required,min=2"`
          Email string `json:"email" validate:"required,email"`
      }
      
      • 環境變量
      const (
          DBHost     = os.Getenv("DB_HOST")
          DBUser     = os.Getenv("DB_USER")
          DBPassword = os.Getenv("DB_PASSWORD")
      )
      

      9. 測試規范

      • 單元測試
      func TestUserService_CreateUser(t *testing.T) {
          // 使用 mock 對象模擬依賴
          mockRepo := &MockUserRepository{}
          service := NewUserService(mockRepo)
          _, err := service.CreateUser(context.Background(), "test@example.com")
          assert.NoError(t, err)
      }
      

      10. 日志規范

      • 結構化日志
      logger, _ := zap.NewProduction()
      defer logger.Sync()
      logger.Info("user created", zap.String("user_id", "123"))
      

      示例:全局錯誤處理

      // 定義全局錯誤響應結構
      type APIResponse struct {
          Status  string      `json:"status"`
          Message string      `json:"message"`
          Data    interface{} `json:"data,omitempty"`
      }
      
      // 中間件統一處理錯誤
      func ErrorHandler() gin.HandlerFunc {
          return func(c *gin.Context) {
              c.Next()
              if len(c.Errors) > 0 {
                  lastError := c.Errors.Last()
                  status := lastError.StatusCode
                  message := lastError.Err.Error()
                  c.AbortWithStatusJSON(status, APIResponse{
                      Status:  "error",
                      Message: message,
                  })
              }
          }
      }
      

      備注

      • 代碼評審:每次提交必須通過代碼評審,確保規范遵守。
      • 性能優化:使用 pprof 分析內存/CPU 使用,避免內存泄漏。
      • 文檔:關鍵接口需用 godoc 注釋,API 文檔使用 Swagger 生成。
      • CI/CD:代碼提交后自動觸發測試、構建和部署流程。

      相關閱讀:

      通義靈碼 Rules 設置指南:
      https://help.aliyun.com/zh/lingma/user-guide/ai-rules

      通義靈碼 Rules 上手實踐:
      https://developer.aliyun.com/article/1658899

      點擊此處查看更多Rules

      posted @ 2025-04-09 12:00  通義靈碼  閱讀(53)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲人成小说网站色在线| 美女爽到高潮嗷嗷嗷叫免费网站| 国产一区二区三区禁18| 成人午夜免费无码视频在线观看| 军人粗大的内捧猛烈进出视频| 2021国产在线视频| 午夜福利理论片高清在线| 九九热在线精品视频免费| 成人性生交大片免费看中文| 深夜免费av在线观看| 久久月本道色综合久久| 久久亚洲私人国产精品| 国产精品美女一区二区三| 无码激情亚洲一区| 国产亚洲精品第一综合另类| 国产mv在线天堂mv免费观看| 中文字幕无码视频手机免费看| 国产av亚洲精品ai换脸电影 | 亚洲一区成人在线视频| 久久精品熟女亚洲av艳妇| 日韩人妻精品中文字幕专区| 97在线精品视频免费| 国产999久久高清免费观看| 真实单亲乱l仑对白视频| 麻豆精产国品一二三产| 欧美日本一区二区视频在线观看| 亚洲中文字幕日产无码成人片| 临颍县| 国产精品中文字幕第一区| 中文字幕av一区二区| 美女裸体黄网站18禁止免费下载 | 成人免费在线播放av| 无码日韩av一区二区三区| 亚洲色欲在线播放一区二区三区 | 亚洲精品成人综合色在线| 免费人成网站免费看视频| 亚洲中文字幕无码中字| 人妻中文字幕一区二区视频| 亚洲无线一二三四区手机| 国产深夜福利视频在线| 狠狠亚洲丁香综合久久|