package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" "log" "net" "net/http" "os" "strconv" "strings" ) var port = "8888" func initNacos() { sc := []constant.ServerConfig{ *constant.NewServerConfig("nacos", 8848), } cc := constant.ClientConfig{ AppName: "api1", NamespaceId: "", //namespace id TimeoutMs: 5000, NotLoadCacheAtStart: true, RotateTime: "1h", MaxAge: 3, LogLevel: "debug", } configParam := vo.NacosClientParam{ ClientConfig: &cc, ServerConfigs: sc, } client, err := clients.NewNamingClient(configParam) if err != nil { panic(err) } portNum, _ := strconv.Atoi(port) pp := uint64(portNum) ip := "api-demo" if ips := getIps(); ips != nil { ip = ips[0] } success, err := client.RegisterInstance(vo.RegisterInstanceParam{ Ip: ip, Port: pp, Weight: 10, Enable: true, Healthy: true, ServiceName: "api1", Ephemeral: true, }) log.Println("Nacos注册结果: ", success) if err != nil { log.Println("Nacos注册错误信息: ", err.Error()) } configClient, err := clients.NewConfigClient(configParam) if err != nil { log.Fatalf("创建配置连接失败: %v", err.Error()) } _ = configClient.ListenConfig(vo.ConfigParam{ DataId: "api.yml", Group: "DEFAULT_GROUP", OnChange: func(namespace, group, dataId, data string) { fmt.Println("监控到配置文件变动: group:" + group + ", dataId:" + dataId + ", data:" + data) }, }) //log.Println("监听配置失败: ", err.Error()) } func getIps() []string { addrs, err := net.InterfaceAddrs() if err != nil { return nil } var ips []string for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { ip := ipnet.IP.String() fmt.Println(ip) ips = append(ips, ip) } } } //ipStr := strings.Join(aaaa, ",") return ips } func main() { args := os.Args if len(args) > 1 { port = args[1] } app := gin.Default() initNacos() app.GET("/hello", func(context *gin.Context) { context.String(http.StatusOK, "[GET]-[API]-v1"+port) }) app.POST("/hello", func(context *gin.Context) { context.String(http.StatusOK, "[POST]-[API]-v1"+port) }) app.GET("/ip", func(context *gin.Context) { context.String(http.StatusOK, strings.Join(getIps(), ",")) }) app.Run(fmt.Sprintf(":%v", port)) }