parent
c73d64a442
commit
5721f0619d
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/product-service.iml" filepath="$PROJECT_DIR$/.idea/product-service.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true">
|
||||
<buildTags>
|
||||
<option name="goVersion" value="go1.17" />
|
||||
</buildTags>
|
||||
</component>
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectTasksOptions">
|
||||
<enabled-global>
|
||||
<option value="go fmt" />
|
||||
</enabled-global>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,124 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
consul "github.com/asim/go-micro/plugins/registry/consul/v4"
|
||||
opentracing2 "github.com/go-micro/plugins/v4/wrapper/trace/opentracing"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"go-micro.dev/v4/web"
|
||||
"goproduct/common"
|
||||
"goproduct/proto"
|
||||
"log"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go-micro.dev/v4"
|
||||
"go-micro.dev/v4/registry"
|
||||
)
|
||||
|
||||
// 获取远程服务的客户端
|
||||
func main() {
|
||||
router := gin.Default()
|
||||
|
||||
router.Handle("GET", "toPage", func(context *gin.Context) {
|
||||
context.String(200, "to toPage ....")
|
||||
})
|
||||
|
||||
//注册到consul
|
||||
consulReg := consul.NewRegistry(func(options *registry.Options) {
|
||||
options.Addrs = []string{"192.168.100.131:8500"}
|
||||
})
|
||||
//初始化链路追踪的jaeper
|
||||
t, io, err := common.NewTracer("shop-product-client", "192.168.100.131:6831")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
defer io.Close()
|
||||
opentracing.SetGlobalTracer(t)
|
||||
|
||||
rpcServer := micro.NewService(
|
||||
//micro.Name("shop-product-client"),
|
||||
micro.Registry(consulReg), //服务发现
|
||||
micro.WrapClient(opentracing2.NewClientWrapper(opentracing.GlobalTracer())),
|
||||
)
|
||||
client := proto.NewPageService("shop-product", rpcServer.Client())
|
||||
//分页查询商品列表
|
||||
router.GET("/page", func(c *gin.Context) {
|
||||
//获取远程服务的客户端 client
|
||||
//获取页面参数
|
||||
length, _ := strconv.Atoi(c.Request.FormValue("length"))
|
||||
pageIndex, _ := strconv.Atoi(c.Request.FormValue("pageIndex"))
|
||||
//拼接请求信息
|
||||
req := &proto.PageReq{
|
||||
Length: int32(length),
|
||||
PageIndex: int32(pageIndex),
|
||||
}
|
||||
//远程调用服务
|
||||
resp, err := client.Page(context.TODO(), req)
|
||||
log.Println(" /page :", resp)
|
||||
//根据响应做输出
|
||||
if err != nil {
|
||||
log.Println(err.Error())
|
||||
//c.String(http.StatusBadRequest, "search failed !")
|
||||
common.RespFail(c.Writer, resp, "请求失败")
|
||||
return
|
||||
}
|
||||
////writer data message row total field
|
||||
common.RespListOK(c.Writer, resp, "请求成功", resp.Rows, resp.Total, "请求成功")
|
||||
})
|
||||
//查询商品详情
|
||||
clientA := proto.NewShowProductDetailService("shop-product", rpcServer.Client())
|
||||
router.GET("/showProductDetail", func(c *gin.Context) {
|
||||
//获取远程服务的客户端 client
|
||||
//获取页面参数
|
||||
id, _ := strconv.Atoi(c.Request.FormValue("id"))
|
||||
//拼接请求信息
|
||||
req := &proto.ProductDetailReq{
|
||||
Id: int32(id),
|
||||
}
|
||||
//远程调用服务
|
||||
resp, err := clientA.ShowProductDetail(context.TODO(), req)
|
||||
log.Println(" /showProductDetail :", resp)
|
||||
//根据响应做输出
|
||||
if err != nil {
|
||||
log.Println(err.Error())
|
||||
//c.String(http.StatusBadRequest, "search failed !")
|
||||
common.RespFail(c.Writer, resp, "请求失败")
|
||||
return
|
||||
}
|
||||
////writer data message row total field
|
||||
common.RespOK(c.Writer, resp, "请求成功")
|
||||
})
|
||||
//查询商品SKU
|
||||
clientSKU := proto.NewShowProductSkuService("shop-product", rpcServer.Client())
|
||||
router.GET("/sku", func(c *gin.Context) {
|
||||
//获取远程服务的客户端 client
|
||||
//获取页面参数
|
||||
id, _ := strconv.Atoi(c.Request.FormValue("productId"))
|
||||
//拼接请求信息
|
||||
req := &proto.ProductSkuReq{
|
||||
ProductId: int32(id),
|
||||
}
|
||||
//远程调用服务
|
||||
resp, err := clientSKU.ShowProductSku(context.TODO(), req)
|
||||
log.Println(" /sku :", resp)
|
||||
//根据响应做输出
|
||||
if err != nil {
|
||||
log.Println(err.Error())
|
||||
//c.String(http.StatusBadRequest, "search failed !")
|
||||
common.RespFail(c.Writer, resp, "请求失败")
|
||||
return
|
||||
}
|
||||
////writer data message row total field
|
||||
common.RespListOK(c.Writer, resp, "请求成功", 0, 0, "请求成功")
|
||||
|
||||
})
|
||||
service := web.NewService(
|
||||
web.Address(":6667"),
|
||||
web.Name("shop-product-client"),
|
||||
web.Registry(consulReg),
|
||||
web.Handler(router),
|
||||
)
|
||||
service.Run()
|
||||
//router.Run(":6666")
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"github.com/opentracing/opentracing-go"
|
||||
jaeger "github.com/uber/jaeger-client-go"
|
||||
"github.com/uber/jaeger-client-go/config"
|
||||
"io"
|
||||
"time"
|
||||
)
|
||||
|
||||
/*
|
||||
@Auth:ShenZ
|
||||
@Description: Jaeger的实列化方法
|
||||
*/
|
||||
func NewTracer(serviceName string, addr string) (opentracing.Tracer, io.Closer, error) {
|
||||
cfg := &config.Configuration{
|
||||
ServiceName: serviceName,
|
||||
Sampler: &config.SamplerConfig{
|
||||
Type: jaeger.SamplerTypeConst,
|
||||
Param: 1,
|
||||
},
|
||||
Reporter: &config.ReporterConfig{
|
||||
BufferFlushInterval: 1 * time.Second,
|
||||
LogSpans: true,
|
||||
LocalAgentHostPort: addr,
|
||||
},
|
||||
}
|
||||
return cfg.NewTracer()
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"goproduct/domain/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
/**
|
||||
int32 clientId = 1;
|
||||
string phone = 2;
|
||||
int32 systemId = 3;
|
||||
string verificationCode = 4;
|
||||
**/
|
||||
//接口
|
||||
type IProductRepository interface {
|
||||
Page(int32, int32) (int64, *[]model.Product, error)
|
||||
ShowProductDetail(int32) (*model.ProductDetail, error)
|
||||
ShowProductSku(int32) (*[]model.ProductSku, error)
|
||||
CountNum() int64
|
||||
}
|
||||
|
||||
// 创建实例
|
||||
func NewProductRepository(db *gorm.DB) IProductRepository {
|
||||
return &ProductRepository{mysqlDB: db}
|
||||
}
|
||||
|
||||
// 数据DB
|
||||
type ProductRepository struct {
|
||||
mysqlDB *gorm.DB
|
||||
}
|
||||
|
||||
// 重写接口方法
|
||||
// product/app/product/page?length=15&pageIndex=1
|
||||
func (u *ProductRepository) Page(length int32, pageIndex int32) (coun int64, products *[]model.Product, err error) {
|
||||
arr := make([]model.Product, length)
|
||||
var count int64
|
||||
//u.mysqlDB.Model(&model.Product{}).Count(&count)
|
||||
|
||||
if length > 0 && pageIndex > 0 {
|
||||
u.mysqlDB = u.mysqlDB.Limit(int(length)).Offset((int(pageIndex) - 1) * int(length))
|
||||
if err := u.mysqlDB.Find(&arr).Error; err != nil {
|
||||
fmt.Println("query product err :", err)
|
||||
}
|
||||
u.mysqlDB.Model(&model.Product{}).Offset(-1).Limit(-1).Count(&count)
|
||||
return count, &arr, nil
|
||||
}
|
||||
return count, &arr, errors.New("参数不匹配")
|
||||
}
|
||||
|
||||
func (u *ProductRepository) ShowProductDetail(id int32) (product *model.ProductDetail, err error) {
|
||||
sql := "select p.`id` , p.`name`, p.product_type,p.category_id ,p.starting_price,\n " +
|
||||
" pd.detail as detail ,GROUP_CONCAT(pp.picture SEPARATOR ',') as picture_list\n" +
|
||||
"FROM `product` p\n" +
|
||||
" left join product_detail pd on p.id = pd.product_id\n " +
|
||||
" left join product_picture pp on p.id = pp.product_id\n " +
|
||||
" where p.`id` = ?"
|
||||
var productDetails []model.ProductDetail
|
||||
|
||||
u.mysqlDB.Raw(sql, id).Scan(&productDetails)
|
||||
fmt.Println("repository ShowProductDetail >>>> ", productDetails)
|
||||
return &productDetails[0], nil
|
||||
}
|
||||
func (u *ProductRepository) CountNum() int64 {
|
||||
var count int64
|
||||
u.mysqlDB.Model(&model.Product{}).Offset(-1).Limit(-1).Count(&count)
|
||||
return count
|
||||
}
|
||||
|
||||
/*
|
||||
SkuId int32 `gorm:"column:id" json:"skuId"`
|
||||
Name string
|
||||
AttributeSymbolList string `gorm:"column:attribute_symbolList" json:"attributeSymbolList"`
|
||||
SellPrice float32 `gorm:"column:sell_price" json:"sellPrice"`
|
||||
Stock int32 `gorm:"default:1"`
|
||||
*/
|
||||
func (u *ProductRepository) ShowProductSku(id int32) (product *[]model.ProductSku, err error) {
|
||||
sql := "select id ,name ,attribute_symbol_list,sell_price,stock from product_sku where product_id= ?"
|
||||
var productSku []model.ProductSku
|
||||
|
||||
u.mysqlDB.Raw(sql, id).Scan(&productSku)
|
||||
fmt.Println("repository ShowProductSku >>>> ", productSku)
|
||||
return &productSku, nil
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"goproduct/domain/model"
|
||||
"goproduct/domain/repository"
|
||||
)
|
||||
|
||||
type IProductDataService interface {
|
||||
Page(int32, int32) (count int64, products *[]model.Product, err error)
|
||||
ShowProductDetail(int32) (obj *model.ProductDetail, err error)
|
||||
ShowProductSku(int32) (obj *[]model.ProductSku, err error)
|
||||
CountNum() int64
|
||||
}
|
||||
type ProductDataService struct {
|
||||
productRepository repository.IProductRepository
|
||||
}
|
||||
|
||||
func NewProductDataService(productRepository repository.IProductRepository) IProductDataService {
|
||||
return &ProductDataService{productRepository: productRepository}
|
||||
}
|
||||
|
||||
// 重写接口方法
|
||||
func (u *ProductDataService) Page(length int32, pageIndex int32) (count int64, products *[]model.Product, err error) {
|
||||
|
||||
return u.productRepository.Page(length, pageIndex)
|
||||
}
|
||||
|
||||
func (u *ProductDataService) CountNum() int64 {
|
||||
|
||||
return u.productRepository.CountNum()
|
||||
}
|
||||
|
||||
func (u *ProductDataService) ShowProductDetail(id int32) (product *model.ProductDetail, err error) {
|
||||
|
||||
return u.productRepository.ShowProductDetail(id)
|
||||
}
|
||||
func (u *ProductDataService) ShowProductSku(id int32) (product *[]model.ProductSku, err error) {
|
||||
|
||||
return u.productRepository.ShowProductSku(id)
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"goproduct/common"
|
||||
"goproduct/domain/model"
|
||||
"goproduct/domain/service"
|
||||
"goproduct/proto"
|
||||
)
|
||||
|
||||
type ProductHandler struct {
|
||||
ProductDataService service.IProductDataService
|
||||
}
|
||||
|
||||
// 查询商品列表
|
||||
func (u *ProductHandler) Page(ctx context.Context, req *proto.PageReq, resp *proto.PageResp) error {
|
||||
//count := u.ProductDataService.CountNum()
|
||||
count, obj, err := u.ProductDataService.Page(req.GetLength(), req.GetPageIndex())
|
||||
if err != nil {
|
||||
println("page product err :", err)
|
||||
}
|
||||
//count = u.ProductDataService.CountNum()
|
||||
resp.Rows = int64(req.GetLength())
|
||||
resp.Total = count
|
||||
//fmt.Println(">>>>>>>>>>>>> page product success :", obj)
|
||||
ObjForResp(obj, resp)
|
||||
return nil
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
|
||||
"id": 115,
|
||||
"name": "马歇尔MARSHALL STANMOREⅡ无线蓝牙音响家用复古重低音小音箱",
|
||||
"startingPrice": 3300,
|
||||
"mainPicture": "https://msb-edu-prod.oss-cn-beijing.aliyuncs.com/mall-product/product/d4f1f19e-2e90-4ac5-bbe3-1eba02085a0f.jpg",
|
||||
"labelList": [ ],
|
||||
"singleBuyLimit": null,
|
||||
"isEnable": null,
|
||||
"productType": null
|
||||
|
||||
*
|
||||
*/
|
||||
func ObjForResp(obj *[]model.Product, resp *proto.PageResp) (err error) {
|
||||
for _, v := range *obj {
|
||||
product := &proto.Product{}
|
||||
err := common.SwapToStruct(v, product)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println(">>>>>>>>>>>>> ", product)
|
||||
resp.Product = append(resp.Product, product)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 商品详情
|
||||
func (u *ProductHandler) ShowProductDetail(ctx context.Context, req *proto.ProductDetailReq, resp *proto.ProductDetailResp) error {
|
||||
//count := u.ProductDataService.CountNum()
|
||||
obj, err := u.ProductDataService.ShowProductDetail(req.GetId())
|
||||
if err != nil {
|
||||
println("ShowProductDetail err :", err)
|
||||
}
|
||||
productDetail := &proto.ProductDetail{}
|
||||
err1 := common.SwapToStruct(obj, productDetail)
|
||||
if err1 != nil {
|
||||
println("ShowProductDetail SwapToStruct err :", err1)
|
||||
}
|
||||
resp.ProductDetail = append(resp.ProductDetail, productDetail)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 商品SKU
|
||||
func (u *ProductHandler) ShowProductSku(ctx context.Context, req *proto.ProductSkuReq, resp *proto.ProductSkuResp) error {
|
||||
//count := u.ProductDataService.CountNum()
|
||||
obj, err := u.ProductDataService.ShowProductSku(req.GetProductId())
|
||||
if err != nil {
|
||||
println("ShowProductSku err :", err)
|
||||
}
|
||||
err1 := ObjSkuForResp(obj, resp)
|
||||
if err1 != nil {
|
||||
println("ShowProductSku SwapToStruct err :", err1)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ObjSkuForResp(obj *[]model.ProductSku, resp *proto.ProductSkuResp) (err error) {
|
||||
for _, v := range *obj {
|
||||
product := &proto.ProductSku{}
|
||||
err := common.SwapToStruct(v, product)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
resp.ProductSku = append(resp.ProductSku, product)
|
||||
}
|
||||
return nil
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,211 @@
|
||||
// Code generated by protoc-gen-micro. DO NOT EDIT.
|
||||
// source: product.proto
|
||||
|
||||
package proto
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
math "math"
|
||||
)
|
||||
|
||||
import (
|
||||
context "context"
|
||||
api "go-micro.dev/v4/api"
|
||||
client "go-micro.dev/v4/client"
|
||||
server "go-micro.dev/v4/server"
|
||||
)
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal
|
||||
var _ = fmt.Errorf
|
||||
var _ = math.Inf
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ api.Endpoint
|
||||
var _ context.Context
|
||||
var _ client.Option
|
||||
var _ server.Option
|
||||
|
||||
// Api Endpoints for Page service
|
||||
|
||||
func NewPageEndpoints() []*api.Endpoint {
|
||||
return []*api.Endpoint{}
|
||||
}
|
||||
|
||||
// Client API for Page service
|
||||
|
||||
type PageService interface {
|
||||
//rpc 服务
|
||||
Page(ctx context.Context, in *PageReq, opts ...client.CallOption) (*PageResp, error)
|
||||
}
|
||||
|
||||
type pageService struct {
|
||||
c client.Client
|
||||
name string
|
||||
}
|
||||
|
||||
func NewPageService(name string, c client.Client) PageService {
|
||||
return &pageService{
|
||||
c: c,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *pageService) Page(ctx context.Context, in *PageReq, opts ...client.CallOption) (*PageResp, error) {
|
||||
req := c.c.NewRequest(c.name, "Page.Page", in)
|
||||
out := new(PageResp)
|
||||
err := c.c.Call(ctx, req, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Server API for Page service
|
||||
|
||||
type PageHandler interface {
|
||||
//rpc 服务
|
||||
Page(context.Context, *PageReq, *PageResp) error
|
||||
}
|
||||
|
||||
func RegisterPageHandler(s server.Server, hdlr PageHandler, opts ...server.HandlerOption) error {
|
||||
type page interface {
|
||||
Page(ctx context.Context, in *PageReq, out *PageResp) error
|
||||
}
|
||||
type Page struct {
|
||||
page
|
||||
}
|
||||
h := &pageHandler{hdlr}
|
||||
return s.Handle(s.NewHandler(&Page{h}, opts...))
|
||||
}
|
||||
|
||||
type pageHandler struct {
|
||||
PageHandler
|
||||
}
|
||||
|
||||
func (h *pageHandler) Page(ctx context.Context, in *PageReq, out *PageResp) error {
|
||||
return h.PageHandler.Page(ctx, in, out)
|
||||
}
|
||||
|
||||
// Api Endpoints for ShowProductDetail service
|
||||
|
||||
func NewShowProductDetailEndpoints() []*api.Endpoint {
|
||||
return []*api.Endpoint{}
|
||||
}
|
||||
|
||||
// Client API for ShowProductDetail service
|
||||
|
||||
type ShowProductDetailService interface {
|
||||
//rpc 服务
|
||||
ShowProductDetail(ctx context.Context, in *ProductDetailReq, opts ...client.CallOption) (*ProductDetailResp, error)
|
||||
}
|
||||
|
||||
type showProductDetailService struct {
|
||||
c client.Client
|
||||
name string
|
||||
}
|
||||
|
||||
func NewShowProductDetailService(name string, c client.Client) ShowProductDetailService {
|
||||
return &showProductDetailService{
|
||||
c: c,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *showProductDetailService) ShowProductDetail(ctx context.Context, in *ProductDetailReq, opts ...client.CallOption) (*ProductDetailResp, error) {
|
||||
req := c.c.NewRequest(c.name, "ShowProductDetail.ShowProductDetail", in)
|
||||
out := new(ProductDetailResp)
|
||||
err := c.c.Call(ctx, req, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Server API for ShowProductDetail service
|
||||
|
||||
type ShowProductDetailHandler interface {
|
||||
//rpc 服务
|
||||
ShowProductDetail(context.Context, *ProductDetailReq, *ProductDetailResp) error
|
||||
}
|
||||
|
||||
func RegisterShowProductDetailHandler(s server.Server, hdlr ShowProductDetailHandler, opts ...server.HandlerOption) error {
|
||||
type showProductDetail interface {
|
||||
ShowProductDetail(ctx context.Context, in *ProductDetailReq, out *ProductDetailResp) error
|
||||
}
|
||||
type ShowProductDetail struct {
|
||||
showProductDetail
|
||||
}
|
||||
h := &showProductDetailHandler{hdlr}
|
||||
return s.Handle(s.NewHandler(&ShowProductDetail{h}, opts...))
|
||||
}
|
||||
|
||||
type showProductDetailHandler struct {
|
||||
ShowProductDetailHandler
|
||||
}
|
||||
|
||||
func (h *showProductDetailHandler) ShowProductDetail(ctx context.Context, in *ProductDetailReq, out *ProductDetailResp) error {
|
||||
return h.ShowProductDetailHandler.ShowProductDetail(ctx, in, out)
|
||||
}
|
||||
|
||||
// Api Endpoints for ShowProductSku service
|
||||
|
||||
func NewShowProductSkuEndpoints() []*api.Endpoint {
|
||||
return []*api.Endpoint{}
|
||||
}
|
||||
|
||||
// Client API for ShowProductSku service
|
||||
|
||||
type ShowProductSkuService interface {
|
||||
//rpc 服务
|
||||
ShowProductSku(ctx context.Context, in *ProductSkuReq, opts ...client.CallOption) (*ProductSkuResp, error)
|
||||
}
|
||||
|
||||
type showProductSkuService struct {
|
||||
c client.Client
|
||||
name string
|
||||
}
|
||||
|
||||
func NewShowProductSkuService(name string, c client.Client) ShowProductSkuService {
|
||||
return &showProductSkuService{
|
||||
c: c,
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *showProductSkuService) ShowProductSku(ctx context.Context, in *ProductSkuReq, opts ...client.CallOption) (*ProductSkuResp, error) {
|
||||
req := c.c.NewRequest(c.name, "ShowProductSku.ShowProductSku", in)
|
||||
out := new(ProductSkuResp)
|
||||
err := c.c.Call(ctx, req, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// Server API for ShowProductSku service
|
||||
|
||||
type ShowProductSkuHandler interface {
|
||||
//rpc 服务
|
||||
ShowProductSku(context.Context, *ProductSkuReq, *ProductSkuResp) error
|
||||
}
|
||||
|
||||
func RegisterShowProductSkuHandler(s server.Server, hdlr ShowProductSkuHandler, opts ...server.HandlerOption) error {
|
||||
type showProductSku interface {
|
||||
ShowProductSku(ctx context.Context, in *ProductSkuReq, out *ProductSkuResp) error
|
||||
}
|
||||
type ShowProductSku struct {
|
||||
showProductSku
|
||||
}
|
||||
h := &showProductSkuHandler{hdlr}
|
||||
return s.Handle(s.NewHandler(&ShowProductSku{h}, opts...))
|
||||
}
|
||||
|
||||
type showProductSkuHandler struct {
|
||||
ShowProductSkuHandler
|
||||
}
|
||||
|
||||
func (h *showProductSkuHandler) ShowProductSku(ctx context.Context, in *ProductSkuReq, out *ProductSkuResp) error {
|
||||
return h.ShowProductSkuHandler.ShowProductSku(ctx, in, out)
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/user-service.iml" filepath="$PROJECT_DIR$/.idea/user-service.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="Go" enabled="true" />
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
Loading…
Reference in new issue