如何使用go语言的beego框架的orm

Python011

如何使用go语言的beego框架的orm,第1张

models.go

============================

package main

import (

"github.com/astaxie/beego/orm"

)

type User struct {

Id int

Namestring

Profile *Profile `orm:"rel(one)"` // OneToOne relation

}

type Profile struct {

Id int

Age int16

User *User `orm:"reverse(one)"` // 设置反向关系(可选)

}

func init() {

// 需要在init中注册定义的model

orm.RegisterModel(new(User), new(Profile))

}

main.go

==============

package main

import (

"fmt"

"github.com/astaxie/beego/orm"

_ "github.com/go-sql-driver/mysql"

)

func init() {

//orm.RegisterModel(new(User))

orm.RegisterDataBase("default", "mysql", "ta3:ta3@/ta3?charset=utf8")

orm.RunSyncdb("default", false, true) // true 改成false,如果表存在则会给出提示,如果改成false则不会提示 , 这句话没有会报主键不存在的错误

}

func main() {

o := orm.NewOrm()

o.Using("default") // 默认使用 default,你可以指定为其他数据库

user := User{Id: 1}

err := o.Read(&user)

if err == orm.ErrNoRows {

fmt.Println("查询不到")

} else if err == orm.ErrMissPK {

fmt.Println("找不到主键")

} else {

fmt.Println(user.Id, user.Name)

}

}

执行结果:

create table `user`

-- --------------------------------------------------

-- Table Structure for `main.User`

-- --------------------------------------------------

CREATE TABLE IF NOT EXISTS `user` (

`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,

`name` varchar(255) NOT NULL,

`profile_id` integer NOT NULL UNIQUE

) ENGINE=InnoDB

create table `profile`

-- --------------------------------------------------

-- Table Structure for `main.Profile`

-- --------------------------------------------------

CREATE TABLE IF NOT EXISTS `profile` (

`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,

`age` smallint NOT NULL

) ENGINE=InnoDB

查询不到

第二次再执行:

table `user` already exists, skip

table `profile` already exists, skip

查询不到

如果 orm.RunSyncdb("default", false, true)改成 orm.RunSyncdb("default", false, false)

则执行结果不会提示。

国外很有多优秀的HTML5前端开发框架比如:JQueryMobile,TwitterBootstrap,Schena Touch, BackBone等等。

同样,也存在很多国内比较优秀的前端开发框架,其中中国互联网三巨头贡献了近一半:腾讯,阿里巴巴,百度。

框架不是万能的,选择和项目匹配的框架可以显著提高开发效率,但是也有可能带来代码的臃肿,选择合适的框架是最重要的。其中每个框架各有特点,还需要你自己把关。如:腾讯的JX比较适合构建和组织大规模、工业级的WebApp,腾讯内部的WebQQ、Q+等产品都是采用JX框架开发。

这里整理了一下文档,以附件形式分享给你吧~请收下~

之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在操作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。

这里我使用了一个原始的Go语言版本的 FunTester 测试框架,现在只有一个基本的方法,实在是因为Go语言特性太强了。框架设计的主要思路之一就是利用Go语言的闭包和方法参数特性,将一个 func() 当做性能测试的主题,通过不断运行这个 func() 来实现性能测试。当然还有另外一个思路就是运行一个多线程任务类,类似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象类,这样可以设置一些类的属性,绑定一些测试资源,适配更多的测试场景。

下面演示select的性能测试,这里我用了随机ID查询的场景。

这里我使用从35开始递增的ID进行删除。

这里使用了select的用例部分,随机ID,然后更新name字段,随机10个长度的字符串。

这里用到了 FunTester 字段都是随机生成。

到这里可以看出,性能测试框架用到的都是gorm框架的基础API使用,这里MySQL连接池的管理工作完全交给了gorm框架完成,看资料说非常牛逼,我们只需要设置几个参数。这个使用体现很像 HttpClient 设置 HTTP 连接池类似,这里我们也可以看出这些优秀的框架使用起来都是非常简单的。

PS:关于gorm的基础使用的请参考上一期的文章Go语言gorm框架MySQL实践。