-
介绍
Bud是一个go语言编写的全栈开发框架,类似ruby on rails,Bud的使命是降低构建、开发和维护web应用的成本。Bud提供了一整套文档完善的、充分测试的工具来降低web应用开发成本。
-
安装
curl -sf https://raw.githubusercontent.com/livebud/bud/main/install.sh | shbud -h
-
创建web app
bud create hellocd hellolsgo.mod node_modules/ package-lock.json package.json
不像其他全栈框架,bud生成的初始代码非常少,再添加依赖之后,bud才会生成所有的代码。
用bud run运行项目,开启一个开发模式的Server:
bud run| Listening on http://0.0.0.0:3000

-
目录结构
Bud提供了一个标准目录结构:
$YOUR_APP├─ bud├─ controller├─ internal├─ public└─ view
-
bud/ 这个目录是创建的时候自动生成的,包含框架生成的代码,偶尔会需要从这个目录导入packages,但大部分时候都可以忽略它,建议不要放在版本控制器里
-
controller/ 控制器目录用来获取http请求,并响应返回
-
view/ 视图目录用来存放视图文件
-
public/ public目录用来存放静态资源
-
internal/ 这个目录不会被Bud框架引用,建议放这个应用特定的packages
-
控制器和路由
Bud的路由不同于传统的go框架,它遵循一套约定:每个控制器对应一组标准路由,也可以自定义Action,Action和路由一一对应,下面看例子:
bud new controller post
这个命令会生成
controller/post/controller.go 此时这个文件里只能包含以下方法:

可以选择实现任意方法,如果要新增一个自定义路由,则需要新增一个方法:
func (c *Controller) About(ctx context.Context) (string, error) {return "hello", nil}
这个方法有一个默认路由/about,首字母大写的Action会自动获得对应小写的路由,首字母小写的Action不会获得路由。
-
请求和响应
解析请求框架会自动完成,可以在action参数里接收,也可以使用单独的结构体接收,例如:
func (c *Controller) About(ctx context.Context, name string) (string, error) {return fmt.Sprintf("hello %s", name), nil}type Input struct {Name string}func (c *Controller) About(ctx context.Context, in *Input) (string, error) {return fmt.Sprintf("hello %s", in.Name), nil}
一个控制器如果没有对应的视图,总是返回json,例如:
func (c *Controller) Create() (id int, email string) {return 10, "alice@livebud.com"}type Output struct {ID intEmail string}func (c *Controller) Create() Output {return Output{ID: 10,Email: "alice@livebud.com",}}
上述这两种形式都将返回:
{"id": 10,"email": "alice@livebud.com"}
-
视图
视图用来展示HTML页面,bud默认使用svelte渲染视图,svelte是一个高性能前端js框架。
$YOUR_APP└─ view├─ index.svelte -> Root index page├─ posts│ ├─ edit.svelte -> Edit post page│ ├─ index.svelte -> Post index page│ ├─ new.svelte -> New post page│ ├─ show.svelte -> Show post page│ └─ Post.svelte -> Post component (not rendered)└─ users├─ edit.svelte -> Edit user page├─ index.svelte -> User index page└─ show.svelte -> Show user page
控制器中返回的值,如果有对应视图文件,则值会被传递到视图中:
<script>
export let users = [] //来自控制器
</script>
<h1>Users</h1>
<ul>
{#each users as user}
<li>{user.name} is {user.age} years old</li>
{/each}
</ul>
-
其他
Bud框架并没有自己的ORM,用户可自行选择orm框架,通过依赖注入在控制器中使用。另外,还有全栈框架包含的特性,如错误处理、插件系统、数据验证及安全、日志、队列与定时任务、文件与存储等都可以在官方文档上找到。
附文档链接:https://github.com/livebud/bud
END
想要了解Go更多内容,欢迎扫描下方👇 关注 公众号,回复关键词 [实战群] ,就有机会进群和我们进行交流~

Bud是一个基于Go语言的全栈开发框架,类似Ruby on Rails,旨在降低web应用的构建、开发和维护成本。它提供了一套全面的、文档完善的工具,包括简洁的目录结构、自动路由绑定、视图渲染等功能。Bud不包含ORM,允许用户自由选择,同时支持错误处理、插件系统等特性。用户可以通过bud命令创建和管理控制器、路由,并使用Svelte作为默认视图渲染引擎。
536

被折叠的 条评论
为什么被折叠?



