[TOC]一、Context作用context.Context是Go中定义的一个接口类型,从1.7版本中开始引入。其主要作用是在一次请求经过的所有协程或函数间传递取消信号及共享数据,以达到父协程对子协程的管理和控制的目的。需要注意的是context.Context的作用范围是一次请求的生命周期,即随着请求的产生而产生,随着本次请求的结束而结束。二、基本数据结构在context包中,conte...
[TOC]前言在开始本章节之前还是要反复唠叨一句话:Go channel设计模式是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。如果不理解的可以看之前的文章,本章节不再过多赘述。一、核心数据结构1.1 hchanGo语言channel是first-class的,意味着它可以被存储到变量中,可以作为参数传递给函数,也可以作为函数的返回值返回。作为Go语言的核心特征之一,虽然...
[TOC]一、channel的发送与接收特性Go 语言中最常见的、也是经常被人提及的设计模式就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。在很多主流的编程语言中,多个线程传递数据的方式一般都是共享内存,为了解决线程竞争,我们需要限制同一时间能够读写这些变量的线程数量,然而这与 Go 语言鼓励的设计并不相同。下面是多线程之间使用共享内存实现传递数据图示。虽然我们在 Go...
[TOC]一、概述beego orm包除了支持model查询的方式,也支持直接编写sql语句的方式查询数据。sql原生查询有如下特点:使用 Raw SQL 查询,无需使用 ORM 表定义多数据库,都可直接使用占位符号 ?,自动转换查询时的参数,支持使用 Model Struct 和 Slice, Array在遇到比较复杂的查询的时候,使用sql语句更加灵活和直观,也比较容易把控sql查询的性...
[TOC]前言ORM 以 QuerySeter 来组织查询,每个返回 QuerySeter 的方法都会获得一个新的 QuerySeter 对象。一、基本使用o := orm.NewOrm() // 获取 QuerySeter 对象,user 为表名 qs := o.QueryTable("user") // 也可以直接使用 Model 结构体作为表名 qs = o.Q...
[TOC]一、介绍对象关系映射(Object Relational Mapping,简称ORM), 它的作用是映射数据库和对象之间的关系,方便我们在实现数据库操作的时候不用去写复杂的sql语句,把对数据库的操作上升到对于对象的操作。beego ORM 是一个强大的 Go 语言 ORM 框架。它的灵感主要来自 Django ORM 和 SQLAlchemy。它支持go语言中所有的类型存储,允许...
[TOC]一、请求参数处理beego.Controller基础控制器,提供了多种读取请求参数的函数,下面分别介绍各种获取参数的场景。1.1 默认获取参数方式beego.Controller基础控制器提供了GetXXX序列获取参数的函数, XXX指的就是返回不同的数据类型。示例// 处理get请求 func (this *UserController) Get() { // 获取参数,...
一、介绍控制器函数是 beego的 RESTful api 的实现方式,在 beego 的设计中,控制器就是一个嵌套了beego.Controller的结构体对象。示例// 定义一个新的控制器 type UserController struct { // 嵌套beego基础控制器 beego.Controller }前面介绍过,struct嵌套,就类似其他高级语言的 继承 ...
[TOC]前言beego存在三种方式的路由:固定路由、正则路由、自动路由,接下来详细的讲解如何使用这三种路由。一、基本路由该方式相当于直接将一个url路由和一个函数绑定起来。示例一package routers import ( "github.com/astaxie/beego" "github.com/astaxie/beego/conte...