Help us shape the future of Go! Take the 2026 Go Developer Survey

console

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2026 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Overview

Package console 把 Vite 构建出的 Console SPA 嵌入二进制并提供静态资源服务。

dist 目录由 `task console:build` 生成(见 Taskfile.yml),不入库。 仓库只保留 dist/.gitkeep 占位,保证未构建前端时后端依然可以编译。

本包的 Handler 期望被挂载在 MountPath 下,调用方需自行 StripPrefix。

Index

Constants

View Source
const MountPath = "/console/"

MountPath 是 Console 的挂载前缀,必须与 console/vite.config.ts 的 base 一致。

View Source
const NavPath = "/navigation"

NavPath 是菜单接口的路径,挂在 Console 平面之下。

Variables

This section is empty.

Functions

func Assets

func Assets() (fs.FS, error)

Assets 返回以 dist 为根的文件系统。

func Built

func Built() bool

Built 报告 Console 前端产物是否已嵌入(即 dist/index.html 是否存在)。 未构建时后端仍可启动,只是 Console 路由返回提示页。

func Handler

func Handler() http.Handler

Handler 返回 Console SPA 的静态资源处理器(已含 MountPath 前缀剥离)。

行为:命中真实文件则直接返回;未命中且请求不带扩展名时回退到 index.html, 以支持前端的 history 路由。前端未构建时统一返回 501 提示。

Types

type BuildHandler added in v0.1.8

type BuildHandler struct {
	// contains filtered or unexported fields
}

BuildHandler 提供当前运行构建的版本信息。

提交号与构建时间不放进 /healthz:那是免认证的运维探针,只回答「活着没有」, 没有理由对匿名请求多给构建细节。这里对所有已登录用户开放、不要求权限串, 与菜单接口同一档——关于页的「构建信息」卡片人人可见,提 issue 时贴的就是它。

func NewBuildHandler added in v0.1.8

func NewBuildHandler(info version.Info) *BuildHandler

NewBuildHandler 构造构建信息处理器。构建信息在进程内不变,构造时取定。

func (*BuildHandler) Register added in v0.1.8

func (h *BuildHandler) Register(console huma.API)

Register 挂载构建信息接口。

type BuildView added in v0.1.8

type BuildView struct {
	Version   string `json:"version" doc:"语义化版本号;源码直接构建时为 0.0.0-dev"`
	Commit    string `json:"commit" doc:"git 提交短哈希;构建时未注入且取不到 VCS 信息时为 unknown"`
	Date      string `json:"date" doc:"构建时间(RFC 3339);取不到时为 unknown"`
	GoVersion string `json:"goVersion" doc:"编译所用的 Go 版本"`
	Platform  string `json:"platform" doc:"操作系统/架构,如 linux/amd64"`
}

BuildView 是构建信息接口的响应体。

不直接用 version.Info 作响应类型:huma 按类型名全局登记 Schema,Info 这种名字迟早撞车。

type NavGroupView struct {
	Name  string `json:"name" doc:"分组标识"`
	Label string `json:"label" doc:"分组显示名"`
	Order int    `json:"order"`
}

NavGroupView 是菜单分组的接口视图。

type NavHandler struct {
	// contains filtered or unexported fields
}

NavHandler 提供 Console 的菜单。

菜单为什么由服务端给而不是前端写死:插件的页面要出现在侧边栏里, 而前端不可能事先知道有哪些插件。清单一旦写死在前端, 它就必须与后端的模块构成保持同步,而那种同步只能靠人记着。

**权限在这里不过滤**:本接口对所有已登录用户开放,携带每一项所需的权限串, 由前端决定显示与否。理由是菜单的过滤规则与前端已有的 can() 必须是同一套—— 服务端过滤一遍、前端再判一遍,两套规则迟早分叉。 菜单不是安全边界,真正的拦截在各页面的服务端接口上。

func NewNavHandler

func NewNavHandler(navigation func() app.Navigation) *NavHandler

NewNavHandler 构造菜单处理器。

接受一个取菜单的函数而不是一份清单:设置分组的登记要等模块 Start, 而设置页的入口是从那份分组列表推导出来的。构造时取一次会漏掉它们。

func (h *NavHandler) Register(console huma.API)

Register 挂载菜单接口。

type NavItemView struct {
	Key         string `json:"key" doc:"菜单项的稳定标识"`
	Label       string `json:"label"`
	Path        string `json:"path" doc:"Console 内的绝对路径"`
	Icon        string `json:"icon" doc:"图标名,取值来自前端的图标登记表"`
	Group       string `json:"group" doc:"所属分组的标识"`
	Order       int    `json:"order"`
	Permission  string `json:"permission" doc:"显示所需的权限串;空串表示所有已登录用户可见"`
	Keywords    string `json:"keywords" doc:"命令面板的检索关键词"`
	Description string `json:"description,omitempty"`
	End         bool   `json:"end" doc:"是否只在路径完全相等时高亮"`
	Hidden      bool   `json:"hidden" doc:"是否不进侧边栏(仍然参与命令面板与标题映射)"`
}

NavItemView 是菜单项的接口视图。

type NavView struct {
	Groups []NavGroupView `json:"groups"`
	Items  []NavItemView  `json:"items"`
}

NavView 是菜单接口的响应体。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL