GoFrame
安装文档地址:https://goframe.org/ 讲的还挺详细的,基本上都能看懂,有语言基础的话基本上就能直接上手了
下载CLI地址:https://github.com/gogf/gf-cli 工具可以帮助我们快速的新建一个GoFrame
的项目
GoFrame
使用gf init 项目名
这里有个小问题,默认是不会新建项目名称的文件夹,直接下载依赖代码
项目中的.gitkeep
没有用处可以直接删除
Hello World!
启动main.go
,访问127.0.0.1:8199
成功!
gf 路由
有三种
BindHandler
方法进行路由注册BindObject
方法完成执行对象的注册BindController
方法完成控制器的注册// 回调函数注册
func main() {
s := g.Server()
s.BindHandler("/", func(r *ghttp.Request) {
r.Response.Write("Hello World!")
})
s.Run()
}
// 执行对象注册
type Controller struct{}
func (c *Controller) Index(r *ghttp.Request) {
r.Response.Write("index")
}
func (c *Controller) Show(r *ghttp.Request) {
r.Response.Write("show")
}
func main() {
s := g.Server()
c := new(Controller)
s.BindObject("/object", c)
s.SetPort(8199)
s.Run()
}
type User struct {
gmvc.Controller
}
func init() {
s := g.Server()
s.BindController("/user", new(User))
s.BindController("/user/{.method}/{uid}", new(User), "Info")
s.BindController("/user/{.method}/{page}.html", new(User), "List")
}
func (u *User) Index() {
u.Response.Write("User")
}
func (u *User) Info() {
u.Response.Write("Info - Uid: ", u.Request.Get("uid"))
}
func (u *User) List() {
u.Response.Write("List - Page: ", u.Request.Get("page"))
}
这是官方的三个例子,我觉得有点明确,但是有些地方不是很明白。分组路由更为简便易用,下面看下分组路由是如何实现的
func main() {
s := g.Server()
group := s.Group("/api")
group.ALL("/all", func(r *ghttp.Request) {
r.Response.Write("all")
})
group.GET("/get", func(r *ghttp.Request) {
r.Response.Write("get")
})
group.POST("/post", func(r *ghttp.Request) {
r.Response.Write("post")
})
s.SetPort(8199)
s.Run()
}
这样看来,分组路由觉得是首选,简单易用(主要是可以偷懒)
ORM
GoFrame
中直接依赖了mysql:https://github.com/go-sql-driver/mysql
内置支持,无需额外扩展或第三方包接入,直接可用 ,其余的需要自己去引入
数据库配置在config/config.toml
# Database.
[database]
link = "mysql:root:Root5683@@tcp(127.0.0.1:3306)/myschool"
debug = true
# Database logger.
[database.logger]
Path = "/tmp/log/gf-app/sql"
Level = "all"
Stdout = true
gf gen model
生成实体之后,下面我们结合上面的路由来看下如何操作数据库
main.go
package router
import (
"github.com/gogf/gf/frame/g"
"goframe/app/api/student"
)
func init() {
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.PUT("/save", student.Save)
group.GET("/select", student.Select)
group.POST("/update", student.Update)
group.DELETE("/delete", student.Delete)
})
}
student.go
package student
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"goframe/app/model/student"
)
// 获取数据库连接
var db = g.DB().Table("student")
// 新增
func Save(r *ghttp.Request) {
db.Data(student.Entity{
Id: r.GetRequestString("id"),
Name: r.GetRequestString("name"),
Age: r.GetRequestInt("age"),
}).Insert()
r.Response.WriteJsonExit("新增成功")
}
// 根据id查询
func Select(r *ghttp.Request) {
stu := (*student.Entity)(nil)
db.Where("id", r.Get("id")).Struct(&stu)
r.Response.WriteJsonExit(stu)
}
// 更新
func Update(r *ghttp.Request) {
db.Data(student.Entity{
Id: r.GetRequestString("id"),
Name: r.GetRequestString("name"),
Age: r.GetRequestInt("age"),
}).Where("id", r.Get("id")).Update()
r.Response.WriteJsonExit("更新成功")
}
// 删除
func Delete(r *ghttp.Request) {
db.Where("id", r.Get("id")).Delete()
}
使用Postman
测试
PUT:http://127.0.0.1:8199/save
{
"id":"1",
"name":"chenghao_",
"age":"30"
}
POST:http://127.0.0.1:8199/update
{
"id":"1",
"name":"ChengHao_",
"age":"19"
}
http://127.0.0.1:8199/select?id=1
http://127.0.0.1:8199/delete?id=1
sql
文件
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
goframe
框架有点像java
中的 SpringDataJpa
所以更新student.go
// 新增
func Save(r *ghttp.Request) {
var stu *student.Entity
if err := r.Parse(&stu); err != nil {
response.JsonExit(r, 1, err.Error())
}
db.Data(stu).Insert()
r.Response.WriteJsonExit("新增成功")
}
// 根据id查询
func Select(r *ghttp.Request) {
stu := (*student.Entity)(nil)
db.Where("id", r.Get("id")).Struct(&stu)
//r.Response.WriteJsonExit(stu)
r.Response.WriteTpl("index.html", gconv.Map(stu))
}
// 更新
func Update(r *ghttp.Request) {
var stu *student.Entity
if err := r.Parse(&stu); err != nil {
response.JsonExit(r, 1, err.Error())
}
db.Data(stu).Where("id", stu.Id).Update()
r.Response.WriteJsonExit("更新成功")
}
// 删除
func Delete(r *ghttp.Request) {
db.Where("id", r.Get("id")).Delete()
}
新手入门,大佬勿喷,JAVA
学习go
有点奇怪,很多地方还不是很理解,后续会继续学习更新,共同进步。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有