目錄
- go-zero微服務框架的靜態檔案服務
- 應用場景
- go-zero版本
- 新建專案目錄
- 新建 demo.api 檔案
- 生成api程式碼
- 新建靜態1.html檔案
- 檢視檔案目錄
- 寫入靜態服務程式碼
- 啟動api服務
- 訪問1.html
- 參考文件
go-zero微服務框架的靜態檔案服務
應用場景
透過 go-zero 的 rest.WithFileServer("/public", http.Dir("./static/html")) 來給 restful 服務增加檔案服務能力。即開放公開目錄給外部訪問。
go-zero版本
go-zero v1.7.0
新建專案目錄
mkdir demo
cd demo
新建 demo.api 檔案
demo.api
寫入內容
syntax = "v1"
type Request {
Name string `path:"name,options=you|me"`
}
type Response {
Message string `json:"message"`
}
service demo-api {
@handler DemoHandler
get /from/:name (Request) returns (Response)
}
//goctl api go -api core.api -dir ./ -style go_zero
生成api程式碼
goctl api go -api core.api -dir ./ -style go_zero
新建靜態1.html檔案
demo/static/html/1.html
寫入內容
hello 1.html
檢視檔案目錄
.
├── demo.api
├── demo.go
├── etc
│ └── demo-api.yaml
├── go.mod
├── go.sum
├── internal
│ ├── config
│ │ └── config.go
│ ├── handler
│ │ ├── demo_handler.go
│ │ └── routes.go
│ ├── logic
│ │ └── demo_logic.go
│ ├── svc
│ │ └── service_context.go
│ └── types
│ └── types.go
└── static
└── html
└── 1.html
寫入靜態服務程式碼
修改demo.go
package main
import (
"flag"
"fmt"
"net/http"
"demo/internal/config"
"demo/internal/handler"
"demo/internal/svc"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/rest"
)
var configFile = flag.String("f", "etc/demo-api.yaml", "the config file")
func main() {
flag.Parse()
var c config.Config
conf.MustLoad(*configFile, &c)
// 在 `./static/html` 目錄下有需要對外提供的檔案,比如有個檔案 `1.html`,
// 以 `http://127.0.0.1:8888/public/1.html` 這樣的路徑就可以訪問該檔案了。
// public 在瀏覽器中訪問的目錄 對映到./static/html目錄
server := rest.MustNewServer(c.RestConf, rest.WithFileServer("/static", http.Dir("./static/html"))) #
defer server.Stop()
ctx := svc.NewServiceContext(c)
handler.RegisterHandlers(server, ctx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
server.Start()
}
啟動api服務
go mod tidy
go run demo.go
訪問1.html
curl -XGET http://127.0.0.1:8888/public/1.html
hello 1.html
參考文件
- (官網文件)[https://go-zero.dev/faq/http/fileserver]