github.com/alimy/mir/v4@v4.1.0/docs/content.zh/docs/tutorials/servant-implement.md (about) 1 --- 2 weight: 23 3 title: "接口实现" 4 --- 5 6 ## 接口实现 7 ```go 8 // file: servants/user.go 9 10 package servants 11 12 import ( 13 "github.com/alimy/mir-example/v4/mirc/auto/api" 14 ) 15 16 type userSrv struct { 17 api.UnimplementedUserServant 18 } 19 20 type userBinding struct { 21 *api.UnimplementedUserBinding 22 } 23 24 type userRender struct { 25 *api.UnimplementedUserRender 26 } 27 28 func newUserSrv() api.Site { 29 return &userSrv{} 30 } 31 32 func newUserBinding() api.SiteBinding { 33 return &siteBinding{ 34 UnimplementedSiteBinding: &api.UnimplementedSiteBinding{ 35 BindAny: bindAny, 36 }, 37 } 38 } 39 40 func newUserRender() api.SiteRender { 41 return &siteRender{ 42 UnimplementedSiteRender: &api.UnimplementedSiteRender{ 43 RenderAny: renderAny, 44 }, 45 } 46 } 47 48 func bindAny(c *gin.Context, obj any) mir.Error { 49 if err != c.ShouldBind(obj); err != nil { 50 return mir.NewError(http.StatusBadRequest, err) 51 } 52 return nil 53 } 54 55 func renderAny(c *gin.Context, data any, err mir.Error) { 56 if err == nil { 57 c.JSON(http.StatusOK, data) 58 } else { 59 c.JSON(err.StatusCode(), err.Error()) 60 } 61 } 62 ```