-
Go By Example 系列:非阻塞 Channels 操作
所属栏目:[大数据] 日期:2020-12-16 热度:180
注:该系列文章全部来自 Go By Example 系列翻译而来,个人翻译水平以及理解水平有限,如要更加精确的理解,请看原文Go by Example: Non-Blocking Channel Operations。 在 channels (信道?) 上基本的 sends (发送) 和 receives (接收)是阻塞模式的。[详细]
-
golang test说明解读
所属栏目:[大数据] 日期:2020-12-16 热度:185
go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试 通过go help test可以看到go test的使用说明: 格式形如: go test [-c] [-i] [build flags] [packages] [flags for test binary] 参数解读: -c : 编译go test成为可执行的二进制文件[详细]
-
go 学习笔记 (二)
所属栏目:[大数据] 日期:2020-12-16 热度:104
特别注意: 编译器会认为一个未被使用的变量和导入包是个错误。[详细]
-
go语言入门-安装-编写-运行(一)
所属栏目:[大数据] 日期:2020-12-16 热度:110
windows平台 1.下载go语言包,解压到C:go 2.增加了2个全局变量,修改了1个变量 1、变量名:GOPATH 变量值:e:go GO的编译目录在e:go这个文件夹里. 2、变量名:GOROOT 变量值:c:go GO的主目录在c:go这个文件夹里. 3、在变量名:PTAH,开始增加C:gobin;[详细]
-
golang interface用法
所属栏目:[大数据] 日期:2020-12-16 热度:191
接口是一个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法, 就表示它"实现"了该接口无须在该类型上显式添加接口声明。 所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还 可以有其他方法。 (1)接口[详细]
-
golang time的几种用法
所属栏目:[大数据] 日期:2020-12-16 热度:151
首先说明golang 语言设计设有个叫 XXnuts的家伙,果然是个变态,把时间原点设计在了 2006-01-02 15:04:05 其实人家这个日期是有意义的: 2006-01-02T15:04:05Z07:00 每个数字的意义: 1 2 3 4 5 6 7 月 日 时 分 秒 年 时 区 常用的方法: 1 toTime格式化(P[详细]
-
Golang中使用log(二):Golang 标准库log的实现
所属栏目:[大数据] 日期:2020-12-16 热度:171
前一篇文章我们看到了Golang标准库中log模块的使用,那么它是如何实现的呢?下面我从log.Logger开始逐步分析其实现。 其源码可以参考官方地址 1.Logger结构 首先来看下类型Logger的定义: type Logger struct { mu sync.Mutex // ensures atomic writes; pro[详细]
-
Golang 性能忽然增加变慢10倍的现象,推测是编译器在spilt stack
所属栏目:[大数据] 日期:2020-12-16 热度:199
本测试分别执行三种测试: 1.程序嵌套调用时使用int; 2. 程序嵌套调用时使用 int +string; 3. 程序嵌套调用时使用 int+interface{}; 测试脚本如下: //stackSplitTestpackagemainimport("fmt""time")//测试函数嵌套多少次后,进行runtion.stackSplit,导致[详细]
-
Golang开发环境搭建(Notepad++、LiteIDE两种方式以及martini框架
所属栏目:[大数据] 日期:2020-12-16 热度:122
本文介绍两种Golang的开发环境一种基于notepad++、另一种基于liteide。 1、下载Golang语言的pkg:http://golangtc.com/download 直接点击安装,一路next。 2、程序员必备神器notepad++开发Golang环境很简单 一次点击:插件-Plugin Manger-Show Plugin Manger[详细]
-
Golang并发详解
所属栏目:[大数据] 日期:2020-12-16 热度:83
Go-简洁的并发 Posted on 2012-11-28 by yankay 多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释放多核的威力?是有的。随着Golang,Erlang,Scala等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一[详细]
-
golang字符、字符串的那些事儿
所属栏目:[大数据] 日期:2020-12-16 热度:121
通过下边的代码可以看出,r实质是int32,占用4个字节,值是25105;s是string,占用3个字节,值是e68891. 推断r应该是unicode编码的,s是utf8编码的. package main import( "fmt") func main() { r := '我' fmt.Printf("%tn",r) // %!t(int32=25105) s := "我" fmt.[详细]
-
golang sync mutex 互斥锁
所属栏目:[大数据] 日期:2020-12-16 热度:173
golang的多线程固然好用,但是有时候需要对数据进行上锁,防止数据被其它线程更改。那么sync包下的Mutex非常好用。 Mutex是一个互斥锁。可以作为struct的一部分,这样这个struct就会防止被多线程更改数据。 来个例子: package mainimport ("fmt""sync""time[详细]
-
Go中如何简洁的使用并发
所属栏目:[大数据] 日期:2020-12-16 热度:80
文章转载自:http://www.waylau.com/golang-clear-concurreny/ 多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释放多核的威力?是有的。随着Golang,Erlang,Scala等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面[详细]
-
Go语言的素数筛
所属栏目:[大数据] 日期:2020-12-16 热度:120
!-- lang: cpp --package mainimport ("fmt""runtime""runtime/debug")// 返回生成自然数序列的管道: 2,3,4,...func GenerateNatural() chan int {ch := make(chan int)go func() {for i := 2; ; i++ {ch - i}}()return ch}// 管道过滤器: 删除能被素数整除[详细]
-
带buffer的chan能同步吗?
所属栏目:[大数据] 日期:2020-12-16 热度:144
具体看下面2个例子: 无 buffer 的: http://play.golang.org/p/RwPbCcueWh func main() {ch := make(chan bool)go func() {println("fuck buffer channel")-ch}()ch - true} 有buffer的: http://play.golang.org/p/YV9H6WPYuJ func main() {ch := make(chan b[详细]
-
50个阻塞的协程,不会有50个线程产生
所属栏目:[大数据] 日期:2020-12-16 热度:62
package main import ( _"os" "fmt" "time" ) func main() { for i:=0; i50; i++ { c := make(chan int) go func( index int,cp chan int ) {// //for { fmt.Println("before send to chan,index is ",index) cp-0 // will block fmt.Println("after send,in[详细]
-
golang utc时间转本地时间
所属栏目:[大数据] 日期:2020-12-16 热度:107
代码如下 now := time.Now()year,mon,day := now.UTC().Date()hour,min,sec := now.UTC().Clock()zone,_ := now.UTC().Zone()fmt.Printf("UTC 时间是 %d-%d-%d %02d:%02d:%02d %sn",year,day,hour,sec,zone)year,day = now.Date()hour,sec = now.Clock()zon[详细]
-
golang使用pprof检查goroutine泄露
所属栏目:[大数据] 日期:2020-12-16 热度:58
有一段时间,我们的推送服务socket占用很不正常,我们自己统计的同时在线就10w的用户,但是占用的socket竟然达到30w,然后查看goroutine的数量,发现已经60w+。 每个用户占用一个socket,而一个socket,有read和write两个goroutine,简化的代码如下: c,_ :=[详细]
-
我为什么选择go语言
所属栏目:[大数据] 日期:2020-12-16 热度:165
这里,我并不打算引起语言争论的口水仗,我并不是什么大牛,对语言的造诣也不深,只是想通过自己实际的经历,来说说为什么我在项目中选择go。 其他语言的经历 C++ 在接触go之前,我已经有多年的c++开发经验。主要用在游戏服务端引擎开发以及P2P上面,那可是[详细]
-
在golang中使用leveldb
所属栏目:[大数据] 日期:2020-12-16 热度:96
leveldb是一个很强悍的kv数据库,自然,我也希望能在go中使用。 如果有官方的go leveldb实现,那我会优先考虑,譬如这个,但是该库文档完全没有,并且在网上没发现有人用于实战环境,对其能否在生产环境中使用打上问号,保险起见,我还是决定不使用。 因为le[详细]
-
golang:高性能消息队列moonmq的简单使用
所属栏目:[大数据] 日期:2020-12-16 热度:136
在上一篇moonmq的介绍中(这里),我仅仅简短的罗列了一些moonmq的设计想法,但是对于如何使用并没有详细说明,公司同事无法很好的使用。 对于moonmq的使用,其实很简单,样例代码在这里,我们只需要处理好broker,consumer以及publisher的关系就可以了。 首[详细]
-
golang:一个高性能低精度timer实现
所属栏目:[大数据] 日期:2020-12-16 热度:191
在go自带的timer实现中,采用的是通常的最小堆的方式,具体可以参见这里。 最小堆能够提供很好的定时精度,但是,在实际情况中,我们并不需要这样高精度的定时器,譬如对于一个连接,如果它在2分钟以内没有数据交互,我们就将其删除,2分钟并不需要那么精确[详细]
-
golang:使用timingwheel进行大量ticker的优化
所属栏目:[大数据] 日期:2020-12-16 热度:188
Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。 通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器[详细]
-
Golang(8)Database NOSQL
所属栏目:[大数据] 日期:2020-12-16 热度:159
Golang(8)Database NOSQL Redis I am using redis 2.9.11 https://github.com/hoisie/redis https://github.com/astaxie/goredis Install the Driver go get github.com/astaxie/goredis First of all,easily set up my Redis DB on my local machine. I wil[详细]
-
Golang-interface(一 基本使用)
所属栏目:[大数据] 日期:2020-12-16 热度:174
github: https://github.com/ZhangzheBJUT/blog/blob/master/interface.md 一 接口概述 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在[详细]
