Go 제네릭 ใน 진 핸들러

7223 단어 go
เนื่อง เนื่อง เนื่อง go 1.18 เริ่ม ใช้ ใช้ ใช้ ใช้ ใช้ แล้ว ซึ่ง ใน ใน 블록 ก่อน หน้า นี้ นี้ ผม ผม ก็ นำ เอา เอา 블로그 ต้น ฉบับ ของ ของ 기여자 มา แปล แปล คร่าว คร่าว ๆ ให้ ให้ ได้ อ่าน กัน ทำ ทำ ให้ ได้ รู้ USECASES ของ ใช้ ใช้ ใช้ ใช้ ว่า ว่า ปกติ จะ ใช้ กับ กับ ที่ ทำ กับ กับ กับ mAP, 슬라이스 หรือ 채널 หรือ หลัก หลัก และ เอา เอา จริง ๆ หลาย ๆ USECASES ที่ คิด กัน กัน ออก มา มัน อาจ จะ ทำ งาน กับ กับ 인터페이스 ได้ ดี ดี กว่า ที่ จะ พยายาม ยัดเยียด เอา เอา เอา เข้า เข้า ไป ความ ความ ความ ความ ความ ความ ความ ความ ความ

วัน วัน วัน ก็ นี้ ลอง ใช้ ใช้ ใช้ มา มา ใน การ การ สร้าง สร้าง GIN HandlerFunc เพื่อ ให้ เรา สามารถ เขียน handler ได้ ง่าย ขึ้น ด้วย ด้วย หน้าตา ประมาณ นี้ นี้

func Handler(request) (response,error)


ประโยชน ์ก็คือ มจะช่วยให้ เราเขียน เทสให้ 핸들러 ง่ายขึ้น โดยไม่ต้อ Context mock gin.

โดยเราจะวางโครง สร้าง โปรเจ็คเราแบบนี้


  • 도메인 ภายในนี้จะเป็นที่รวม 비즈니스 로직 ทั้งหมด
  • ginhandlerfunc เป็น 변환기 ที่จะช่วยแปลง 핸들러 แบบที่เราอยากได้ ไปเป็น gin.HandlerFunc

  • กไหน

    type CustomerRequest struct {
        Name string `json:"name"`
    }
    type CustomerResponse struct {
        Name string `json:"name"`
    }
    
    func CustomerHandler(request CustomerRequest) (CustomerResponse, error) {
        fmt.Println("CustomerHandler", request)
        return CustomerResponse{Name: request.Name}, nil
    }
    
    func New() gin.HandlerFunc {
        return ginhandlerfunc.NewBindRequestOKResponse(CustomerHandler)
    }
    


    ซึ่งเมื่อได้ 코드 หน้าตาแบบนี้แล้ว เวลาเราจะเขียน 비즈니스 로직 ก๹เขียน แค่๔ดเดเดยน 비즈니스 로직

    ginhandlerfunc.NewBindRequestOKResponse에서 ทีนี้ เราลองมาดูใ에서 กันว่ามีวิธีเขียนอย่างไร

    func NewBindRequestOKResponse[Request, Response any](handler func(Request) (Response, error)) gin.HandlerFunc {
        return func(c *gin.Context) {
            var request Request
            if err := c.ShouldBindJSON(&request); err != nil {
                c.AbortWithError(http.StatusBadRequest, err)
                return
            }
            response, err := handler(request)
            if err != nil {
                c.AbortWithError(http.StatusInternalServerError, err)
                return
            }
            c.JSON(http.StatusOK, response)
        }
    }
    


    นี่ นี่ นี่ คือ ก็ ของ มัน มัน เรา เรา ใช้ ใช้ ใช้ เข้า เข้า มา ช่วย ช่วย ใน ใน ส่วน การ ประกาศ 요청 และ 응답 และ ให้ ซึ่ง วิธี นี้ จะ ทำ ทำ ไม่ ได้ ได้ หาก ไม่ การ ใช้ ใช้ ใช้ มา ช่วย ช่วย ช่วย ช่วย ช่วย ช่วย
    และสามารถไปดู ตัวอย่าง ที่มากกว่านี้ได้ที่ https://github.com/pallat/generic_gin_handler

    ซึ่ง ซึ่ง ซึ่ง มี จะ ของ ของ handler ที่ รับ รับ รับ 매개 변수 ผ่าน uri param และ การ การ สร้าง handler struct มา เป็น handler ของ เรา ใน ที่ ต้อง มี มี 의존성 อื่น ๆ ๆ ๆ

    นี่ นี่ เพียง เพียง เป็น โค้ด ตัวอย่าง เบื้อง เบื้อง ต้น หวัง หวัง ว่า จะ จะ เป็น ประโยชน์ ไม่ ไม่ ว่า จะ นำ นำ ไป ใช้ หรือ สร้าง แรง แรง บันดาลใจ ให้ เขียน ท่า อื่น อื่น ๆ ที่ เหมาะสม กับ กับ สไตล์ ของ ตัว เอง นะ นะ นะ นะ นะ นะ นะ นะ

    좋은 웹페이지 즐겨찾기