go-zero微服務框架的靜態檔案服務

HaimaBlog發表於2024-08-04

目錄
  • 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

image

參考文件

  • (官網文件)[https://go-zero.dev/faq/http/fileserver]

相關文章