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  ```