Go语言并发之美

简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。 并发模式之内核 这种并发模式的内核只需要协程和通道就够了。其中协程负责执行代码,通道负责在协程之间传递事件。 并发编程一直以来都...阅读全文

开源中国博客 2015-10-26 11:35 mickelfeng

关于Go语言,自定义结构体标签的一个妙用.

在Go中首字母大小写,决定着这此变量是否能被外部调用, 例如:在使用标准库的json编码自定一的结构的时候: <pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-weight:600; color:#000080;">package</span><span style=" color:#c0c0c0;"> </span>main import ( "encoding/json" "fmt" ) type T s...阅读全文

CSDN博客 2015-07-10 13:32 fyxichen

golang入门-安装及环境

golang官方二进制分发包包括FreeBSD, Linux, Mac OS X (Snow Leopard/Lion), and Windows等平台,包括32位、64位等版本。 我自己使用的是windows 32位分发包,MSI格式的,下载地址为:http://code.google.com/p/go/downloads/list golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序。 环境变量说明: $GOROOT 指向golang安装之后的根...阅读全文

开源中国博客 2015-10-26 11:39 mickelfeng

Notepad++配置Python与gcc、go

Notepad配置Python: 1.安装Python 2.在Notepad中写好一个python程序,按F5运行,输入 cmd /k E:/Applications/Python27/python.exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT 保存, 其中E:/Applications/Python27/python.exe为你的python路径。 Notepad配置gcc: 1.安装MinGW 2.配置环境变量(将MinGW的bin目录添加到Path变量...阅读全文

CSDN博客 2015-10-23 13:28 baalhuo

[Golang] 从零开始写Socket Server(6)【完结】:日志模块的设计与定时任务模块

好久没写文章啦。。。今天把golang挖的这个坑给补完吧~ 作为一个Server,日志(Log)功能是必不可少的,一个设计良好的日志模块,不论是开发Server时的调试,还是运行时候的维护,都是非常有帮助的。 因为这里写的是一个比较简化的Server框架,因此我选择对Golang本身的log库进行扩充,从而实现一个简单的Log模块。 在这里,我将日志的等级大致分为Debug,Operating,Error 3个等级,Debug主要用于存放调试阶段的日志信息,Operateing用于保存Serve...阅读全文

CSDN博客 2015-10-21 16:50 ahlxt123

golang 导入包

库有两种:静态库(.a、.lib)和动态库(.so、.dll) golang貌似不支持动态库(待确认。。。) go 中的 package 首先是要知道你的环境变量 [GOPATH] [GOPATH]目录下 创建以下目录 /bin /pkg /src src中 新建文件夹mymath [GOPATH]/src/mymath/math.go package mymath import ( "fmt" ) // Sqrt returns an approximation to the square r...阅读全文

9.5android线程优先级,go和rust比较

线程优先级设置: http://droidyue.com/blog/2015/09/05/android-process-and-thread-schedule-nice/ linux的优先级设置:sudo renice -n 0 -p 24161 android优先级设置: Android中的线程优先级别目前规定了如下,了解了进程优先级与nice值的关系,那么线程优先级与值之间的关系也就更加容易理解。 THREAD_PRIORITY_DEFAULT,默认的线程优先级,值为0。 THREAD_P...阅读全文

CSDN博客 2015-09-05 22:44 u010499721

Go语言小贴士1 - io包

Go语言作为定位服务端编程的语言,处理文件和网络通讯是它主要的应用场景,不论是处理文件还是处理网络通讯,它们都被称之为IO编程,即-对计算机的输入输出设备进行编程。 Go的运行时有一个名叫io的包,从命名可想而知它在Go语言的实际应用中有多么重要的地位,Go语言的所有IO编程都绕不过这一个包。 所以正确的理解这个包,在Go语言的工程实践中是非常重要的,不论你是准备用Go语言处理文件还是处理网络通讯,请务必先看这个包。 io包中大部分是接口定义,其中io.Reader和io.Writer最为关键。...阅读全文

达达的主页 2016-06-15 达达

Redigo--Go连接Redis

本文主要介绍go Web开发中操作redis。 Redigo是go连接Redis的扩展包,用此包时需先执行: go get github.com/garyburd/redigo/redis 安装完后,在文件中导入redigo即可。 连接redis的样例如下: [html] view plaincopy import ( "fmt" // 导入redigo扩展包 "github.com/garyburd/redigo/redis" ) // 从配置文件获取redis配置并连接 host := be...阅读全文

CSDN博客 2015-07-17 14:55 wkyb608

懒人通讯协议代码生成器fastbin

这一周撸了个懒人通讯协议代码生成器fastbin,这个工具会分析指定的Go代码,提取结构体信息,然后为每个结构体生成二进制序列化和反序列化的方法。 生成出来的代码符合encoding包中定义的BinaryMarshaler和BinaryUnmarshaler接口要求,此外还支持更高效的序列化和反序列化方式。 fastbin使用的序列化格式并没有任何特别之处,没有Protobuf的可选字段也没有Flatbuffer的随机访问功能,简单到可以说是简陋。 之所以开发这个工具完全是从项目开发流程的角度出...阅读全文

达达的主页 2015-12-21 达达

Go_Json_HTMLEscape_Compact

package main import ( "bytes" "encoding/json" "fmt" "io" "strings" ) //HTMLEscape 函数将添加Buffer中的特殊字符串进行转义(Buffer中本来就有的字节不会转义只会转义后来添加的) //Compact 对这些特殊字符不进行转义 但是有一个作用就是在拼接字符串时 如果后面的字符串有问题那么不添加到Buffer中相当于自动帮我们检查了 //Compact 是个很有用的函数试想一下如果不用Compact直接拼接字符串...阅读全文

CSDN博客 2014-09-03 22:46 u012807459

PAT:05-1. List Components (25),Go语言解答

题目大概意思:给定一个有N个顶点和E个边的无向图,请分别用DFS和BFS遍历无向图。假定顶点编号为0到N-1,在遍历的时候总是从最小编号的顶点出发,在访问相邻结点的时候,按升序的方式访问。 For a given undirected graph with N vertices and E edges, pleaselist all the connected components by both DFS and BFS. Assume thatall the vertices are numb...阅读全文

CSDN博客 2015-09-25 11:02 u013564276

内存数据库的事务怎么做

上周我在Gopher China的分享内容中有讲到我们游戏服务器上用了一套自己开发的内存数据库,它从MySQL映射数据库结构,并且支持事务。 可能因为当时讲的比较匆忙,加上PPT的篇幅有限,有些朋友对这部分还是有疑问,回来以后比较多朋友问我这个内存数据库事务怎么实现的,所以我趁今天有空门写这一篇文章来细讲一下这个无用技能。 在直接用数据库的时候,我们都体验过事务(没体验过请自行实验),当一个业务需要多步骤的数据非查询操作时,数据库事务机制可以帮我们保证数据的完整性,不至于出现像银行转账操作,钱款...阅读全文

Go语言黑魔法

今天我要教大家一些无用技能,也可以叫它奇技淫巧或者黑魔法。用得好可以提升性能,用得不好就会招来恶魔,嘿嘿。 黑魔法导论 为了让大家在学习了基础黑魔法之后能有所悟,在必要的时候能创造出本文传授之外的属于自己的魔法,这里需要先给大家打好基础。 学习Go语言黑魔法之前,需要先看清Go世界的本质,你才能获得像Neo一样的能力。 在Go语言中,Slice本质是什么呢?是一个reflect.SliceHeader结构体和这个结构体中Data字段所指向的内存。String本质是什么呢?是一个reflect.S...阅读全文

达达的主页 2015-04-23 达达

Go-类型断言

Java当中有instanceof这样的关键字判断类型 Go当中自然也有相应的方法来判断类型 即Comma-ok断言 写法为value, ok := em.(T) 如果确保em 是同类型的时候可以直接使用value:=em.(T)一般用于switch语句中下面将会讲解到 em代表要判断的变量 T代表被判断的类型 value代表返回的值 ok代表是否为改类型 类型断言应该一看就懂 在这里就不再介绍了主要是介绍我自己碰到的几个问题 1 em必须为initerface类型才可以进行类型断言 比如如下代...阅读全文

CSDN博客 2014-06-11 14:30 u012807459