
go 学习笔记
果子妈妈
上善若水
展开
-
beego 获取 Request Body 里的内容
在 API 的开发中,我们经常会用到 JSON 或 XML 来作为数据交互的格式,如何在 beego 中获取 Request Body 里的 JSON 或 XML 的数据呢?在配置文件里设置 copyrequestbody = true在 Controller 中 func (this *ObejctController) Post() { var ob转载 2017-10-18 13:51:00 · 8359 阅读 · 1 评论 -
go string
我们在上一节中讲过,Go中的字符串都是采用UTF-8字符集编码。字符串是用一对双引号("")或反引号(` `)括起来定义,它的类型是string。转载 2016-09-26 10:04:38 · 545 阅读 · 0 评论 -
Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动
Go语言的 database/sql 包的一个 MySQL驱动。特性轻量级与快速原生Go语言,没有C绑定,只有纯Go没有不安全的操作(类型转换等)动态处理崩溃的连接动态连接池支持大于16MB的查询完全 sql.RawBytes支持环境要求Go 1以上MySQL (Version 4.1 or higher), MariaDB or Percona Server安装转载 2016-10-21 15:13:05 · 2071 阅读 · 0 评论 -
golang label breaks
我们在for多层嵌套时,有时候需要直接跳出所有嵌套循环, 这时候就可以用到go的label breaks特征了。先看一个范例代码:package mainimport ( "fmt" )func main() { fmt.Println("1")Exit: for i := 0; i for j :转载 2016-10-10 13:13:06 · 642 阅读 · 0 评论 -
windows平台下使用LiteIDE交叉编译golang
摘要: 在Windows平台使用LiteIDE编译golang程序为*.exe可执行文件,但是我们有时候需要编译linux下可执行的程序怎么办,我们在LiteIDE下加载跨编译选项,编译报错go build runtime: linux/amd64 must be bootstrapped using make.bat,我们如何解决这个问题呢?1,在windows环境下使用交叉编译,需转载 2016-09-20 10:39:07 · 2469 阅读 · 0 评论 -
创建go语言本地文档系统
由于某些原因,国内用户不能很好到访问golang.org,如何在本地建一个和官网一样到文档系统呢?在网上看来一个视屏资料,摘录如下:在console界面中输入一下命令: godoc -http=:80 //80可以换成没有被占用到任何端口。此时打开浏览器输入: http://localhost,官网到帮助文件瞬间就展示在你面前来。(go应该是最新到版本才会和官网到文档一样转载 2016-09-20 09:59:20 · 306 阅读 · 0 评论 -
Golang 1.0 文档使用。godoc ,go 命令 学习 ,本地运行 gotour
首先要安装环境 参考: http://toeo.iteye.com/blog/1470598 找了半天 没有 看明白 doc 的目录结构。 原来 doc 是web 展示的 !!! 本地 运行 web 版本 doc文档 输入 > godoc -http=:6060 然后转载 2016-09-19 20:25:10 · 2497 阅读 · 0 评论 -
解引用
“解引用”,我倒觉得可以从另一个角度理解,"*"的作用是引用指针指向的变量,引用其实就是引用该变量的地址,“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”。转载 2016-08-26 10:06:38 · 968 阅读 · 0 评论 -
Go语言interface详解
interfaceGo语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服。什么是interface简单的说,interface是一组method的组合,我们通过interface来定义对象的一组行为。我们前面一章最后一个例子中Student和Employee都能SayHi,虽转载 2016-08-25 20:30:20 · 862 阅读 · 0 评论 -
golang中使用timer的三种方式
// (A)time.AfterFunc(5 * time.Minute, func() { fmt.Printf("expired")}// (B) create a Timer objecttimer := time.NewTimer(5 * time.Minute)<-timer.Cfmt.Printf("expired")// (C) time.After() r转载 2016-09-26 11:40:40 · 3526 阅读 · 0 评论 -
kingshard: Go语言开发的高性能MySQL Proxy
kingshard是一个由Go开发高性能MySQL Proxy项目,kingshard在满足基本的读写分离的功能上,致力于简化MySQL分库分表操作;能够让DBA通过kingshard轻松平滑地实现MySQL数据库扩容。主要功能1. 读写分离。2. 跨节点分表。3. 客户端IP访问控制。4. 平滑上线DB或下线DB,前端应用无感知。5. 支持多个sl转载 2016-11-10 14:38:49 · 858 阅读 · 0 评论 -
Handler crashed with error can't find templatefile in the path 解决方法
一: 如果您的应用是不需要模板输出的,那么可以在配置文件或者在 main.go 中设置关闭自动渲染。配置文件配置如下:autorender = falsemain.go 文件中设置如下:beego.AutoRender = false用户无需手动的调用渲染输出模板,beego 会自动的在调用完相应的 method 方法之后调用 Render 函数,当然如果您的应用是不需原创 2017-10-18 11:07:40 · 17621 阅读 · 1 评论 -
Big Endian 和 Little Endian
一、字节序来自:http://ayazh.gjjblog.com/archives/1058846/谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是littl转载 2016-12-29 16:01:23 · 285 阅读 · 0 评论 -
C <-chan Time 用法
type Timer struct { C chan Time r runtimeTimer}C chan Time 表示C 是一个chan 类型,且chan 是只可写的,channel 中的类型是Time类型转载 2017-01-06 15:26:09 · 902 阅读 · 0 评论 -
【GOLANG】Go语言学习-select用法
golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。示例:ch1 := make (chan int, 1)ch2 := make (chan int, 1)...select {case <-ch1: fmt.Println("ch1 pop one el转载 2017-01-06 15:49:21 · 316 阅读 · 0 评论 -
Go语言的传参和传引用
所有类型的函数参数都是传值的!包括slice/map/chan等基础类型和自定义的类型都是传值的.但是因为slice和map/chan底层结构的差异, 又导致了它们传值的影响并不完全等同.重点归纳如下:GoSpec: the parameters of the call are passed by value!map/slice/chan 都是传值, 不是传引用map/chan转载 2016-12-27 13:54:13 · 402 阅读 · 0 评论 -
golang fmt.printf()
ackage mainimport "fmt"import "os"type point struct { x, y int}func main() {//Go 为常规 Go 值的格式化设计提供了多种打印方式。例如,这里打印了 point 结构体的一个实例。 p := point{1, 2} fmt.Printf("%v\n", p) // {1 2}//如果转载 2016-11-01 17:20:56 · 819 阅读 · 0 评论 -
Golang-interface(四 反射)
一 反射的规则反射是程序运行时检查其所拥有的结构,尤其是类型的一种能力;这是元编程的一种形式。它同时也是造成混淆的重要来源。每个语言的反射模型都不同(同时许多语言根本不支持反射)。本节将试图明确解释在 Go 中的反射是如何工作的。1. 从接口值到反射对象的反射在基本的层面上,反射只是一个检查存储在接口变量中的类型和值的算法。 在 reflect 包中有两个类型需要了转载 2016-11-01 14:57:03 · 622 阅读 · 0 评论 -
kingshard架构设计和功能实现
kingshard开源有一段时间了,有些热心的用户发邮件来咨询kingshard的设计和实现问题。于是周末抽空写了一篇介绍kingshard架构和功能实现的文章,希望通过本文能够让用户对kingshard有更深的了解。下面分模块来介绍kingshard的核心组件的设计和实现。1. 整体架构kingshard采用Go开发,充分地利用了Go语言的并发特性。Go语言在并发方面,做了很好的转载 2016-11-10 15:00:47 · 453 阅读 · 0 评论 -
packets.go:32: unexpected EOF & write tcp 192.168.3.90:3306: broken pipe
golang这边实现的连接池只提供了SetMaxOpenConns和SetMaxIdleConns方法进行连接池方面的配置。在使用的过程中有一个问题就是数据库本身对连接有一个超时时间的设置,如果超时时间到了数据库会单方面断掉连接,此时再用连接池内的连接进行访问就会出错。packets.go:32: unexpected EOFpackets.go:118: write tcp 192.16转载 2016-08-12 16:54:16 · 5196 阅读 · 0 评论 -
举例讲解Go语言中函数的闭包使用
和变量的声明不同,Go语言不能在函数里声明另外一个函数。所以在Go的源文件里,函数声明都是出现在最外层的。“声明”就是把一种类型的变量和一个名字联系起来。Go里有函数类型的变量,这样,虽然不能在一个函数里直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量,此时的函数称为闭包(closure)。例:复制代码代码如下:packag转载 2016-08-05 18:27:38 · 899 阅读 · 0 评论 -
goroutine
goroutine 是由 Go 运行时环境管理的轻量级线程。go f(x, y, z)开启一个新的 goroutine 执行f(x, y, z)f,x,y 和 z 是当前 goroutine 中定义的,但是在新的 goroutine 中运行 f。goroutine 在相同的地址空间中运行,因此访问共享内存必须进行同步。sync 提供了这种可能,不过在 Go转载 2016-06-15 19:48:08 · 375 阅读 · 0 评论 -
Stringers golang
Stringers一个普遍存在的接口是 fmt 包中定义的 Stringer。type Stringer interface { String() string}Stringer 是一个可以用字符串描述自己的类型。`fmt`包 (还有许多其他包)使用这个来进行输出。转载 2016-06-15 19:40:10 · 279 阅读 · 0 评论 -
golang的闭包和普通函数调用区别
先看一段程序 package mainimport ( "fmt") func main() { a := []int{1, 2, 3} for _, i := range a { fmt.Println(i) defer p(i) } } func p(i int) { f转载 2016-06-15 19:29:31 · 785 阅读 · 0 评论 -
beego任务定时执行,延迟执行
import ("github.com/astaxie/beego""github.com/astaxie/beego/toolbox") cronExpress := beego.AppConfig.String("xxxxx.xxxxx")if cronExpress == "" {cronExpress = "* * */1 * * *" //默认一个小时转载 2016-06-30 20:20:59 · 3573 阅读 · 0 评论 -
项目路由设置
面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧:package mainimport ( _ "quickstart/routers" "github.com/astaxie/beego")func main() { beego.Run()}我们看到main函数是入口函数,但是转载 2016-06-30 19:59:20 · 780 阅读 · 0 评论 -
kingshard--一个支持sharding的MySQL Proxy项目
kingshard简介kingshard(https://github.com/flike/kingshard)是一个由Go开发高性能MySQL Proxy项目,kingshard在满足基本的读写分离的功能上,致力于简化MySQL分库分表操作;能够让DBA通过kingshard轻松平滑地实现MySQL数据库扩容。主要功能:1.读写分离。2.跨节点分表。3.客户端IP访问控制转载 2016-06-30 19:44:40 · 780 阅读 · 0 评论 -
关于Goroutine的原理
原理上的内容比较多,比如goroutine启动的时候要执行哪些相关的操作,一点一点的补充一下。channel的基本原理channel是go语言中的特殊的机制,既可以同步两个被并发执行的函数,又可以让这两个函数通过相互传递特定类型的值来进行通信。事实上这也是channel的两个主要功能。按照通道在初始化时是否有缓冲值,又可以分为缓冲通道与非缓冲通道。通道初始化的时候也还是需要转载 2016-06-11 22:46:06 · 777 阅读 · 0 评论 -
Coroutine及其实现
线程是内核对外提供的服务,应用程序可以通过系统调用让内核启动线程,由内核来负责线程调度和切换。线程在等待IO操作时线程变为unrunnable状态会触发上下文切换。现代操作系统一般都采用抢占式调度,上下文切换一般发生在时钟中断和系统调用返回前,调度器计算当前线程的时间片,如果需要切换就从运行队列中选出一个目标线程,保存当前线程的环境,并且恢复目标线程的运行环境,最典型的就是切换ESP指向目标线程内转载 2016-06-11 21:10:48 · 302 阅读 · 0 评论 -
channel
channel 是有类型的管道,可以用 channel 操作符 对其发送或者接收值。ch <- v // 将 v 送入 channel ch。v := (“箭头”就是数据流的方向。)和 map 与 slice 一样,channel 使用前必须创建:ch := make(chan int)默认情况下,在另一端准备好之前,发送和接收都会阻塞。这使得 gorou转载 2016-06-15 19:52:12 · 26236 阅读 · 0 评论 -
select golang
selectselect 语句使得一个 goroutine 在多个通讯操作上等待。select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支。当多个都准备好的时候,会随机选择一个。转载 2016-06-15 20:07:47 · 304 阅读 · 0 评论 -
Golang之chan/goroutine
最近在team内部培训golang,目标是看看golang能否被C工程师快速掌握。我定了个一个月,共计20小时的培训计划,首先花10个小时(两周,每天1小时)让大家掌握golang的基本要素,能写一些入门级的程序,之后再花两周时间做一个1000行代码规模的Proof of concept项目。为了能在培训的slides上直接运行go code,我做了个简单的 coderunnerd ,可以接受we转载 2016-06-23 20:31:24 · 897 阅读 · 0 评论 -
Golang中defer、return、返回值之间执行顺序的坑
Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱!先来运行下面两段代码:A. 无名返回值的情况package mainimport ( "fmt")func main() { fmt.P转载 2016-06-23 17:27:09 · 7540 阅读 · 1 评论 -
Goroutine + Channel 实践
背景在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Beego框架进行开发。之所以选择Golang,主要是考虑到开发的模块,都需要接受瞬时大并发、请求需要经历多个步骤、处理时间较长、无法同步立即返回结果的场景,Golang的goroutine以及channel所提供的语言层级的特性,正好可以满足这方面的需要。gorout转载 2016-06-20 20:47:17 · 687 阅读 · 0 评论 -
对于golang的goroutine并发处理任务时的理解
http://www.tuicool.com/articles/Efemq2转载 2016-06-20 20:43:06 · 472 阅读 · 0 评论 -
一个golang推送服务器集群:gopush-cluster
Terry-Mao/gopush-cluster 是一个支持集群的comet服务(支持websocket,和tcp协议)。特性轻量级高性能纯Golang实现支持消息过期支持离线消息存储支持单个以及多个私信推送支持单个Key多个订阅者(可限制订阅者最大人数)心跳支持(应用心跳和tcp keepalive)支持安全验证(未授权用户不能订阅)多协议支持(websocket,tcp)详细的统计转载 2016-06-20 20:38:52 · 1549 阅读 · 0 评论 -
GO语言异常处理机制panic和recover分析
package mainimport ( "log" "strconv")//捕获因未知输入导致的程序异常func catch(nums ...int) int { defer func() { if r := recover(); r != nil { log.Println("[E]", r) } }() return转载 2016-06-20 20:30:29 · 335 阅读 · 0 评论 -
指针
指针Go 具有指针。 指针保存了变量的内存地址。类型 *T 是指向类型 T 的值的指针。其零值是 nil 。var p *int& 符号会生成一个指向其作用对象的指针。i := 42p = &i* 符号表示指针指向的底层的值。fmt.Println(*p) // 通过指针 p 读取 i*p = 21 // 通过指针 p 设置 i转载 2016-06-15 20:45:45 · 210 阅读 · 0 评论 -
数值常量
数值常量数值常量是高精度的 值 。一个未指定类型的常量由上下文来决定其类型。也尝试一下输出 needInt(Big) 吧。(int 可以存放最大64位的整数,根据平台不同有时会更少。)转载 2016-06-15 20:36:56 · 931 阅读 · 0 评论 -
Goroutine(协程)为何能处理大并发?
简单来说:协程十分轻量,可以在一个进程中执行有数以十万计的协程,依旧保持高性能。进程、线程、协程的关系和区别:进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。堆和栈的区别请参看:http://www转载 2016-06-11 20:55:37 · 366 阅读 · 0 评论