Beego源码分析(转)

摘要 beego 是 @astaxie 开发的重量级Go语言Web框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 @astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。beego框架本身模块众多,无法简单描述所有的功能。我简单阅读了源码,记录一下beego执行过程。官方文档已经图示了beego执行过程图,而我会比较详细的解释beego的源码实现。 beego 是 @astaxie 开...阅读全文

2016-07-02 14:24 rainbowzc
阅读:1788 评论:0

go语言原生http库分析(1)

构建一个HTTP服务器的简单例子 package main import ( "net/http" ) func SayHello(w http.ResponseWriter, req *http.Request) { w.Write([]byte("Hello")) } func main() { http.HandleFunc("/hello", SayHello) http.ListenAndServe(":8001", nil) } 当我们访问 地址IP:8001/hello 就会得到“...阅读全文

2016-07-03 23:36 idwtwt
阅读:3566 评论:0

Go的pprof使用

go中有pprof包来做代码的性能监控,在两个地方有包: net/http/pprof runtime/pprof 其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来 pprof包 web 服务器 如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态。这个时候就可以选择net/http/pprof。你只需要引入包_"net/http/pprof", 然后就可以在浏览器中使用http://localhos...阅读全文

2016-07-04 09:33 davygeek
阅读:1779 评论:0

golang时间正反格式化

在工作中遇到要将时间格式化,就整理了下时间正反格式化: //当前时间戳 fmt.Println(time.Now().Unix()) //当前时间戳格式化 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) //时间戳格式化 str_time := time.Unix(1389058332, 0).Format("2006-01-02 15:04:05") fmt.Println(str_time) //时间反格式化成时间戳(月份必须是mo...阅读全文

2016-07-04 13:38 weidao
阅读:4225 评论:0

控制阵列 Golang 的增长

如果你是Golang 新手,并对它的数组(切片)不太了解,你可能想从这里开始this introduction。 如今,当我们谈论数组时,开发者可能会谈论数组的两种行为之一:一种是静态的(或称为固定数组),另一种是动态的。静态数组的固定长度在定义的时候被初始化完成。动态数组(一般地)用一个静态数组定义,但是当需要的时候,能够增长其长度。那么这是如何实现呢?当你要在动态数组中添加一项条目时,如果数组下面的固定长度已经满了,它会创建一个更大的数组并且将数据拷并到并覆盖更大的数组中。这种增长和拷贝可能...阅读全文

阅读:1726 评论:0

gogs详细配置

sudo apt-get update sudo apt-get upgrade sudo adduser git //创建用户 密码 ******* su git//切换到git用户 cd ~ //进入用户git根目录 sudo apt-get install git //安装git git --version //检查git是否安装成功 sudo apt-get install mysql-server //安装mysql数据库 账户:root 密码:******** mysql --ver...阅读全文

2016-08-21 23:44 chinajava
阅读:2520 评论:1

Go的50度灰:开发者要注意的陷阱和常见错误

Go是一门简单有趣的语言,但与其他语言类似,它会有一些技巧。。。这些技巧的绝大部分并不是Go的缺陷造成的。如果你以前使用的是其他语言,那么这其中的有些错误就是很自然的陷阱。其它的是由错误的假设和缺少细节造成的。 如果你花时间学习这门语言,阅读官方说明、wiki、邮件列表讨论、大量的优秀博文和Rob Pike的展示,以及源代码,这些技巧中的绝大多数都是显而易见的。尽管不是每个人都是以这种方式开始学习的,但也没关系。如果你是Go语言新人,那么这里的信息将会节约你大量的调试代码的时间。 初级 开大括号...阅读全文

2016-08-22 11:56 borey
阅读:39687 评论:2

Go语言基础:make,new, len, cap, append, delete方法

前面提到不少go的内建函数,这篇文章学习下如何使用。。 make 先拿 make 开刀,可是一开始我就进入了误区,因为我想先找到他的源码,先是发现 src/builtin/builtin.go 中有 func make(Type, size IntegerType) Type ,可是这里只有两个参数,跟我所了解的 make 是个可变参数不太一样,于是我继续搜索源码包是否还有其它 make 函数原型的声明,但都是徒劳。 于是找度娘,一点信息都没有。还是 google 吧,找了一堆的英文解释,发现两...阅读全文

阅读:8734 评论:0

[独家] Go1.8大幅改进了海量对象的GC性能(不同语言的横向对比)

 众所周知,Go1.7版本及之前的版本都是针对高并发下的系统吞吐进行优化,对海量对象存储时的优化力度并不够。下个版本就是1.8了,那么1.8会给我们带来这种惊喜吗?请继续往下看。 本次benchmark使用多语言实现,测量的是一个web服务,该服务通过一个大型的hashtable存储了250K个对象。 该服务还满足了下述3个前提条件: 1.每次http请求都会添加一个新对象,并且在对象数大于250K时移除一个旧的 2.每一个对象都是1KB大小的[]byte类型,并且进行了初始化 3.程序监听8...阅读全文

2016-09-18 10:16 abv123456789
阅读:2921 评论:0

谈谈一些关于mgo的用法

