use dynamic paths for templates and static files (#894)

* Refactor router to use dynamic paths for templates and static files

* Add Makefile and usage guide for project setup and service management

* add License Header

* add License Header

* update Makefile for English localization and improve command descriptions

* refactor Makefile to streamline service startup and remove unnecessary commands
diff --git a/task/shop/MAKEFILE_GUIDE.md b/task/shop/MAKEFILE_GUIDE.md
new file mode 100644
index 0000000..87540a6
--- /dev/null
+++ b/task/shop/MAKEFILE_GUIDE.md
@@ -0,0 +1,173 @@
+# Dubbo-Go 微服务商城项目 - Makefile 使用指南
+
+## 📋 项目概述
+
+这是一个基于 Dubbo-Go 的微服务商城系统,包含5个核心服务:
+- **Frontend** - 商城前端 (端口: 8080)
+- **User** - 用户服务 (端口: 20001)  
+- **Detail** - 商品详情服务 (端口: 20002)
+- **Order** - 订单服务 (端口: 20003)
+- **Comment** - 评论服务 (端口: 20004)
+
+## 🚀 快速开始
+
+### 一键启动项目
+```bash
+make quick-start
+```
+这个命令会自动完成:初始化目录 → 安装依赖 → 构建服务 → 启动所有服务
+
+### 分步操作
+```bash
+# 1. 初始化项目目录
+make init
+
+# 2. 安装依赖
+make install-deps
+
+# 3. 构建所有服务
+make build
+
+# 4. 启动服务 (V1版本)
+make start
+
+# 或启动 V2 版本服务
+make start-v2
+```
+
+## 🔧 常用命令
+
+### 服务管理
+```bash
+make start          # 启动所有服务 (V1版本)
+make start-v2       # 启动所有服务 (V2版本)
+make stop           # 停止所有服务
+make restart        # 重启所有服务
+make status         # 查看服务运行状态
+```
+
+### 开发工具
+```bash
+make build          # 构建所有服务
+make clean          # 清理构建文件
+make clean-all      # 深度清理 (包括日志和PID文件)
+make logs           # 查看所有服务日志
+make fmt            # 格式化Go代码
+make vet            # 代码静态检查
+```
+
+### 测试功能
+```bash
+make test           # 运行项目测试
+make test-user      # 测试用户服务客户端
+make test-detail    # 测试商品详情服务客户端
+make test-order     # 测试订单服务客户端
+make test-comment   # 测试评论服务客户端
+```
+
+### 开发工具
+```bash
+make proto          # 生成 Protocol Buffers 代码
+```
+
+## 📁 项目结构
+
+启动后会创建以下目录:
+```
+shop/
+├── bin/            # 编译后的可执行文件
+├── logs/           # 服务日志文件
+├── pids/           # 进程ID文件
+└── Makefile        # 构建脚本
+```
+
+## 🌐 访问地址
+
+启动成功后,可以通过以下地址访问:
+- **前端页面**: http://localhost:8080
+- **用户服务**: localhost:20001
+- **商品详情服务**: localhost:20002  
+- **订单服务**: localhost:20003
+- **评论服务**: localhost:20004
+
+## 🔍 监控和调试
+
+### 查看服务状态
+```bash
+make status
+```
+
+### 查看服务日志
+```bash
+make logs
+```
+
+### 查看特定服务日志
+```bash
+tail -f logs/frontend.log    # 前端服务日志
+tail -f logs/user.log        # 用户服务日志
+tail -f logs/detail-v1.log   # 商品详情服务日志
+tail -f logs/order-v1.log    # 订单服务日志
+tail -f logs/comment-v1.log  # 评论服务日志
+```
+
+## ⚙️ 高级配置
+
+### 服务版本切换
+项目支持V1和V2两个版本的服务:
+```bash
+make start     # 启动V1版本
+make start-v2  # 启动V2版本
+```
+
+### 开发模式
+安装热重载工具:
+```bash
+go install github.com/cosmtrek/air@latest
+make dev
+```
+
+### Protocol Buffers
+重新生成protobuf代码:
+```bash
+make proto
+```
+
+## 📝 常见问题
+
+### Q: 服务启动失败怎么办?
+A: 检查端口是否被占用,查看日志文件排查错误:
+```bash
+make status
+make logs
+```
+
+### Q: 如何完全重置项目?
+A: 使用深度清理命令:
+```bash
+make stop
+make clean-all
+make quick-start
+```
+
+### Q: 如何只启动部分服务?
+A: 可以手动启动特定服务:
+```bash
+make build
+./bin/frontend &        # 只启动前端
+./bin/user &           # 只启动用户服务
+```
+
+## 🛠️ 开发建议
+
+1. **开发时使用热重载**: `make dev`
+2. **提交前检查代码**: `make fmt && make vet`
+3. **定期更新依赖**: `make mod-update`
+4. **运行测试**: `make test`
+
+## 📞 技术支持
+
+如遇到问题,请查看:
+1. 服务日志: `make logs`
+2. 服务状态: `make status`
+3. 项目文档: `READEME_CN.md`
diff --git a/task/shop/Makefile b/task/shop/Makefile
new file mode 100644
index 0000000..fceffa9
--- /dev/null
+++ b/task/shop/Makefile
@@ -0,0 +1,245 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Dubbo-Go Microservice Shop Project Makefile
+# Provides one-click start, stop, build and other functions
+
+.PHONY: help build clean start stop restart logs test proto check-deps install-deps
+
+# Default target
+.DEFAULT_GOAL := help
+
+# Project information
+PROJECT_NAME := dubbo-go-shop
+GO_MIN_VERSION := 1.19
+REGISTRY := nacos
+
+# Service configuration
+SERVICES := frontend user detail order comment
+SERVICE_PORTS := 8080 20001 20002 20003 20004
+
+# Color definitions
+RED := \033[31m
+GREEN := \033[32m
+YELLOW := \033[33m
+BLUE := \033[34m
+RESET := \033[0m
+
+help: ## Show help information
+	@echo "$(GREEN)Dubbo-Go Microservice Shop Project Makefile$(RESET)"
+	@echo ""
+	@echo "$(YELLOW)Available commands:$(RESET)"
+	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "  $(BLUE)%-15s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
+
+check-deps: ## Check dependencies
+	@echo "$(BLUE)Checking Go version...$(RESET)"
+	@go version || (echo "$(RED)Go environment not found$(RESET)" && exit 1)
+	@echo "$(GREEN)Go environment check passed$(RESET)"
+
+install-deps: check-deps ## Install project dependencies
+	@echo "$(BLUE)Installing project dependencies...$(RESET)"
+	@go mod download
+	@go mod tidy
+	@echo "$(GREEN)Dependencies installation completed$(RESET)"
+
+build: install-deps ## Build all services
+	@echo "$(BLUE)Building all services...$(RESET)"
+	@echo "$(YELLOW)Building Frontend service...$(RESET)"
+	@go build -o bin/frontend ./frontend/cmd/main.go
+	@echo "$(YELLOW)Building User service...$(RESET)"
+	@go build -o bin/user ./user/go-server/cmd/server.go
+	@echo "$(YELLOW)Building Detail V1 service...$(RESET)"
+	@go build -o bin/detail-v1 ./detail/server_v1/cmd/server.go
+	@echo "$(YELLOW)Building Detail V2 service...$(RESET)"
+	@go build -o bin/detail-v2 ./detail/server_v2/cmd/server.go
+	@echo "$(YELLOW)Building Order V1 service...$(RESET)"
+	@go build -o bin/order-v1 ./order/server_v1/cmd/server.go
+	@echo "$(YELLOW)Building Order V2 service...$(RESET)"
+	@go build -o bin/order-v2 ./order/server_v2/cmd/server.go
+	@echo "$(YELLOW)Building Comment V1 service...$(RESET)"
+	@go build -o bin/comment-v1 ./comment/server_v1/cmd/server.go
+	@echo "$(YELLOW)Building Comment V2 service...$(RESET)"
+	@go build -o bin/comment-v2 ./comment/server_v2/cmd/server.go
+	@echo "$(GREEN)All services build completed$(RESET)"
+
+clean: ## Clean build files
+	@echo "$(BLUE)Cleaning build files...$(RESET)"
+	@rm -rf bin/
+	@go clean
+	@echo "$(GREEN)Clean completed$(RESET)"
+
+# Start all services (V1 version)
+start: init build ## Start all services (V1 version)
+	@echo "$(BLUE)Starting all microservices...$(RESET)"
+	@echo "$(YELLOW)Starting Comment V1 service (port 20004)...$(RESET)"
+	@nohup ./bin/comment-v1 > logs/comment-v1.log 2>&1 & echo $$! > pids/comment-v1.pid
+	@echo "$(YELLOW)Starting Detail V1 service (port 20002)...$(RESET)"
+	@nohup ./bin/detail-v1 > logs/detail-v1.log 2>&1 & echo $$! > pids/detail-v1.pid
+	@echo "$(YELLOW)Starting Order V1 service (port 20003)...$(RESET)"
+	@nohup ./bin/order-v1 > logs/order-v1.log 2>&1 & echo $$! > pids/order-v1.pid
+	@echo "$(YELLOW)Starting User service (port 20001)...$(RESET)"
+	@nohup ./bin/user > logs/user.log 2>&1 & echo $$! > pids/user.pid
+	@echo "$(YELLOW)Starting Frontend service (port 8080)...$(RESET)"
+	@nohup ./bin/frontend > logs/frontend.log 2>&1 & echo $$! > pids/frontend.pid
+	@echo "$(GREEN)All services started$(RESET)"
+	@echo "$(GREEN)Frontend access URL: http://localhost:8080$(RESET)"
+
+# Start V2 version services
+start-v2: init build ## Start all services (V2 version)
+	@echo "$(BLUE)Starting all microservices (V2 version)...$(RESET)"
+	@echo "$(YELLOW)Starting Comment V2 service...$(RESET)"
+	@nohup ./bin/comment-v2 > logs/comment-v2.log 2>&1 & echo $$! > pids/comment-v2.pid
+	@echo "$(YELLOW)Starting Detail V2 service...$(RESET)"
+	@nohup ./bin/detail-v2 > logs/detail-v2.log 2>&1 & echo $$! > pids/detail-v2.pid
+	@echo "$(YELLOW)Starting Order V2 service...$(RESET)"
+	@nohup ./bin/order-v2 > logs/order-v2.log 2>&1 & echo $$! > pids/order-v2.pid
+	@echo "$(YELLOW)Starting User service...$(RESET)"
+	@nohup ./bin/user > logs/user.log 2>&1 & echo $$! > pids/user.pid
+	@echo "$(YELLOW)Starting Frontend service...$(RESET)"
+	@nohup ./bin/frontend > logs/frontend.log 2>&1 & echo $$! > pids/frontend.pid
+	@echo "$(GREEN)All services (V2 version) started$(RESET)"
+	@echo "$(GREEN)Frontend access URL: http://localhost:8080$(RESET)"
+
+stop: ## Stop all services
+	@echo "$(BLUE)Stopping all services...$(RESET)"
+	@mkdir -p pids
+	@if [ -f pids/frontend.pid ]; then \
+		kill `cat pids/frontend.pid` 2>/dev/null || true; \
+		rm -f pids/frontend.pid; \
+		echo "$(YELLOW)Frontend service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/user.pid ]; then \
+		kill `cat pids/user.pid` 2>/dev/null || true; \
+		rm -f pids/user.pid; \
+		echo "$(YELLOW)User service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/detail-v1.pid ]; then \
+		kill `cat pids/detail-v1.pid` 2>/dev/null || true; \
+		rm -f pids/detail-v1.pid; \
+		echo "$(YELLOW)Detail V1 service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/detail-v2.pid ]; then \
+		kill `cat pids/detail-v2.pid` 2>/dev/null || true; \
+		rm -f pids/detail-v2.pid; \
+		echo "$(YELLOW)Detail V2 service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/order-v1.pid ]; then \
+		kill `cat pids/order-v1.pid` 2>/dev/null || true; \
+		rm -f pids/order-v1.pid; \
+		echo "$(YELLOW)Order V1 service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/order-v2.pid ]; then \
+		kill `cat pids/order-v2.pid` 2>/dev/null || true; \
+		rm -f pids/order-v2.pid; \
+		echo "$(YELLOW)Order V2 service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/comment-v1.pid ]; then \
+		kill `cat pids/comment-v1.pid` 2>/dev/null || true; \
+		rm -f pids/comment-v1.pid; \
+		echo "$(YELLOW)Comment V1 service stopped$(RESET)"; \
+	fi
+	@if [ -f pids/comment-v2.pid ]; then \
+		kill `cat pids/comment-v2.pid` 2>/dev/null || true; \
+		rm -f pids/comment-v2.pid; \
+		echo "$(YELLOW)Comment V2 service stopped$(RESET)"; \
+	fi
+	@echo "$(GREEN)All services stopped$(RESET)"
+
+restart: stop start ## Restart all services
+
+restart-v2: stop start-v2 ## Restart all services (V2 version)
+
+logs: ## View all service logs
+	@echo "$(BLUE)Viewing service logs...$(RESET)"
+	@if [ -d logs ]; then \
+		echo "$(YELLOW)=== Frontend Logs ===$(RESET)"; \
+		tail -n 20 logs/frontend.log 2>/dev/null || echo "No Frontend logs"; \
+		echo "$(YELLOW)=== User Logs ===$(RESET)"; \
+		tail -n 20 logs/user.log 2>/dev/null || echo "No User logs"; \
+		echo "$(YELLOW)=== Detail Logs ===$(RESET)"; \
+		tail -n 20 logs/detail-v1.log 2>/dev/null || tail -n 20 logs/detail-v2.log 2>/dev/null || echo "No Detail logs"; \
+		echo "$(YELLOW)=== Order Logs ===$(RESET)"; \
+		tail -n 20 logs/order-v1.log 2>/dev/null || tail -n 20 logs/order-v2.log 2>/dev/null || echo "No Order logs"; \
+		echo "$(YELLOW)=== Comment Logs ===$(RESET)"; \
+		tail -n 20 logs/comment-v1.log 2>/dev/null || tail -n 20 logs/comment-v2.log 2>/dev/null || echo "No Comment logs"; \
+	else \
+		echo "$(RED)Logs directory does not exist$(RESET)"; \
+	fi
+
+status: ## Check service status
+	@echo "$(BLUE)Checking service status...$(RESET)"
+	@mkdir -p pids
+	@printf "$(YELLOW)Frontend:$(RESET) "
+	@if [ -f pids/frontend.pid ] && kill -0 $$(cat pids/frontend.pid) 2>/dev/null; then echo "$(GREEN)Running$(RESET)"; else echo "$(RED)Stopped$(RESET)"; fi
+	@printf "$(YELLOW)User:$(RESET)     "
+	@if [ -f pids/user.pid ] && kill -0 $$(cat pids/user.pid) 2>/dev/null; then echo "$(GREEN)Running$(RESET)"; else echo "$(RED)Stopped$(RESET)"; fi
+	@printf "$(YELLOW)Detail:$(RESET)   "
+	@if [ -f pids/detail-v1.pid ] && kill -0 $$(cat pids/detail-v1.pid) 2>/dev/null; then echo "$(GREEN)V1 Running$(RESET)"; elif [ -f pids/detail-v2.pid ] && kill -0 $$(cat pids/detail-v2.pid) 2>/dev/null; then echo "$(GREEN)V2 Running$(RESET)"; else echo "$(RED)Stopped$(RESET)"; fi
+	@printf "$(YELLOW)Order:$(RESET)    "
+	@if [ -f pids/order-v1.pid ] && kill -0 $$(cat pids/order-v1.pid) 2>/dev/null; then echo "$(GREEN)V1 Running$(RESET)"; elif [ -f pids/order-v2.pid ] && kill -0 $$(cat pids/order-v2.pid) 2>/dev/null; then echo "$(GREEN)V2 Running$(RESET)"; else echo "$(RED)Stopped$(RESET)"; fi
+	@printf "$(YELLOW)Comment:$(RESET)  "
+	@if [ -f pids/comment-v1.pid ] && kill -0 $$(cat pids/comment-v1.pid) 2>/dev/null; then echo "$(GREEN)V1 Running$(RESET)"; elif [ -f pids/comment-v2.pid ] && kill -0 $$(cat pids/comment-v2.pid) 2>/dev/null; then echo "$(GREEN)V2 Running$(RESET)"; else echo "$(RED)Stopped$(RESET)"; fi
+
+test: ## Run tests
+	@echo "$(BLUE)Running tests...$(RESET)"
+	@go test -v ./...
+	@echo "$(GREEN)Tests completed$(RESET)"
+
+proto: ## Generate Protocol Buffers code
+	@echo "$(BLUE)Generating Protocol Buffers code...$(RESET)"
+	@echo "$(YELLOW)Generating Comment API...$(RESET)"
+	@cd comment/api && protoc --go_out=. --go-grpc_out=. --go-triple_out=. *.proto
+	@echo "$(YELLOW)Generating Detail API...$(RESET)"
+	@cd detail/api && protoc --go_out=. --go-grpc_out=. --go-triple_out=. *.proto
+	@echo "$(YELLOW)Generating Order API...$(RESET)"
+	@cd order/api && protoc --go_out=. --go-grpc_out=. --go-triple_out=. *.proto
+	@echo "$(YELLOW)Generating User API...$(RESET)"
+	@cd user/api && protoc --go_out=. --go-grpc_out=. --go-triple_out=. *.proto
+	@echo "$(GREEN)Protocol Buffers code generation completed$(RESET)"
+
+# Client test commands
+test-user: ## Test user service client
+	@echo "$(BLUE)Testing user service...$(RESET)"
+	@go run ./user/go-client/cmd/client.go
+
+test-detail: ## Test product detail service client
+	@echo "$(BLUE)Testing product detail service...$(RESET)"
+	@go run ./detail/client/cmd/client.go
+
+test-order: ## Test order service client
+	@echo "$(BLUE)Testing order service...$(RESET)"
+	@go run ./order/client/cmd/client.go
+
+test-comment: ## Test comment service client
+	@echo "$(BLUE)Testing comment service...$(RESET)"
+	@go run ./comment/client/cmd/client.go
+
+# Utility commands
+init: ## Initialize project directories
+	@echo "$(BLUE)Initializing project directories...$(RESET)"
+	@mkdir -p bin logs pids
+	@echo "$(GREEN)Project directories initialization completed$(RESET)"
+
+# Clean commands
+clean-all: clean ## Deep clean (including logs and PID files)
+	@echo "$(BLUE)Deep cleaning...$(RESET)"
+	@rm -rf logs/ pids/
+	@echo "$(GREEN)Deep clean completed$(RESET)"
+
+# Quick start
+quick-start: install-deps start ## Quick start (install dependencies + start)
+	@echo "$(GREEN)Quick start completed! Visit http://localhost:8080$(RESET)"
\ No newline at end of file
diff --git a/task/shop/frontend/pages/router.go b/task/shop/frontend/pages/router.go
index a083700..e8adc6b 100644
--- a/task/shop/frontend/pages/router.go
+++ b/task/shop/frontend/pages/router.go
@@ -18,15 +18,27 @@
 package pages
 
 import (
+	"path/filepath"
+	"runtime"
+)
+
+import (
 	"github.com/gin-gonic/gin"
 )
 
 func InitRouter() *gin.Engine {
 	router := gin.Default()
+	// get current file directory
+	_, filename, _, _ := runtime.Caller(0)
+	dir := filepath.Dir(filename)
+
 	// load the html
-	router.LoadHTMLGlob("../pages/templates/*")
+	templatePath := filepath.Join(dir, "templates", "*")
+	router.LoadHTMLGlob(templatePath)
+
 	// static files
-	router.Static("/static", "../pages/static")
+	staticPath := filepath.Join(dir, "static")
+	router.Static("/static", staticPath)
 	router.GET("/", Index)
 	router.GET("/login", Login)
 	router.GET("/timeoutLogin", TimeoutLogin)
diff --git a/task/shop/go.mod b/task/shop/go.mod
index e381f73..430fc10 100644
--- a/task/shop/go.mod
+++ b/task/shop/go.mod
@@ -100,6 +100,7 @@
 	github.com/prometheus/common v0.37.0 // indirect
 	github.com/prometheus/procfs v0.8.0 // indirect
 	github.com/shirou/gopsutil/v3 v3.22.2 // indirect
+	github.com/sirupsen/logrus v1.8.1 // indirect
 	github.com/spaolacci/murmur3 v1.1.0 // indirect
 	github.com/tklauser/go-sysconf v0.3.10 // indirect
 	github.com/tklauser/numcpus v0.4.0 // indirect
diff --git a/task/shop/go.sum b/task/shop/go.sum
index 797ce74..ab413a5 100644
--- a/task/shop/go.sum
+++ b/task/shop/go.sum
@@ -145,8 +145,7 @@
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4=
-github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
 github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
@@ -192,8 +191,7 @@
 github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
 github.com/dubbogo/gost v1.11.18/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
 github.com/dubbogo/gost v1.13.1/go.mod h1:9HMXBv+WBMRWhF3SklpqDjkS/01AKWm2SrVdz/A0xJI=
-github.com/dubbogo/gost v1.14.0 h1:yc5YfozvUBAChAox8H7CkmHb6/TvF6cKdqZNJNv2jdE=
-github.com/dubbogo/gost v1.14.0/go.mod h1:YP28JweR+hhJdikP3bZ3bVKUWWI313xX1rgLaEE0FvQ=
+github.com/dubbogo/gost v1.14.1 h1:veA+5FqwUHvqaB5OPvsWz4iDkGGpyL4lig2rSOZANEs=
 github.com/dubbogo/gost v1.14.1/go.mod h1:m3VJVqCjQ87SwYRrxN2s4T33cOCDrMVbRh4+MAUitnQ=
 github.com/dubbogo/grpc-go v1.42.9/go.mod h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM=
 github.com/dubbogo/grpc-go v1.42.10 h1:CoyCdtqKJEar/3rPa6peZbDqYZ/mVsCqAxB6TfTSkhQ=
@@ -225,12 +223,10 @@
 github.com/envoyproxy/go-control-plane v0.10.0/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
-github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o=
-github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI=
+github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f h1:7T++XKzy4xg7PKy+bM+Sa9/oe1OC88yz2hXQUISoXfA=
 github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y=
-github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
+github.com/envoyproxy/protoc-gen-validate v0.10.1 h1:c0g45+xCJhdgFGw7a5QAfdS4byAbud7miNWJ1WwEVf8=
 github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
@@ -1297,8 +1293,7 @@
 google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY=
-google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
 google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
@@ -1329,8 +1324,7 @@
 google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk=
-google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
+google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc=
 google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=