分类 go articles

Cookie 和 Session

Cookie Cookie的由来 HTTP协议是无状态的,这就存在一个问题。 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的……

Continue reading

Gin框架介绍及使用

Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上Gin。 Gin框架介绍 Go世界里最流行的Web框架,Github上有32K+star。 基于htt……

Continue reading

gin框架路由拆分与注册

gin框架路由拆分与注册 基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。 package main import ( "net/http" "github.com/gin-gonic/gin" ) func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello q1mi!", }) } func main() { r := gin.Default() r.GET("/hello", helloHandler) if err := r.Run(); err != nil { fmt.Println("startup service failed, err:%v\n", err) } } 路由拆分成单独文件或包 当项目的规模增大后就不太适合继续在项目的main.go文件……

Continue reading

Go 语言基础之反射

变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息。 值信息:程序运行过程中可动态变化的。 反射介绍 反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信……

Continue reading

Go 语言基础之并发

基本概念 首先我们先来了解几个与并发编程相关的基本概念。 串行、并发与并行 串行:我们都是先读小学,小学毕业后再读初中,读完初中再读高中。 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。 并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。 进程、线程和协程 进程(……

Continue reading

Go操作MySQL—— sql 使用指南

Go操作MySQL 连接 Go语言中的 database/sql 包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用 database/sql 包时必须注入(至少)一个数据库驱动。 我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动 下载依赖 go get -u github.com/go-sql-driver/mysql 使用MySQL驱动 func Open(driverName, dataSourceName string) (*DB, error) Open打开一个 dirverName 指……

Continue reading

Go语言基础之error接口

Error接口和错误处理 Error 接口 Go 语言中把错误当成一种特殊的值来处理,不支持其他语言中使用try/catch捕获异常的方式。 Error 接口 Go 语言中使用一个名为 error 接口来表示错误类型。 type error interface { Error() string } error 接口只包含一个方法——Error,这个函数需要返回一个描述错误信息的字符串。 当一个函数或方法需……

Continue reading

Go语言基础之map

Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 map 定义 Go语言中 map的定义语法如下: map[KeyType]ValueType 其中: KeyType:表示键的类型。 ValueType:表示键对……

Continue reading

Go语言基础之函数

函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 函数定义 Go语言中定义函数使用 func 关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概……

Continue reading

Go语言基础之切片

引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。 例如: func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ sum = sum + v } return sum } 这个求和函数只能接受[3]int类型,其他的都不支持。 再比如, a := [3]int{1, 2, 3} 数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素了。 切片 切片(Sl……

Continue reading