一.项目搭建

  • 新建项目:ego,在Goland中修改GOPATH为当前项目路径(不修改无法build)
  • 项目结构如下

    1. --ego
    2. --src 所有go源码
    3. --user 业务模块包,user自定义名称,表示业务
    4. --User.go 编写结构体,当作实体
    5. --UserDao.go 数据访问
    6. --UserService.go 业务逻辑
    7. --UserController.go 控制器
    8. --static 所有静态文件
    9. --js 脚本
    10. --css 样式表
    11. --images 图片
    12. --view 页面
    13. --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() }

  1. - 在浏览器输入http://localhost 测试登录页面是否显示正常
  2. <a name="669c03e9"></a>
  3. # 二.Commons编写
  4. - Commons中内容是所有模块都可能使用的内容
  5. - Commons中提供EgoResult.go的文件,表示前后台交互数据模版,文件内容如下
  6. ```go
  7. package commons
  8. //前后台数据交互模版
  9. type EgoResult struct {
  10. Status int
  11. Data interface{}
  12. Msg string
  13. }
  • 提供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 } ```