这篇文章仅用于自己学习过程中的一些记录,会一直补充,如有朋友看到该文章有错误的,请指正,万分感谢。
(暂时会把平时所学的知识都放这里,之后分类出来)
这里是beego中链接数据库的方法
首先导入相应所需的包
import(
"fmt"
"github.com/astaxie/beego/orm"
_"github.com/go-sql-driver/mysql"
)
//初始化
func init(){
//orm.RegisterDriver("mysql",orm.DR_MySQL)//这个参数可写可不写,内置已经初始化好的了
//setdefaultdatabas
//第一个参数为打开的数据库的别名,这里的数据库为beegomysql将他的别名设置为default
//第二个参数为driverName,我们用了mysql,这里就写mysql
//第三个参数为多部分,大概为:用户名:密码@/数据库名称?字符类型
//第四,第五个参数为可选参数,这里只写了第四个参数,具体可以查看文档
orm.RegisterDataBase("default","mysql","root:xiaozha@/beegomysql?charset=utf8",30)
}
//该结构为数据库中对应的表名,首字母一般为大写,
//属性名的规范,这里所有属性名第一个字母均为大写,
//如果这里的属性名或者表名为School,那么数据库的名字就会生成school,
//如果这里的属性名或者表名为SchoolStudent,那么数据库的名字就会生成school_student
//如果这里的属性名或者表名为Schoolstudent,那么数据库的名字就会生成schoolstudent
//例如这里在数据库的表名就为 info
typeInfostruct{//以下的列名必须大写字母开头,否则数据库将无法获取
Idint
UserNamestring
Ageint
Propertyint
}
//例如这里在数据库的表名就为 homeinfo
//假设该结构为 type HomeInfo struct{...} 那对应的表名就为: home_info
typeHomeinfostruct{//以下的列名必须大写字母开头,否则数据库将无法获取
Idint
Usernamestring
Ageint
Propertyint
}
//------------beego注册表-------------------------
//registermodel注册表,可以单个,可以多个
orm.RegisterModel(new(Info),new(Homeinfo))
//createtable创建表(创建所有注册的表,如果不存在,就会创建)
// 第一个参数为数据库的别名,也就是他会在这个数据库里面查找是否有对应上面注册的表的名字以及内部结构,如果有出入,会根据对应添加,如果没有则会新建对应的表
// 第二个参数true时,会建新表,覆盖老的表,并清空数据,一般选择false
// 第三个参数之后补充,是否打印建表过程,true为显示打印过程
//(你可以自己设计一个 type school struct{...},然后注册之后再创建,如果数据库没有这个表,且第三个参数为true时,会出现一段建表的过程)
orm.RunSyncdb("default",false,true)
-----------------------------这里是controller设计-------------------------------------
1) 参数配置:
beego 目前支持 INI、XML、JSON、YAML 格式的配置文件解析,但是默认采用了 INI 格式解析,用户可以通过简单的配置就可以获得很大的灵活性。
beego 默认会解析当前应用下的conf/app.conf文件。
这里面大致分为两种,一种是系统默认参数,一种是自定义参数
系统默认参数:
方法为 beego.默认参数名
默认参数名代指 beego自身已经设置好的一些默认参数,有 AppName,
例如,默认的 appname = "myword"
获取appname 的值
s := beego.AppName
fmt.println(s)
设置appname 的值
beego.AppName = "yourword"
fmt.println(s)
自定义参数:
方法为 beego.AppConfig.类型名
类型名:
AppConfig 支持如下方法
Bool(key string) (bool, error)
Int(key
string) (int, error)
Int64(key string) (int64, error)
Float(key string) (float64, error)
String(key string) string
我们可以在指定的在指定的conf文件下(默认是conf/app.conf文件)设置我们的自定义配置信息
例如:
myblog = "小渣的博客"
获取该值
s,err:=beego.AppConfig.string("myblog")
if err == nil{
fmt.println(s)
}
如果要设置配置参数文件里的信息则使用set方法
具体用法:
err:=beego.AppConfig.Set("myblog","渣渣的博客")
if err ==nil{
fmt,println("OK")
}
Url构建
个人理解可以当作是路由的自动匹配的另外一个方式
这里我先写出一段代码
type MainController struct{
beego.Controller
}
func (c *MainController) Say(){
c.Ctx.WriteString("说话")
)
func (c *MainController) Buy(){
c.Ctx.WriteString("买买买")
)
func (c *MainController) Put(){
c.Ctx.WriteString("放下")
}
我们先看路由的自动匹配
注册路由的自动匹配
beego.AutoRouter(&controllers.MainController{}) //这里的controllers是我们导入的文件夹,具体看文档,很容易理解的
然后我们在模板下写入(模板就是里面的后缀名为tpl的文件也可以是html,里面的内容就是html的)
(注意,我们上面定义的三个方法都是自定义的函数,所以这里的method="get"可以去掉,beego会自动选择对应的方式)
//这里记得补上(这三行里 - 去掉)
然后去默认的本地连接 localhost:8080,点击【点击发送】按钮,就会进入到localhost:8080/Main/Buy页面,页面内显示的就是上面的Buy()函数所写的内容(页面会出现 买买买)
这里我们在模板里说些的/main/Buy 就是指自动匹配到前缀为Main的Controller上,也就是MainController,第二个参数为该Controller里的Buy函数
另外一种就是使用Url在模板上写的
我们写一个匹配规则路由,以及一个全匹配路由
beego.Router("/api/:last",&controllers.MainController{},"*:Say") //匹配规则路由,*.Say表示模板中任意的提交方式都会调用Say这个函数
beego.Router("/api/list",&controllers.MainController{},"get,post:Put") //全匹配路由,get,pos:Put表示只有Get,Post这两种提交方式才会调用这个函数
beego.AutoRouter(&controllers.MainController{})
接下来在模板中这样写
//这里记得补上(这三行里 - 去掉)
这个会配置到全匹配路由, 并且显示的是Buy函数里的,而不是模板中所写的Put函数,并且链接会变成localhost:8080/main/Buy
我们将MainController.Buy改成注册路由里的MaiController.Put,则会显示localhost:8080/api/list
如果是规则匹配的话,则这样写{{urlfor "MainController.Put" ":last" "sadad"}}
且模板中所写的路由,函数,以及参数,提交方法跟注册的路由对应的上,则链接会显示localhost:8080/api/sadad
如果发现页面还是变成了localhost:8080/main/Put 则自己再从细节中查看哪里出错
(表示我个人不懂的怎么总结,只能写出例子,然后自行理解)
个人的理解是,如果模板中所写链接与自动匹配的路由不能匹配的话,就会直接调用模板中指定的路由以及函数名称,然后连接就变成/路由前缀/函数名称(模板中写
action="/Main/Buy" 则链接就是 ..../Main/Buy)
反之全匹配的话,路径就会是注册的路由路径