一.项目搭建
- 新建项目:ego,在Goland中修改GOPATH为当前项目路径(不修改无法build)
项目结构如下
--ego
--src 所有go源码
--user 业务模块包,user自定义名称,表示业务
--User.go 编写结构体,当作实体
--UserDao.go 数据访问
--UserService.go 业务逻辑
--UserController.go 控制器
--static 所有静态文件
--js 脚本
--css 样式表
--images 图片
--view 页面
--main.go 程序入口
从02资料中把本static和view文件夹复制到项目中,其他内容自己创建
- 编写main.go,显示login.html页面 ```go package main
import ( “net/http” “html/template” )
func welcome(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles(“view/login.html”) t.Execute(w, nil) }
func main() { s := http.Server{Addr: “:80”} http.Handle(“/static/“, http.StripPrefix(“/static/“, http.FileServer(http.Dir(“static”)))) http.HandleFunc(“/“, welcome) s.ListenAndServe() }
- 在浏览器输入http://localhost 测试登录页面是否显示正常
<a name="669c03e9"></a>
# 二.Commons编写
- Commons中内容是所有模块都可能使用的内容
- 在Commons中提供EgoResult.go的文件,表示前后台交互数据模版,文件内容如下
```go
package commons
//前后台数据交互模版
type EgoResult struct {
Status int
Data interface{}
Msg string
}
- 提供DBUtils的.go文件,里面封装了对数据访问的代码,一共四个函数,其中Dml表示增加,删除,修改,Dql表示查询,并对外提供访问权限
- Dql函数没有关闭数据库连接,需要调用房手动关闭 ```go package commons
import ( “database/sql” _ “github.com/go-sql-driver/mysql” “fmt” )
//数据库操作的三个对象 var ( db sql.DB stmt sql.Stmt rows *sql.Rows )
//打开数据库连接,不要忘记导入驱动包 func openConn()(err error){ //此处为等号,否则创建局部变量 db,err=sql.Open(“mysql”,”root:smallming@tcp(localhost:3306)/ego”) if err!=nil{ fmt.Println(“连接失败”,err) return } return nil }
//关闭连接,首字母大写,需要跨包访问的 func CloseConn(){ if rows!=nil{ rows.Close() } if stmt!=nil{ stmt.Close() } if db!=nil{ db.Close() } }
//执行DML新增,删除,修改操作 func Dml(sql string ,args … interface{}) (int64,error){ err:=openConn() if err!=nil{ fmt.Println(“执行DML时出现错误,打开连接失败”) return 0,err } //此处也是等号 stmt,err=db.Prepare(sql) if err!=nil{ fmt.Println(“执行DML时出现错误,预处理出现错误”) return 0,err } //此处要有…表示切片,如果没有表示数组,会报错 result,err:=stmt.Exec(args…) if err!=nil{ fmt.Println(“执行DML出现错误,执行错误”) return 0,err } count,err:=result.RowsAffected() if err!=nil{ fmt.Println(“执行DML出现错误,获取受影响行数错误”) return 0,err } CloseConn()//关闭连接 return count,err }
//执行DQL查询 func Dql(sql string,args … interface{}) (*sql.Rows,error){ err:= openConn() if err!=nil{ fmt.Println(“执行DQL出现错误,打开连接失败”) return nil,err } //此处是等号 stmt,err=db.Prepare(sql) if err!=nil{ fmt.Println(“执行DQL出现错误,预处理实现”) return nil,err } //此处参数是切片 rows,err=stmt.Query(args…) if err!=nil{ fmt.Println(“执行DQL出现错误,执行错误”) return nil,err } //此处没有关闭,调用此函数要记得关闭连接 return rows,nil } ```