Răsfoiți Sursa

Feature bookstore update (#253)

* update bookstore

* update bookstore
songmeizi 4 ani în urmă
părinte
comite
b060867009
26 a modificat fișierele cu 702 adăugiri și 506 ștergeri
  1. 21 25
      example/bookstore/api/bookstore.api
  2. 1 1
      example/bookstore/api/internal/handler/addhandler.go
  3. 1 1
      example/bookstore/api/internal/handler/checkhandler.go
  4. 13 11
      example/bookstore/api/internal/handler/routes.go
  5. 2 1
      example/bookstore/api/internal/logic/checklogic.go
  6. 1 0
      example/bookstore/go.mod
  7. 1 1
      example/bookstore/rpc/add/add.go
  8. 305 0
      example/bookstore/rpc/add/add/add.pb.go
  9. 3 3
      example/bookstore/rpc/add/adder/adder.go
  10. 0 49
      example/bookstore/rpc/add/adder/adder_mock.go
  11. 0 1
      example/bookstore/rpc/add/internal/config/config.go
  12. 1 1
      example/bookstore/rpc/add/internal/logic/addlogic.go
  13. 0 167
      example/bookstore/rpc/add/internal/pb/add.pb.go
  14. 1 1
      example/bookstore/rpc/add/internal/server/adderserver.go
  15. 2 2
      example/bookstore/rpc/add/internal/svc/servicecontext.go
  16. 1 1
      example/bookstore/rpc/check/check.go
  17. 306 0
      example/bookstore/rpc/check/check/check.pb.go
  18. 3 3
      example/bookstore/rpc/check/checker/checker.go
  19. 0 49
      example/bookstore/rpc/check/checker/checker_mock.go
  20. 0 1
      example/bookstore/rpc/check/internal/config/config.go
  21. 1 1
      example/bookstore/rpc/check/internal/logic/checklogic.go
  22. 0 167
      example/bookstore/rpc/check/internal/pb/check.pb.go
  23. 1 1
      example/bookstore/rpc/check/internal/server/checkerserver.go
  24. 2 2
      example/bookstore/rpc/check/internal/svc/servicecontext.go
  25. 36 17
      example/bookstore/rpc/model/bookmodel.go
  26. 0 0
      example/bookstore/rpc/model/vars.go

+ 21 - 25
example/bookstore/api/bookstore.api

@@ -1,33 +1,29 @@
 type (
-    addReq struct {
-        book string `form:"book"`
-        price int64 `form:"price"`
-    }
-
-    addResp struct {
-        ok bool `json:"ok"`
-    }
+	addReq {
+		book string `form:"book"`
+		price int64 `form:"price"`
+	}
+	
+	addResp {
+		ok bool `json:"ok"`
+	}
 )
 
 type (
-    checkReq struct {
-        book string `form:"book"`
-    }
-
-    checkResp struct {
-        found bool `json:"found"`
-        price int64 `json:"price"`
-    }
+	checkReq {
+		book string `form:"book"`
+	}
+	
+	checkResp {
+		found bool `json:"found"`
+		price int64 `json:"price"`
+	}
 )
 
 service bookstore-api {
-    @server(
-        handler: AddHandler
-    )
-    get /add (addReq) returns (addResp)
-
-    @server(
-        handler: CheckHandler
-    )
-    get /check (checkReq) returns (checkResp)
+	@handler AddHandler
+	get /add (addReq) returns (addResp)
+	
+	@handler CheckHandler
+	get /check (checkReq) returns (checkResp)
 }

+ 1 - 1
example/bookstore/api/internal/handler/addhandler.go

@@ -10,7 +10,7 @@ import (
 	"github.com/tal-tech/go-zero/rest/httpx"
 )
 
-func addHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+func AddHandler(ctx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 		var req types.AddReq
 		if err := httpx.Parse(r, &req); err != nil {

+ 1 - 1
example/bookstore/api/internal/handler/checkhandler.go

@@ -10,7 +10,7 @@ import (
 	"github.com/tal-tech/go-zero/rest/httpx"
 )
 
-func checkHandler(ctx *svc.ServiceContext) http.HandlerFunc {
+func CheckHandler(ctx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
 		var req types.CheckReq
 		if err := httpx.Parse(r, &req); err != nil {

+ 13 - 11
example/bookstore/api/internal/handler/routes.go

@@ -10,16 +10,18 @@ import (
 )
 
 func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
-	engine.AddRoutes([]rest.Route{
-		{
-			Method:  http.MethodGet,
-			Path:    "/add",
-			Handler: addHandler(serverCtx),
+	engine.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodGet,
+				Path:    "/add",
+				Handler: AddHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodGet,
+				Path:    "/check",
+				Handler: CheckHandler(serverCtx),
+			},
 		},
-		{
-			Method:  http.MethodGet,
-			Path:    "/check",
-			Handler: checkHandler(serverCtx),
-		},
-	})
+	)
 }

+ 2 - 1
example/bookstore/api/internal/logic/checklogic.go

@@ -29,7 +29,8 @@ func (l *CheckLogic) Check(req types.CheckReq) (*types.CheckResp, error) {
 		Book: req.Book,
 	})
 	if err != nil {
-		return nil, err
+		logx.Error(err)
+		return &types.CheckResp{}, err
 	}
 
 	return &types.CheckResp{

+ 1 - 0
example/bookstore/go.mod

@@ -8,4 +8,5 @@ require (
 	github.com/tal-tech/go-zero v1.0.27
 	golang.org/x/net v0.0.0-20200707034311-ab3426394381
 	google.golang.org/grpc v1.29.1
+	google.golang.org/protobuf v1.25.0
 )

+ 1 - 1
example/bookstore/rpc/add/add.go

@@ -7,8 +7,8 @@ import (
 	"flag"
 	"fmt"
 
+	"bookstore/rpc/add/add"
 	"bookstore/rpc/add/internal/config"
-	add "bookstore/rpc/add/internal/pb"
 	"bookstore/rpc/add/internal/server"
 	"bookstore/rpc/add/internal/svc"
 

+ 305 - 0
example/bookstore/rpc/add/add/add.pb.go

@@ -0,0 +1,305 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.25.0
+// 	protoc        v3.14.0
+// source: add.proto
+
+package add
+
+import (
+	context "context"
+	proto "github.com/golang/protobuf/proto"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type AddReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Book  string `protobuf:"bytes,1,opt,name=book,proto3" json:"book,omitempty"`
+	Price int64  `protobuf:"varint,2,opt,name=price,proto3" json:"price,omitempty"`
+}
+
+func (x *AddReq) Reset() {
+	*x = AddReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_add_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddReq) ProtoMessage() {}
+
+func (x *AddReq) ProtoReflect() protoreflect.Message {
+	mi := &file_add_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddReq.ProtoReflect.Descriptor instead.
+func (*AddReq) Descriptor() ([]byte, []int) {
+	return file_add_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *AddReq) GetBook() string {
+	if x != nil {
+		return x.Book
+	}
+	return ""
+}
+
+func (x *AddReq) GetPrice() int64 {
+	if x != nil {
+		return x.Price
+	}
+	return 0
+}
+
+type AddResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"`
+}
+
+func (x *AddResp) Reset() {
+	*x = AddResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_add_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AddResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AddResp) ProtoMessage() {}
+
+func (x *AddResp) ProtoReflect() protoreflect.Message {
+	mi := &file_add_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AddResp.ProtoReflect.Descriptor instead.
+func (*AddResp) Descriptor() ([]byte, []int) {
+	return file_add_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *AddResp) GetOk() bool {
+	if x != nil {
+		return x.Ok
+	}
+	return false
+}
+
+var File_add_proto protoreflect.FileDescriptor
+
+var file_add_proto_rawDesc = []byte{
+	0x0a, 0x09, 0x61, 0x64, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x64, 0x64,
+	0x22, 0x32, 0x0a, 0x06, 0x61, 0x64, 0x64, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f,
+	0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x14,
+	0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70,
+	0x72, 0x69, 0x63, 0x65, 0x22, 0x19, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12,
+	0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x32,
+	0x29, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x12,
+	0x0b, 0x2e, 0x61, 0x64, 0x64, 0x2e, 0x61, 0x64, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x0c, 0x2e, 0x61,
+	0x64, 0x64, 0x2e, 0x61, 0x64, 0x64, 0x52, 0x65, 0x73, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x33,
+}
+
+var (
+	file_add_proto_rawDescOnce sync.Once
+	file_add_proto_rawDescData = file_add_proto_rawDesc
+)
+
+func file_add_proto_rawDescGZIP() []byte {
+	file_add_proto_rawDescOnce.Do(func() {
+		file_add_proto_rawDescData = protoimpl.X.CompressGZIP(file_add_proto_rawDescData)
+	})
+	return file_add_proto_rawDescData
+}
+
+var file_add_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_add_proto_goTypes = []interface{}{
+	(*AddReq)(nil),  // 0: add.addReq
+	(*AddResp)(nil), // 1: add.addResp
+}
+var file_add_proto_depIdxs = []int32{
+	0, // 0: add.adder.add:input_type -> add.addReq
+	1, // 1: add.adder.add:output_type -> add.addResp
+	1, // [1:2] is the sub-list for method output_type
+	0, // [0:1] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_add_proto_init() }
+func file_add_proto_init() {
+	if File_add_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_add_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AddReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_add_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AddResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_add_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_add_proto_goTypes,
+		DependencyIndexes: file_add_proto_depIdxs,
+		MessageInfos:      file_add_proto_msgTypes,
+	}.Build()
+	File_add_proto = out.File
+	file_add_proto_rawDesc = nil
+	file_add_proto_goTypes = nil
+	file_add_proto_depIdxs = nil
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// AdderClient is the client API for Adder service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type AdderClient interface {
+	Add(ctx context.Context, in *AddReq, opts ...grpc.CallOption) (*AddResp, error)
+}
+
+type adderClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewAdderClient(cc grpc.ClientConnInterface) AdderClient {
+	return &adderClient{cc}
+}
+
+func (c *adderClient) Add(ctx context.Context, in *AddReq, opts ...grpc.CallOption) (*AddResp, error) {
+	out := new(AddResp)
+	err := c.cc.Invoke(ctx, "/add.adder/add", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// AdderServer is the server API for Adder service.
+type AdderServer interface {
+	Add(context.Context, *AddReq) (*AddResp, error)
+}
+
+// UnimplementedAdderServer can be embedded to have forward compatible implementations.
+type UnimplementedAdderServer struct {
+}
+
+func (*UnimplementedAdderServer) Add(context.Context, *AddReq) (*AddResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Add not implemented")
+}
+
+func RegisterAdderServer(s *grpc.Server, srv AdderServer) {
+	s.RegisterService(&_Adder_serviceDesc, srv)
+}
+
+func _Adder_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(AddReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(AdderServer).Add(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/add.adder/Add",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(AdderServer).Add(ctx, req.(*AddReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Adder_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "add.adder",
+	HandlerType: (*AdderServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "add",
+			Handler:    _Adder_Add_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "add.proto",
+}

+ 3 - 3
example/bookstore/rpc/add/adder/adder.go

@@ -8,7 +8,7 @@ package adder
 import (
 	"context"
 
-	add "bookstore/rpc/add/internal/pb"
+	"bookstore/rpc/add/add"
 
 	"github.com/tal-tech/go-zero/zrpc"
 )
@@ -33,6 +33,6 @@ func NewAdder(cli zrpc.Client) Adder {
 }
 
 func (m *defaultAdder) Add(ctx context.Context, in *AddReq) (*AddResp, error) {
-	adder := add.NewAdderClient(m.cli.Conn())
-	return adder.Add(ctx, in)
+	client := add.NewAdderClient(m.cli.Conn())
+	return client.Add(ctx, in)
 }

+ 0 - 49
example/bookstore/rpc/add/adder/adder_mock.go

@@ -1,49 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: adder.go
-
-// Package adder is a generated GoMock package.
-package adder
-
-import (
-	context "context"
-	gomock "github.com/golang/mock/gomock"
-	reflect "reflect"
-)
-
-// MockAdder is a mock of Adder interface
-type MockAdder struct {
-	ctrl     *gomock.Controller
-	recorder *MockAdderMockRecorder
-}
-
-// MockAdderMockRecorder is the mock recorder for MockAdder
-type MockAdderMockRecorder struct {
-	mock *MockAdder
-}
-
-// NewMockAdder creates a new mock instance
-func NewMockAdder(ctrl *gomock.Controller) *MockAdder {
-	mock := &MockAdder{ctrl: ctrl}
-	mock.recorder = &MockAdderMockRecorder{mock}
-	return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use
-func (m *MockAdder) EXPECT() *MockAdderMockRecorder {
-	return m.recorder
-}
-
-// Add mocks base method
-func (m *MockAdder) Add(ctx context.Context, in *AddReq) (*AddResp, error) {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "Add", ctx, in)
-	ret0, _ := ret[0].(*AddResp)
-	ret1, _ := ret[1].(error)
-	return ret0, ret1
-}
-
-// Add indicates an expected call of Add
-func (mr *MockAdderMockRecorder) Add(ctx, in interface{}) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Add", reflect.TypeOf((*MockAdder)(nil).Add), ctx, in)
-}

+ 0 - 1
example/bookstore/rpc/add/internal/config/config.go

@@ -8,6 +8,5 @@ import (
 type Config struct {
 	zrpc.RpcServerConf
 	DataSource string
-	Table      string
 	Cache      cache.CacheConf
 }

+ 1 - 1
example/bookstore/rpc/add/internal/logic/addlogic.go

@@ -3,7 +3,7 @@ package logic
 import (
 	"context"
 
-	add "bookstore/rpc/add/internal/pb"
+	add "bookstore/rpc/add/adder"
 	"bookstore/rpc/add/internal/svc"
 	"bookstore/rpc/model"
 

+ 0 - 167
example/bookstore/rpc/add/internal/pb/add.pb.go

@@ -1,167 +0,0 @@
-// Code generated by protoc-gen-go.
-// source: add.proto
-// DO NOT EDIT!
-
-/*
-Package add is a generated protocol buffer package.
-
-It is generated from these files:
-	add.proto
-
-It has these top-level messages:
-	AddReq
-	AddResp
-*/
-package add
-
-import (
-	"fmt"
-	"math"
-
-	"github.com/golang/protobuf/proto"
-	"golang.org/x/net/context"
-	"google.golang.org/grpc"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
-
-type AddReq struct {
-	Book  string `protobuf:"bytes,1,opt,name=book" json:"book,omitempty"`
-	Price int64  `protobuf:"varint,2,opt,name=price" json:"price,omitempty"`
-}
-
-func (m *AddReq) Reset()                    { *m = AddReq{} }
-func (m *AddReq) String() string            { return proto.CompactTextString(m) }
-func (*AddReq) ProtoMessage()               {}
-func (*AddReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
-
-func (m *AddReq) GetBook() string {
-	if m != nil {
-		return m.Book
-	}
-	return ""
-}
-
-func (m *AddReq) GetPrice() int64 {
-	if m != nil {
-		return m.Price
-	}
-	return 0
-}
-
-type AddResp struct {
-	Ok bool `protobuf:"varint,1,opt,name=ok" json:"ok,omitempty"`
-}
-
-func (m *AddResp) Reset()                    { *m = AddResp{} }
-func (m *AddResp) String() string            { return proto.CompactTextString(m) }
-func (*AddResp) ProtoMessage()               {}
-func (*AddResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
-
-func (m *AddResp) GetOk() bool {
-	if m != nil {
-		return m.Ok
-	}
-	return false
-}
-
-func init() {
-	proto.RegisterType((*AddReq)(nil), "add.addReq")
-	proto.RegisterType((*AddResp)(nil), "add.addResp")
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
-
-// Client API for Adder service
-
-type AdderClient interface {
-	Add(ctx context.Context, in *AddReq, opts ...grpc.CallOption) (*AddResp, error)
-}
-
-type adderClient struct {
-	cc *grpc.ClientConn
-}
-
-func NewAdderClient(cc *grpc.ClientConn) AdderClient {
-	return &adderClient{cc}
-}
-
-func (c *adderClient) Add(ctx context.Context, in *AddReq, opts ...grpc.CallOption) (*AddResp, error) {
-	out := new(AddResp)
-	err := grpc.Invoke(ctx, "/add.adder/add", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// Server API for Adder service
-
-type AdderServer interface {
-	Add(context.Context, *AddReq) (*AddResp, error)
-}
-
-func RegisterAdderServer(s *grpc.Server, srv AdderServer) {
-	s.RegisterService(&_Adder_serviceDesc, srv)
-}
-
-func _Adder_Add_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(AddReq)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(AdderServer).Add(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/add.adder/Add",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(AdderServer).Add(ctx, req.(*AddReq))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
-var _Adder_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "add.adder",
-	HandlerType: (*AdderServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "add",
-			Handler:    _Adder_Add_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "add.proto",
-}
-
-func init() { proto.RegisterFile("add.proto", fileDescriptor0) }
-
-var fileDescriptor0 = []byte{
-	// 136 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4c, 0x4c, 0x49, 0xd1,
-	0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e, 0x4c, 0x49, 0x51, 0x32, 0xe2, 0x62, 0x4b, 0x4c,
-	0x49, 0x09, 0x4a, 0x2d, 0x14, 0x12, 0xe2, 0x62, 0x49, 0xca, 0xcf, 0xcf, 0x96, 0x60, 0x54, 0x60,
-	0xd4, 0xe0, 0x0c, 0x02, 0xb3, 0x85, 0x44, 0xb8, 0x58, 0x0b, 0x8a, 0x32, 0x93, 0x53, 0x25, 0x98,
-	0x14, 0x18, 0x35, 0x98, 0x83, 0x20, 0x1c, 0x25, 0x49, 0x2e, 0x76, 0xb0, 0x9e, 0xe2, 0x02, 0x21,
-	0x3e, 0x2e, 0x26, 0xa8, 0x16, 0x8e, 0x20, 0xa6, 0xfc, 0x6c, 0x23, 0x4d, 0x2e, 0xd6, 0xc4, 0x94,
-	0x94, 0xd4, 0x22, 0x21, 0x05, 0x2e, 0x90, 0xf1, 0x42, 0xdc, 0x7a, 0x20, 0xfb, 0x20, 0x36, 0x48,
-	0xf1, 0x20, 0x38, 0xc5, 0x05, 0x49, 0x6c, 0x60, 0x57, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff,
-	0xe2, 0x6d, 0xb5, 0x91, 0x92, 0x00, 0x00, 0x00,
-}

+ 1 - 1
example/bookstore/rpc/add/internal/server/adderserver.go

@@ -6,8 +6,8 @@ package server
 import (
 	"context"
 
+	"bookstore/rpc/add/add"
 	"bookstore/rpc/add/internal/logic"
-	add "bookstore/rpc/add/internal/pb"
 	"bookstore/rpc/add/internal/svc"
 )
 

+ 2 - 2
example/bookstore/rpc/add/internal/svc/servicecontext.go

@@ -9,12 +9,12 @@ import (
 
 type ServiceContext struct {
 	c     config.Config
-	Model *model.BookModel
+	Model model.BookModel
 }
 
 func NewServiceContext(c config.Config) *ServiceContext {
 	return &ServiceContext{
 		c:     c,
-		Model: model.NewBookModel(sqlx.NewMysql(c.DataSource), c.Cache, c.Table),
+		Model: model.NewBookModel(sqlx.NewMysql(c.DataSource), c.Cache),
 	}
 }

+ 1 - 1
example/bookstore/rpc/check/check.go

@@ -7,8 +7,8 @@ import (
 	"flag"
 	"fmt"
 
+	"bookstore/rpc/check/check"
 	"bookstore/rpc/check/internal/config"
-	check "bookstore/rpc/check/internal/pb"
 	"bookstore/rpc/check/internal/server"
 	"bookstore/rpc/check/internal/svc"
 

+ 306 - 0
example/bookstore/rpc/check/check/check.pb.go

@@ -0,0 +1,306 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.25.0
+// 	protoc        v3.14.0
+// source: check.proto
+
+package check
+
+import (
+	context "context"
+	proto "github.com/golang/protobuf/proto"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+)
+
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type CheckReq struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Book string `protobuf:"bytes,1,opt,name=book,proto3" json:"book,omitempty"`
+}
+
+func (x *CheckReq) Reset() {
+	*x = CheckReq{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_check_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CheckReq) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CheckReq) ProtoMessage() {}
+
+func (x *CheckReq) ProtoReflect() protoreflect.Message {
+	mi := &file_check_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CheckReq.ProtoReflect.Descriptor instead.
+func (*CheckReq) Descriptor() ([]byte, []int) {
+	return file_check_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CheckReq) GetBook() string {
+	if x != nil {
+		return x.Book
+	}
+	return ""
+}
+
+type CheckResp struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Found bool  `protobuf:"varint,1,opt,name=found,proto3" json:"found,omitempty"`
+	Price int64 `protobuf:"varint,2,opt,name=price,proto3" json:"price,omitempty"`
+}
+
+func (x *CheckResp) Reset() {
+	*x = CheckResp{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_check_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *CheckResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CheckResp) ProtoMessage() {}
+
+func (x *CheckResp) ProtoReflect() protoreflect.Message {
+	mi := &file_check_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use CheckResp.ProtoReflect.Descriptor instead.
+func (*CheckResp) Descriptor() ([]byte, []int) {
+	return file_check_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *CheckResp) GetFound() bool {
+	if x != nil {
+		return x.Found
+	}
+	return false
+}
+
+func (x *CheckResp) GetPrice() int64 {
+	if x != nil {
+		return x.Price
+	}
+	return 0
+}
+
+var File_check_proto protoreflect.FileDescriptor
+
+var file_check_proto_rawDesc = []byte{
+	0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x63,
+	0x68, 0x65, 0x63, 0x6b, 0x22, 0x1e, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71,
+	0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x62, 0x6f, 0x6f, 0x6b, 0x22, 0x37, 0x0a, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73,
+	0x70, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
+	0x52, 0x05, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x32, 0x35, 0x0a,
+	0x07, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x63, 0x68, 0x65, 0x63,
+	0x6b, 0x12, 0x0f, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52,
+	0x65, 0x71, 0x1a, 0x10, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x63, 0x68, 0x65, 0x63, 0x6b,
+	0x52, 0x65, 0x73, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_check_proto_rawDescOnce sync.Once
+	file_check_proto_rawDescData = file_check_proto_rawDesc
+)
+
+func file_check_proto_rawDescGZIP() []byte {
+	file_check_proto_rawDescOnce.Do(func() {
+		file_check_proto_rawDescData = protoimpl.X.CompressGZIP(file_check_proto_rawDescData)
+	})
+	return file_check_proto_rawDescData
+}
+
+var file_check_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_check_proto_goTypes = []interface{}{
+	(*CheckReq)(nil),  // 0: check.checkReq
+	(*CheckResp)(nil), // 1: check.checkResp
+}
+var file_check_proto_depIdxs = []int32{
+	0, // 0: check.checker.check:input_type -> check.checkReq
+	1, // 1: check.checker.check:output_type -> check.checkResp
+	1, // [1:2] is the sub-list for method output_type
+	0, // [0:1] is the sub-list for method input_type
+	0, // [0:0] is the sub-list for extension type_name
+	0, // [0:0] is the sub-list for extension extendee
+	0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_check_proto_init() }
+func file_check_proto_init() {
+	if File_check_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_check_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CheckReq); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_check_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*CheckResp); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_check_proto_rawDesc,
+			NumEnums:      0,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   1,
+		},
+		GoTypes:           file_check_proto_goTypes,
+		DependencyIndexes: file_check_proto_depIdxs,
+		MessageInfos:      file_check_proto_msgTypes,
+	}.Build()
+	File_check_proto = out.File
+	file_check_proto_rawDesc = nil
+	file_check_proto_goTypes = nil
+	file_check_proto_depIdxs = nil
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// CheckerClient is the client API for Checker service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type CheckerClient interface {
+	Check(ctx context.Context, in *CheckReq, opts ...grpc.CallOption) (*CheckResp, error)
+}
+
+type checkerClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewCheckerClient(cc grpc.ClientConnInterface) CheckerClient {
+	return &checkerClient{cc}
+}
+
+func (c *checkerClient) Check(ctx context.Context, in *CheckReq, opts ...grpc.CallOption) (*CheckResp, error) {
+	out := new(CheckResp)
+	err := c.cc.Invoke(ctx, "/check.checker/check", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// CheckerServer is the server API for Checker service.
+type CheckerServer interface {
+	Check(context.Context, *CheckReq) (*CheckResp, error)
+}
+
+// UnimplementedCheckerServer can be embedded to have forward compatible implementations.
+type UnimplementedCheckerServer struct {
+}
+
+func (*UnimplementedCheckerServer) Check(context.Context, *CheckReq) (*CheckResp, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
+}
+
+func RegisterCheckerServer(s *grpc.Server, srv CheckerServer) {
+	s.RegisterService(&_Checker_serviceDesc, srv)
+}
+
+func _Checker_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(CheckReq)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(CheckerServer).Check(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/check.checker/Check",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(CheckerServer).Check(ctx, req.(*CheckReq))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _Checker_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "check.checker",
+	HandlerType: (*CheckerServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "check",
+			Handler:    _Checker_Check_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "check.proto",
+}

+ 3 - 3
example/bookstore/rpc/check/checker/checker.go

@@ -8,7 +8,7 @@ package checker
 import (
 	"context"
 
-	check "bookstore/rpc/check/internal/pb"
+	"bookstore/rpc/check/check"
 
 	"github.com/tal-tech/go-zero/zrpc"
 )
@@ -33,6 +33,6 @@ func NewChecker(cli zrpc.Client) Checker {
 }
 
 func (m *defaultChecker) Check(ctx context.Context, in *CheckReq) (*CheckResp, error) {
-	checker := check.NewCheckerClient(m.cli.Conn())
-	return checker.Check(ctx, in)
+	client := check.NewCheckerClient(m.cli.Conn())
+	return client.Check(ctx, in)
 }

+ 0 - 49
example/bookstore/rpc/check/checker/checker_mock.go

@@ -1,49 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: checker.go
-
-// Package checker is a generated GoMock package.
-package checker
-
-import (
-	context "context"
-	gomock "github.com/golang/mock/gomock"
-	reflect "reflect"
-)
-
-// MockChecker is a mock of Checker interface
-type MockChecker struct {
-	ctrl     *gomock.Controller
-	recorder *MockCheckerMockRecorder
-}
-
-// MockCheckerMockRecorder is the mock recorder for MockChecker
-type MockCheckerMockRecorder struct {
-	mock *MockChecker
-}
-
-// NewMockChecker creates a new mock instance
-func NewMockChecker(ctrl *gomock.Controller) *MockChecker {
-	mock := &MockChecker{ctrl: ctrl}
-	mock.recorder = &MockCheckerMockRecorder{mock}
-	return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use
-func (m *MockChecker) EXPECT() *MockCheckerMockRecorder {
-	return m.recorder
-}
-
-// Check mocks base method
-func (m *MockChecker) Check(ctx context.Context, in *CheckReq) (*CheckResp, error) {
-	m.ctrl.T.Helper()
-	ret := m.ctrl.Call(m, "Check", ctx, in)
-	ret0, _ := ret[0].(*CheckResp)
-	ret1, _ := ret[1].(error)
-	return ret0, ret1
-}
-
-// Check indicates an expected call of Check
-func (mr *MockCheckerMockRecorder) Check(ctx, in interface{}) *gomock.Call {
-	mr.mock.ctrl.T.Helper()
-	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Check", reflect.TypeOf((*MockChecker)(nil).Check), ctx, in)
-}

+ 0 - 1
example/bookstore/rpc/check/internal/config/config.go

@@ -8,6 +8,5 @@ import (
 type Config struct {
 	zrpc.RpcServerConf
 	DataSource string
-	Table      string
 	Cache      cache.CacheConf
 }

+ 1 - 1
example/bookstore/rpc/check/internal/logic/checklogic.go

@@ -3,7 +3,7 @@ package logic
 import (
 	"context"
 
-	check "bookstore/rpc/check/internal/pb"
+	check "bookstore/rpc/check/checker"
 	"bookstore/rpc/check/internal/svc"
 
 	"github.com/tal-tech/go-zero/core/logx"

+ 0 - 167
example/bookstore/rpc/check/internal/pb/check.pb.go

@@ -1,167 +0,0 @@
-// Code generated by protoc-gen-go.
-// source: check.proto
-// DO NOT EDIT!
-
-/*
-Package check is a generated protocol buffer package.
-
-It is generated from these files:
-	check.proto
-
-It has these top-level messages:
-	CheckReq
-	CheckResp
-*/
-package check
-
-import (
-	"fmt"
-	"math"
-
-	"github.com/golang/protobuf/proto"
-	"golang.org/x/net/context"
-	"google.golang.org/grpc"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
-
-type CheckReq struct {
-	Book string `protobuf:"bytes,1,opt,name=book" json:"book,omitempty"`
-}
-
-func (m *CheckReq) Reset()                    { *m = CheckReq{} }
-func (m *CheckReq) String() string            { return proto.CompactTextString(m) }
-func (*CheckReq) ProtoMessage()               {}
-func (*CheckReq) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
-
-func (m *CheckReq) GetBook() string {
-	if m != nil {
-		return m.Book
-	}
-	return ""
-}
-
-type CheckResp struct {
-	Found bool  `protobuf:"varint,1,opt,name=found" json:"found,omitempty"`
-	Price int64 `protobuf:"varint,2,opt,name=price" json:"price,omitempty"`
-}
-
-func (m *CheckResp) Reset()                    { *m = CheckResp{} }
-func (m *CheckResp) String() string            { return proto.CompactTextString(m) }
-func (*CheckResp) ProtoMessage()               {}
-func (*CheckResp) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
-
-func (m *CheckResp) GetFound() bool {
-	if m != nil {
-		return m.Found
-	}
-	return false
-}
-
-func (m *CheckResp) GetPrice() int64 {
-	if m != nil {
-		return m.Price
-	}
-	return 0
-}
-
-func init() {
-	proto.RegisterType((*CheckReq)(nil), "check.checkReq")
-	proto.RegisterType((*CheckResp)(nil), "check.checkResp")
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
-
-// Client API for Checker service
-
-type CheckerClient interface {
-	Check(ctx context.Context, in *CheckReq, opts ...grpc.CallOption) (*CheckResp, error)
-}
-
-type checkerClient struct {
-	cc *grpc.ClientConn
-}
-
-func NewCheckerClient(cc *grpc.ClientConn) CheckerClient {
-	return &checkerClient{cc}
-}
-
-func (c *checkerClient) Check(ctx context.Context, in *CheckReq, opts ...grpc.CallOption) (*CheckResp, error) {
-	out := new(CheckResp)
-	err := grpc.Invoke(ctx, "/check.checker/check", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// Server API for Checker service
-
-type CheckerServer interface {
-	Check(context.Context, *CheckReq) (*CheckResp, error)
-}
-
-func RegisterCheckerServer(s *grpc.Server, srv CheckerServer) {
-	s.RegisterService(&_Checker_serviceDesc, srv)
-}
-
-func _Checker_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(CheckReq)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(CheckerServer).Check(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/check.checker/Check",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(CheckerServer).Check(ctx, req.(*CheckReq))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
-var _Checker_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "check.checker",
-	HandlerType: (*CheckerServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "check",
-			Handler:    _Checker_Check_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "check.proto",
-}
-
-func init() { proto.RegisterFile("check.proto", fileDescriptor0) }
-
-var fileDescriptor0 = []byte{
-	// 136 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0xce, 0x48, 0x4d,
-	0xce, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x05, 0x73, 0x94, 0xe4, 0xb8, 0x38, 0xc0,
-	0x8c, 0xa0, 0xd4, 0x42, 0x21, 0x21, 0x2e, 0x96, 0xa4, 0xfc, 0xfc, 0x6c, 0x09, 0x46, 0x05, 0x46,
-	0x0d, 0xce, 0x20, 0x30, 0x5b, 0xc9, 0x9c, 0x8b, 0x13, 0x2a, 0x5f, 0x5c, 0x20, 0x24, 0xc2, 0xc5,
-	0x9a, 0x96, 0x5f, 0x9a, 0x97, 0x02, 0x56, 0xc1, 0x11, 0x04, 0xe1, 0x80, 0x44, 0x0b, 0x8a, 0x32,
-	0x93, 0x53, 0x25, 0x98, 0x14, 0x18, 0x35, 0x98, 0x83, 0x20, 0x1c, 0x23, 0x53, 0x2e, 0x76, 0xb0,
-	0xc6, 0xd4, 0x22, 0x21, 0x2d, 0x2e, 0x88, 0x65, 0x42, 0xfc, 0x7a, 0x10, 0x17, 0xc0, 0x6c, 0x94,
-	0x12, 0x40, 0x15, 0x28, 0x2e, 0x48, 0x62, 0x03, 0xbb, 0xce, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff,
-	0x6e, 0x6f, 0xa7, 0x1d, 0xac, 0x00, 0x00, 0x00,
-}

+ 1 - 1
example/bookstore/rpc/check/internal/server/checkerserver.go

@@ -6,8 +6,8 @@ package server
 import (
 	"context"
 
+	"bookstore/rpc/check/check"
 	"bookstore/rpc/check/internal/logic"
-	check "bookstore/rpc/check/internal/pb"
 	"bookstore/rpc/check/internal/svc"
 )
 

+ 2 - 2
example/bookstore/rpc/check/internal/svc/servicecontext.go

@@ -9,12 +9,12 @@ import (
 
 type ServiceContext struct {
 	c     config.Config
-	Model *model.BookModel
+	Model model.BookModel
 }
 
 func NewServiceContext(c config.Config) *ServiceContext {
 	return &ServiceContext{
 		c:     c,
-		Model: model.NewBookModel(sqlx.NewMysql(c.DataSource), c.Cache, c.Table),
+		Model: model.NewBookModel(sqlx.NewMysql(c.DataSource), c.Cache),
 	}
 }

+ 36 - 17
example/bookstore/rpc/model/bookmodel.go

@@ -18,11 +18,18 @@ var (
 	bookRowsExpectAutoSet   = strings.Join(stringx.Remove(bookFieldNames, "create_time", "update_time"), ",")
 	bookRowsWithPlaceHolder = strings.Join(stringx.Remove(bookFieldNames, "book", "create_time", "update_time"), "=?,") + "=?"
 
-	bookPrefix = "cache#Book#book#"
+	cacheBookPrefix = "cache#Book#book#"
 )
 
 type (
-	BookModel struct {
+	BookModel interface {
+		Insert(data Book) (sql.Result, error)
+		FindOne(book string) (*Book, error)
+		Update(data Book) error
+		Delete(book string) error
+	}
+
+	defaultBookModel struct {
 		sqlc.CachedConn
 		table string
 	}
@@ -33,23 +40,25 @@ type (
 	}
 )
 
-func NewBookModel(conn sqlx.SqlConn, c cache.CacheConf, table string) *BookModel {
-	return &BookModel{
+func NewBookModel(conn sqlx.SqlConn, c cache.CacheConf) BookModel {
+	return &defaultBookModel{
 		CachedConn: sqlc.NewConn(conn, c),
-		table:      table,
+		table:      "book",
 	}
 }
 
-func (m *BookModel) Insert(data Book) (sql.Result, error) {
-	query := `insert into ` + m.table + ` (` + bookRowsExpectAutoSet + `) values (?, ?)`
-	return m.ExecNoCache(query, data.Book, data.Price)
+func (m *defaultBookModel) Insert(data Book) (sql.Result, error) {
+	query := fmt.Sprintf("insert into %s (%s) values (?, ?)", m.table, bookRowsExpectAutoSet)
+	ret, err := m.ExecNoCache(query, data.Book, data.Price)
+
+	return ret, err
 }
 
-func (m *BookModel) FindOne(book string) (*Book, error) {
-	bookKey := fmt.Sprintf("%s%v", bookPrefix, book)
+func (m *defaultBookModel) FindOne(book string) (*Book, error) {
+	bookKey := fmt.Sprintf("%s%v", cacheBookPrefix, book)
 	var resp Book
 	err := m.QueryRow(&resp, bookKey, func(conn sqlx.SqlConn, v interface{}) error {
-		query := `select ` + bookRows + ` from ` + m.table + ` where book = ? limit 1`
+		query := fmt.Sprintf("select %s from %s where book = ? limit 1", bookRows, m.table)
 		return conn.QueryRow(v, query, book)
 	})
 	switch err {
@@ -62,20 +71,30 @@ func (m *BookModel) FindOne(book string) (*Book, error) {
 	}
 }
 
-func (m *BookModel) Update(data Book) error {
-	bookKey := fmt.Sprintf("%s%v", bookPrefix, data.Book)
+func (m *defaultBookModel) Update(data Book) error {
+	bookKey := fmt.Sprintf("%s%v", cacheBookPrefix, data.Book)
 	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
-		query := `update ` + m.table + ` set ` + bookRowsWithPlaceHolder + ` where book = ?`
+		query := fmt.Sprintf("update %s set %s where book = ?", m.table, bookRowsWithPlaceHolder)
 		return conn.Exec(query, data.Price, data.Book)
 	}, bookKey)
 	return err
 }
 
-func (m *BookModel) Delete(book string) error {
-	bookKey := fmt.Sprintf("%s%v", bookPrefix, book)
+func (m *defaultBookModel) Delete(book string) error {
+
+	bookKey := fmt.Sprintf("%s%v", cacheBookPrefix, book)
 	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
-		query := `delete from ` + m.table + ` where book = ?`
+		query := fmt.Sprintf("delete from %s where book = ?", m.table)
 		return conn.Exec(query, book)
 	}, bookKey)
 	return err
 }
+
+func (m *defaultBookModel) formatPrimary(primary interface{}) string {
+	return fmt.Sprintf("%s%v", cacheBookPrefix, primary)
+}
+
+func (m *defaultBookModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
+	query := fmt.Sprintf("select %s from %s where book = ? limit 1", bookRows, m.table)
+	return conn.QueryRow(v, query, primary)
+}

+ 0 - 0
example/bookstore/rpc/model/vars.go