前言 最近在项目中使用mongodb进行简单的数据分析,在使用mongodb驱动mgo时遇到一些问题,比如在mongodb中执行命令成功,到了mgo中就执行失败。在这里谈一谈实践过程中遇到的问题,基础的用法不再说明了,可以自行百度。 使用 查找(Find) 这个估计是mongodb里用的最多的了吧,mgo中使用Find(query interface{}),query参数一般传入[]bson.M。下面给个例子: m := bson.M{ "CurTimestamp": bson.M{ "$gte...阅读全文

2017-05-11 00:00:51 pinecone
阅读:5448 评论:0

Go 语言机制之逃逸分析(Language Mechanics On Escape Analysis)

## 前序(Prelude) 本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针、栈、堆、逃逸分析和值/指针传递。这是第二篇,主要介绍堆和逃逸分析。 以下是本系列文章的索引: 1. [Go 语言机制之栈与指针](https://studygolang.com/articles/12443) 2. [Go 语言机制之逃逸分析](https://studygolang.com/articles/12444) 3. [Go 语言机制之内存剖析]...阅读全文

2018-02-26 11:56:18 gogeof
阅读:15051 评论:13

Go 语言机制之内存剖析(Language Mechanics On Memory Profiling)

## 前序(Prelude) 本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针、栈、堆、逃逸分析和值/指针传递。这是第三篇,主要介绍堆和逃逸分析。(译者注:这一篇可看成第二篇的进阶版) 以下是本系列文章的索引: 1. [Go 语言机制之栈与指针](https://studygolang.com/articles/12443) 2. [Go 语言机制之逃逸分析](https://studygolang.com/articles/12444...阅读全文

2018-02-26 12:12:59 gogeof
阅读:7107 评论:2

Go 执行追踪器(execution tracer)

## 概述 你有没有好奇过 Go 运行时是如何调度 goroutine 的?有没有深入研究过为什么有时候加了并发但是性能没有提高? Go 提供了执行跟踪器,可以帮助你诊断性能问题(如延迟、竞争或低并发等)、解决前面那些疑问。 Go 从 1.5 版本开始有执行跟踪器这么一个工具,原理是:监听 Go 运行时的一些特定的事件,如: 1. goroutine的创建、开始和结束。 2. 阻塞/解锁goroutine的一些事件(系统调用,channel,锁) 3. 网络I/O相关事件 ...阅读全文

2018-03-21 11:31:09 polaris
阅读:9341 评论:0

golang实现RPC的几种方式

什么是RPC 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。维基百科:远程过程调用 用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。打个比方,我用go语言写了个获取用户信息的方法getUserInfo,并把go程序部署在阿里云服务器上面,现在我有一...阅读全文

2018.08.20 23:00 豆瓣奶茶
阅读:60834 评论:3

Go 语言的内存管理

这篇博客是我在维尔纽斯的 [Go Meetup](https://www.meetup.com/Vilnius-Golang/events/249897910/) 演讲的总结。如果你在维尔纽斯并且喜欢 Go 语言,欢迎加入我们并考虑作演讲 在这篇博文中我们将要探索 Go 语言的内存管理,首先让我们来思考以下的这个小程序: ```go func main() { http.HandleFunc("/bar", func(w http.ResponseWriter, r *h...阅读全文

阅读:5770 评论:0

golang中用链表实现栈

node通过prev字段进行关联,stack维护栈顶节点 stack.go package stack type Stack struct { top *node length int } type node struct { value interface{} prev *node } // 创建一个栈 func New() *Stack { return &Stack{nil, 0} } // 取栈长度 func (s *Stack) Len() int { return s.length ...阅读全文

2019-07-12 20:03:29 ustb80
阅读:903 评论:0

golang 手撸 平衡二叉树

golang 手撸 平衡二叉树 树是一种计算机数据结构中非常常用的一种结构,其中就包含了:平衡二叉树,这种树是一种特殊的二叉查找树(二叉查找树也就是,右孩子大于其父结点,左孩子小于其父结点的树),但是简单的二叉查找树存在的问题就是不平衡,最差的查找效率为O(n),故就有人发明了一种平衡的额二叉查找树。 特点 平衡二叉树是一种二叉查找树 每个结点的左子树的高度减去右子树的高度的绝对值不超过1 空树和左右子树都是平衡二叉树 相比红黑树,平衡二叉树比较适用于没有删除的情况 平衡因子 平衡二叉树是在二叉...阅读全文

2019.07.14 16:43 _AlphaBaby_
阅读:2331 评论:1

gops 工作原理

目录 gops 是什么 gops 的原理 最后 网上已经有一篇《gops 工作原理》了,但我觉得其阐之未尽,想以自己的理解来讲述一下。 gops 是什么 gops(Go Process Status) 是 Google 出品的一个命令行工具,类似于 linux 自带的 ps 命令,gops 命令用于显示当前系统中 go 开发的程序的进程状态。形如: $ gops 983 980 uplink-soecks go1.9 /usr/local/bin/uplink-soecks 52697 5269...阅读全文

2018-07-12 00:00 Wolfogre's Blog
阅读:1639 评论:0

Golang三色标记、混合写屏障GC模式图文全分析

原创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次...阅读全文

阅读:10063 评论:6