go get -u -v github.com/micro/go-micro
执行后如果出现:
# github.com/lucas-clemente/quic-go/internal/handshake
..\..\..\..\pkg\mod\github.com\coreos\etcd@v3.3.25+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:114:78: undefined: resolver.BuildOption
..\..\..\..\pkg\mod\github.com\coreos\etcd@v3.3.25+incompatible\clientv3\balancer\resolver\endpoint\endpoint.go:182:31: undefined: resolver.ResolveNowOption
# github.com/coreos/etcd/clientv3/balancer/picker
..\..\..\..\pkg\mod\github.com\coreos\etcd@v3.3.25+incompatible\clientv3\balancer\picker\roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
# github.com/micro/go-micro/transport/quic
..\..\..\..\pkg\mod\github.com\micro\go-micro@v1.18.0\transport\quic\quic.go:54:12: q.s.Close undefined (type quic.Session has no field or method Close)
..\..\..\..\pkg\mod\github.com\micro\go-micro@v1.18.0\transport\quic\quic.go:121:3: unknown field 'IdleTimeout' in struct literal of type quic.Config
则在go.mod中添加
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
replace github.com/lucas-clemente/quic-go => github.com/lucas-clemente/quic-go v0.14.1
然后再
go mod download
package main
import (
"net/http"
"github.com/micro/go-micro/web"
)
func main() {
// go-micro版HTTP服务
server := web.NewService(web.Address(":8001"))
server.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("hello world"))
})
server.Run()
}
go get -u github.com/gin-gonic/gin
package main
import (
"github.com/gin-gonic/gin"
"github.com/micro/go-micro/web"
)
// go-micro结合gin提供服务
func main() {
ginRouter := gin.Default()
ginRouter.Handle("GET", "/user", func(context *gin.Context) {
context.String(200, "user api")
})
ginRouter.Handle("GET", "/news", func(context *gin.Context) {
context.String(200, "new api")
})
server := web.NewService(web.Address(":8001"), web.Handler(ginRouter))
server.Run()
}
把服务注册到conssul
package main
import (
"github.com/gin-gonic/gin"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/registry/consul"
"github.com/micro/go-micro/web"
)
func main() {
consulReg := consul.NewRegistry(
registry.Addrs("consulIP:8500"),
)
ginRouter := gin.Default()
ginRouter.Handle("GET", "/user", func(context *gin.Context) {
context.String(200, "user api")
})
ginRouter.Handle("GET", "/news", func(context *gin.Context) {
context.String(200, "new api")
})
server := web.NewService(
web.Name("product"), // 服务名
web.Address(":8001"),
web.Handler(ginRouter),
web.Registry(consulReg), // 注册服务到consul
)
server.Run()
}
consul agent -server -bootstrap -ui -client 0.0.0.0 -data-dir D:\work\consul_data # -data-dir数据存放路径
如果启动consul出现 ==> Multiple private IPv4 addresses found. Please configure one with ‘bind’ and/or ‘advertise’.
则添加-bind ipv4地址
consul agent -server -bootstrap -ui -client 0.0.0.0 -data-dir D:\work\consul_data -bind 192.168.1.190