// server.go package main import ( "context" "go-micro.dev/v4/errors" "log" "time" "go-micro.dev/v4" "go-micro.dev/v4/registry" "go.etcd.io/etcd/client/v3" ) // 定义请求和响应结构体 type LoginRequest struct { Username string Password string } type LoginResponse struct { Token string } // UserService 实现 type UserService struct{} func (u *UserService) Login(ctx context.Context, req *LoginRequest, rsp *LoginResponse) error { if req.Username == "admin" && req.Password == "123456" { rsp.Token = "abc123" return nil // 返回 nil 表示成功 } return errors.New("登录失败", "失败", 500) // 返回 error 表示失败 } func main() { // 1. 创建原生 etcd 客户端 etcdClient, err := clientv3.New(clientv3.Config{ Endpoints: []string{"127.0.0.1:2379"}, DialTimeout: 5 * time.Second, }) if err != nil { log.Fatal("创建 etcd 客户端失败:", err) } defer etcdClient.Close() // 2. 创建自定义的 etcd 注册中心 reg := registry.NewRegistry( registry.Addrs("127.0.0.1:2379"), registry.Timeout(5*time.Second), // 这里可以添加更多自定义配置 ) // 3. 创建微服务实例 service := micro.NewService( micro.Name("user.service"), micro.Registry(reg), // 注入 etcd 客户端 micro.BeforeStart(func() error { return etcdClient.Sync(context.Background()) }), ) // 4. 初始化服务 service.Init() // 5. 注册服务处理器 if err := micro.RegisterHandler(service.Server(), new(UserService)); err != nil { log.Fatal("注册服务处理器失败:", err) } // 6. 启动服务 if err := service.Run(); err != nil { log.Fatal("服务启动失败:", err) } }