Go语言中文网 为您找到相关结果 91

golang读写锁RWMutex

读写锁是针对读写的互斥锁 基本遵循两大原则: 1、可以随便读,多个goroutine同时读 2、写的时候,啥也不能干。不能读也不能写 RWMutex提供了四个方法: func (*RWMutex) Lock // 写锁定 func (*RWMutex) Unlock // 写解锁 func (*RWMutex) RLock // 读锁定 func (*RWMutex) RUnlock // 读解锁 一、随便读 package main import ( "sync" "time" ) var m *sync.RWMutex func main() { m = new(sync.RWMutex) // 多个同时读 go read(1) go read(2) time.Sleep(2*time....阅读全文

博文 2015-03-04 白玉雄

优化 Go 中的 map 并发存取

Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource。每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁,并且是跨多个协程的,因此我们必须要考虑同步。 该函数从 map[string]*metricSource 中根据指定的 name 获取一个指向 metricSource 的指针,如果获取不到则创建一个并返回。其中要注意的关键点是我们只会对这个 map 进行插入操作。 简单实现如下:(为节省篇幅,省略了函数头和返回,只贴重要部分) var source *memorySource var present bool p.lock.Lock() // lock the mutex defer p.l...阅读全文

博文 April 2, 2015 88250

Go语言atomic原子操作

atomic是最轻量级的锁,在一些场景下直接使用atomic包还是很有效的。 下面内容摘秒自《GO并发编程实战》—— 原子操作: CAS操作的优势是,可以在不形成临界区和创建互斥量的情况下完成并发安全的值替换操作。 这可以大大的减少同步对程序性能的损耗。 当然,CAS操作也有劣势。在被操作值被频繁变更的情况下,CAS操作并不那么容易成功。 原子操作共有5种,即:增或减、比较并交换、载入、存储和交换 1. 增或减 被用于进行增或减的原子操作(以下简称原子增/减操作)的函数名称都以“Add”为前缀,并后跟针对的具体类型的名称。 不过,由于atomic.AddUint32函数和atomic.AddUint64函数的第二个参数的类型分别是uint32和uint64,所以我们无法通过传递一个负的数值来...阅读全文

博文 2015-03-11 15:44 xcltapestry

Install go1.5 for CentOS7

https://golang.org/doc/install 下载好后,通过FTPS,传递到Linux里去,放哪里随便你自己,因为被墙了,所以在Windows通过旋风下载了这个玩意儿。 你也可以: wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz //将go解压到/opt,个人喜好罢了 [root@localhost ~]# tar -C /opt -xzf ./go1.5.linux-amd64.tar.gz /*在末尾增加一下两行, GOPATH是工作目录, GOROOT表示指出go的根目录位置 ps:在自定义程序的安装位置后,需要设置这个 export GOROOT=/opt/go export PA...阅读全文

博文 2015-08-28 23:28 rootarvin

golang中sync.RWMutex和sync.Mutex区别

golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex func (m *Mutex) Lock() func (m *Mutex) Unlock()type RWMutex func (rw *RWMutex) Lock() func (rw *RWMutex) RLock() func (rw *RWMutex) RLocker() Locker func (rw *RWMutex) RUnlock() func (rw *RWMutex) Unlock() 其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再次...阅读全文

博文 2014-12-16 11:07 chenbaoke

golang gzip 压缩bytes 和解压

func main() { size := 1 datasSlice := make([][]byte, size) for i := 0; i < size; i++ { datasSlice[i], _ = ioutil.ReadFile("images/" + strconv.Itoa(i+1) + ".jpg") fmt.Println("raw size:", strconv.Itoa(i)+".jpg :", len(datasSlice[i])) } var b bytes.Buffer w := gzip.NewWriter(&b) defer w.Close() for i := 0; i < size; i++ { w.Write(datasSlice[i]) } w.F...阅读全文

博文 2014-03-03 10:17 咖啡伴侣

go中的读写锁RWMutex

读写锁是针对于读写操作的互斥锁。 基本遵循两大原则: 1、可以随便读。多个goroutin同时读。 2、写的时候,啥都不能干。不能读,也不能写。 解释: 在32位的操作系统中,针对int64类型值的读操作和写操作不可能只由一个CPU指令完成。如果一个写的操作刚执行完了第一个指令,时间片换给另一个读的协程,这就会读到一个错误的数据。 RWMutex提供四个方法: func (*RWMutex) Lock //写锁定 func (*RWMutex) Unlock //写解锁 func (*RWMutex) RLock //读锁定 func (*RWMutex) RUnlock //读解锁 代码实例: 1、可以随便读: package main import ( "sync" "time" ) v...阅读全文

博文 2015-05-02 21:26 baiyuxiong

C中调用go中的回调函数

在用go包装某些c库时(如glut),需要将go函数当作回调函数传递给c库(如glutDisplayFunc(&draw)中的draw函数,我想将go写的函数传过去),应该怎么做?我写了一个示例,但一直不成功,不知道为什么?麻烦知道的帮我解答一下。 代码如下: /* test.h */ extern void SetFunc(); /* test.c */ #include "test.h" #include "_cgo_export.h" void SetFunc() { InternalFunc(); } /* test.go */ package main // #include "test.h" import "C" ...阅读全文

主题 2013-04-19 17:03:40 shikuijie

linux 下 安装go

首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 这个版本的镜像地址。 按照说明cd 进入 /usr/local 目录,然后执行 wget -c http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 通过命令行下载资源包,wget是一个下载工具,-c是支持断点续传的参数。 下载完成后,解压 tar -C /usr/local -xzf go1.4beta1.linux-amd64.tar.gz 然后再cd 进入 go/src 目录,执...阅读全文

博文 2015-04-18 11:16 ilahsa

golang zip 压缩,解压(含目录文件)

每天学习一点go src。 今天学习了zip包的简单使用,实现了含目录的压缩与解压。 写了两个方法,实现了压缩、解压。 package ziptest import ( "archive/zip" "io" "os" "strings" ) //压缩文件 //files 文件数组,可以是不同dir下的文件或者文件夹 //dest 压缩文件存放地址 func Compress(files []*os.File, dest string) error { d, _ := os.Create(dest) defer d.Close() w := zip.NewWriter(d) defer w.Close() for _, file := range files { err := compress...阅读全文

博文 2016-07-05 20:01 xiaofengshuyu

CentOS 7.0 安装go 1.3.1

1.下载go安装包 golang中国上下载 2. 解压 tar -zxf go1.3.1.linux-amd64.tar.gz -C /usr/local/ 3. 修改 etc/profile 文件在文件后加入 export的几行,在unset下面直接加,不要有空行 4. 然后执行 source /etc/profile 刷新配置文件 5. 运行命令 go 测试go是否安装成功 6. 在usr/local/go/test 下 运行 go run helloworld.go 测...阅读全文

博文 2015-06-09 10:08 weixiaole

linux安装go语言的方式

今天折腾了一天的VPS,装了HHVM、FTP,装不成功VPN。 GO语言也安装完成了,但中途也遇到一些问题,主要还是英文的问题,所以说学计算机的人啊,必须先学好英语。 本文首发于:http://www.zzzzy.com/201411023370.html 言归正传,golang.org作为一个技术的官网,居然被墙了。天朝不会凡谷歌的东西都要墙掉吧?呵呵。 首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 这个版本的镜像地址。 按照说明cd 进入 /usr/local 目录,然后执行 wget -c htt...阅读全文

博文 2014-11-02 21:06 Skiychan

golang tar gzip 压缩,解压(含目录文件)

tar是用于文件归档,gzip用于压缩。仅仅用tar的话,达不到压缩的目的。我们常见的tar.gz就是用gzip压缩生成的tar归档文件。 go实现tar压缩与解压与zip类似,区别在于tar需要使用gzip进行处理。tar与zip的Header不同。代码如下 package tartest import ( "archive/tar" "compress/gzip" "io" "os" "strings" ) //压缩 使用gzip压缩成tar.gz func Compress(files []*os.File, dest string) error { d, _ := os.Create(dest) defer d.Close() gw := gzip.NewWriter(d) defe...阅读全文

博文 2016-07-06 12:27 xiaofengshuyu

Go语言资源自动回收技术

Go语言作为一个现代化的编程语言以及支持垃圾内存的自动回收特性(GC). 我们现在关注的是非内存资源的自动回收技术. 局部资源的管理 在讨论Go语言解决方案之前, 我们先看看C++是怎么管理资源的. C++中可以可以自动执行的代码主要是构造函数和析构函数. 因此, 很多资源的管理技术都是基于构造函数和析构函数实现. 比较常见的是C++的RAII(Resource Acquisition Is Initialization)技术, 即初始化中获取资源. 比如在多线程编程中用到的MutexLocker: struct MutexLock { Mutex *const mu_; MutexLock(Mutex *mu): mu_(mu) { mu_->Lock(); } ~MutexLock() ...阅读全文

博文 2013-09-16 21:59 chai2010

golang实现wav文件转换为mp3文件

本文并非golang内置的库进行wav转mp3,而是通过golang调用Linux的lame命令进行转换。 在Linux环境下,默认情况是没有安装lame,所以首先需要安装lame(个人保存下载文件:http://pan.baidu.com/s/1qWp71G4#path=%252Fsharesoft%252Flinux%252Flame)。 Linux lame 安装及使用: 1. 解压lame压缩文件:tar -vzxf lame-3.98.4.tar.gz 2. 转到解压后的文件目录,依次执行:“./configure --enable-shared”,“make”,“make install” 3. lame使用方法:lame xxx.wav xxx.mp3 (这样就能把xxx.wa...阅读全文

博文 2015-07-10 14:16 hezhixiong

在中国linux安装go语言的方式

今天折腾了一天的VPS,装了HHVM、FTP,装不成功VPN。 GO语言也安装完成了,但中途也遇到一些问题,主要还是英文的问题,所以说学计算机的人啊,必须先学好英语。 本文首发于:http://www.zzzzy.com/201411023370.html 言归正传,golang.org作为一个技术的官网,居然被墙了。天朝不会凡谷歌的东西都要墙掉吧?呵呵。 首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 这个版本的镜像地址。 按照说明cd 进入 /usr/local 目录,然后执行 wget -c htt...阅读全文

博文 2015-02-26 11:44 pkufergus

安装Golang 1.6及开发环境

安装Golang 1.6及开发环境=====================================> 下载软件 * go1.4.2.linux-amd64.tar.gz * go1.6.2.linux-amd64.tar.gz * liteidex29.linux-64-qt4.tar.bz2 * libpng-1.2.56.tar.xz: http://nchc.dl.sourceforge.net/project/libpng/libpng12/1.2.56/libpng-1.2.56.tar.xz 注意: Golang1.5+自举构建,执行src/all.bash需要$HOME/go1.4/bin/go > 安装步骤 * 安装go1.4 - 解压重名: tar -zvxf g...阅读全文

博文 2016-05-01 11:17 zolo

能上google的hosts更新2015-04-13

# Youtube # Youtube videos 119.161.83.27 r1---sn-25g7sm76.googlevideo.com 119.161.83.27 r2---sn-25g7sm76.googlevideo.com 119.161.83.27 r3---sn-25g7sm76.googlevideo.com 119.161.83.27 r4---sn-25g7sm76.googlevideo.com 119.161.83.27 r5---sn-25g7sm76.googlevideo.com 119.161.83.27 r6---sn-25g7sm76.googlevideo.com 119.161.83.27 r7---sn-25g7sm76.googlevide...阅读全文

博文 2015-04-13 11:23 miaozishao

Go语言zip解压.

package main import ( "archive/zip" "fmt" "io" "os" ) func main() { r, err := zip.OpenReader(`server_update_20151020.zip`) if err != nil { fmt.Println(err) return } for _, k := range r.Reader.File { if k.FileInfo().IsDir() { err := os.MkdirAll(k.Name, 0644) if err != nil { fmt.Println(err) } continue } r, err := k.Open() if err != nil { fmt.Println...阅读全文

博文 2015-10-20 10:24 fyxichen

go编程解数独

我编了个程序解数独题,试了很多题都能解出来,但碰到一道题解不了,好像是内存耗用太多之类的原因,其实感觉不应该会计算太多的。我想问下有没有人用go写过啊?帮解下这道题,如果能解出来,那就是我的代码有问题了,到时贴代码出来给大家看看。 000700001 900000628 602000590 000081005 070503000 090060070 000005000 200040086 040030000 0代表需要空白。 其实很怪,我将第一个填上5,马上就能解出来。 希望哪位帮解下...阅读全文

LiteIDE

今天刚刚接触go,电脑系统是64位Windows,用的ide是liteide,go环境是解压版的,今天发现一个比较离奇的问题: 编辑好项目后,点buildandrun报错,(Ctrl+R) ![1.PNG](http://studygolang.qiniudn.com/151108/cb73c8774b32ae4e8c26df0e09dc25a7.PNG) 但是,如果先build,后run的话就能正常运行,不知道哪位大牛知道是为什么??...阅读全文

go中利用hmset替换hset来提高redis的存取效率及并发goroutine可能遇到的问题

go 中直接利用hset向redis存入数据效率较低,当要存入的数据已知时,可以利用hmset 来替换hset进行存储。 var args []interface{}{"myhash"} for key,value := range fvs { args = append(args, key, value) } _, err := conn.Do("HMSET", args...) 注:fvs为对应的key,value的map映射,将该映射关系存入到redis中名字为myhash的域中, args...表示args slice中的顺序的所有元素。 hmset存储速度相对hset已经很快,但是利用go中goroutine并发hmset能取得更好的存储效果吗?答案是否定的。 当利用多个(10个)...阅读全文

博文 2014-10-08 20:59 chenbaoke

mac下Sublime text2的搭建

问题一:Mac OS怎么保存修改后的GOPATH的??我修改了,但是保存不了; 问题二:为什么调用math包或者自己写的包会找不到,sublim text显示如下:cannot find package "myMath" in any of: /usr/local/go/src/myMath (from $GOROOT) /Users/XYQ/Desktop/code_go/src/myMath (from $GOPATH) 本人是菜鸟,刚接触golang,请各位有经验的大神解...阅读全文

go的protobuffer安装

windows环境下: 1.首先,必须先的有go,默认安装在了C:\Go 2.然后下载protoc,https://code.google.com/p/protobuf/downloads/list,下一个二进制文件即可,为了方便,可以直接放到C:\GO\bin里面 3.配置GOPATH,这个就是你go工程的地方,应该早配置好了,比如D:\project\xxx 4.cmd里运行go get -u code.google.com/p/goprotobuf/{proto,protoc-gen-go},貌似win下面比较坑,会报错,所以可以分开输入go get -u code.google.com/p/goprotobuf/proto和go get -u code.google.com/p/go...阅读全文

博文 2013-12-10 17:06 esrrhs

golang互斥锁跟读写锁

golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能. type Mutex func (m *Mutex) Lock() func (m *Mutex) Unlock() type RWMutex func (rw *RWMutex) Lock() func (rw *RWMutex) RLock() func (rw *RWMutex) RLocker() Locker func (rw *RWMutex) RUnlock() func (rw *RWMutex) Unlock() 1、互斥锁 其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁...阅读全文

博文 2017-01-18 19:00:17 tree2013

<5> go 上下文传递context

有go有channal,slick,map,interface,func等等,其中func可以当作参数传递的这个功能也是很多动态语言支持的。 现在看下怎么使用 import ( "fmt" ) type Do struct { Name string } func (this Do) Lock() { fmt.Println(this.Name + " Lock ...") } func (this Do) UnLock() { fmt.Println(this.Name + " Unlock ~") } // 假设需要做加锁解锁 func Say() { do := Do{Name: "Say"} do.Lock() defer do.UnLock() fmt.Println("say d...阅读全文

博文 2015-11-19 21:17 a11101171

最新 IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法

1、下载并安装IDEA http://www.jetbrains.com/idea/download/ 下载免费版本就好了,反正高级版本大多功能用不到。 2、https://github.com/go-lang-plugin-org/go-lang-idea-plugin 下载zip包并解压。 跟着步骤走就行,用IDEA打开解压的项目。 设置sdk及相关配置 设置这几个模块的sdk 网上没有这一步骤,,被坑了不少时间:要选中这个: 编译,如果配置正确,会生成一个go.zip包在工程的bin目录下 安装go.zip插件 关闭之前的工程,新建工程,看是否可以选择go了? 配置一下go的sdk路径,大功告成。 版权声明:本文为博主原创文章,未经博主允许不得转载...阅读全文

博文 2015-09-09 16:03 lcj0304

golang 读写文件(一)

使用os的方式(会重写文件) package main import ( "fmt" "os" "time" ) func main() { f, err := os.OpenFile("/tmp/logs/test.log", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) //linux 路径 /*f, err := os.OpenFile("D:/tmp/logs/test.log", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)*/ //windows路径 if err != nil { fmt.Printf("open err%s", err) return } defer f.Close() //资源必须释放,函数...阅读全文

博文 2016-07-28 19:58 wtf0215-golang

golang学习的点点滴滴:锁的使用

package main import ( "fmt" "sync" "runtime" ) var counter int = 0 func Count(lock *sync.Mutex) { lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main() { lock := &sync.Mutex{} for i:=0;i<10;i++ { go Count(lock) // 并发执行 } for { lock.Lock() // 锁定 c := counter lock.Unlock() // 解锁 runtime.Gosched() // 把时间片让给别人 if c >= 10 { break } } ...阅读全文

博文 2014-09-30 22:08 亓斌哥哥

golang 二进制操作

http://blog.guoqiangti.com/?p=538 以前很少对二进制进行操作,在看effective go的时候,好像没有看到关于二进制操作符的说明.今天在看其他源码的时候,看到一些二进制操作符,不知道他的意思,所以就查查资料,温习一下. 按位或 | .| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1 等。 4|-5: 4的二进制形式为:00000000 00000000 00000000 00000100, -5的二进制形式为:11111111 11111111 11111111 11111011, 逐位进行逻辑或运算:11111111 11111111 11111111 11111111,即得到-1....阅读全文

博文 2015-08-26 12:05 leonpengweicn

golang 安装

如果是windows下建议使用zip安装,绿色环保 下载对应版本之后解压如:f:\go(有32和64),将F:\go\bin加入到系统变量中(path,主要用于在cmd中调用命令),然后新建用户变量(系统变量应该也可以),还新建一个工作目录系统变量 GOPATH,值为工作目录路径 2. go 命令 运行go help就可以看到go命令的基本情况 build compile packages and dependencies clean remove object files env print Go environment information fix run go tool fix on packages fmt run gofmt on package sources get down...阅读全文

博文 2014-11-27 15:30 爬墙

windows go amd64 libiconv 缺失报错问题

windows amd64 的go环境使用的gcc环境带的libiconv库不匹配,使用iconv-go库的时候报错,就自己编译了一个 步骤如下,下载libiconv源代码http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz 解压,安装msys设置默认GCC是win64的版本,修改/etc/profile pathcc=/d/GNU/mingw/MinGW64/4.9.1/bin export PATH="$pathcc:/bin:/mingw/bin:$PATH" 打开msys,gcc -v测试保证是默认gcc版本 然后进入libiconv的解压目录 ./configure make 在lib/.libs目录存在生成目标文件 拷贝...阅读全文

博文 2014-11-09 16:28 悠米海

Go语言开发环境搭建

今天是我从传统C/C++转行做Go语言开发的第一天,也是我在新公司入职的第一天。我在改公司的职位为Go语言开发工程师。也就是说从今天我我将开始学习和使用Go语言。 首先还是先搭建Go语言开发环境。 下载Golang(http://www.golangtc.com/download),此处我选择的是【go1.4.2.windows-amd64.msi】进行下载与安装。有文档里建议在安装过程中不要出现中文,一般做软件开发的人员在安装软件时都不会出现中文目录,而我还有另一个习惯,那就是安装路径中不会出现空格,所以我安装的软件不会选择系统默认的【Program Files】目录下。 安装Golang之后,需要检验Golang是否安装成功了。启动cmd,输入【go version】看能否显示出安装Go...阅读全文

博文 2015-06-10 15:32 hezhixiong

Win64机器-go1.3源码编译安装记录

1. 首先下载go1.3的源码包,并解压。 2. 进入go/src目录,运行all.bat执行编译,如果提示找不到gcc,请看3. 3. 前往 下载win的gcc 下载对应的windows版本的安装器(关注Runs on项),下载后运行选择对应的版本下载,下载需要点时间,完成后会自动进行安装。完成安装后需要把gcc所在目录加到path环境变量。这人比较懒,所以直接在cmd运行命令 : set path=%path%;D:\dev\mingw-w64\x86_64-4.9.0-posix-seh-rt_v3-rev2\mingw64\bin 接下来重新执行上面的第2步 4. 等待编译安装、test、check API(这步需要网络,可能需要的20分钟,可以skip it) 5. 配置GOROO...阅读全文

linux下安装Go

1 下载安装包 go1.5.linux-amd64.tar.gz 2 在linux下找一个目录进行解压 tar zxf go1.5.linux-amd64.tar.gz 3 编辑文件/etc/profile,在结尾添加 export GOROOT=/home/test/Go/go export PATH=$GOROOT/bin:$PATH export GOPATH=/home/test/Go/go-project 4 执行source /etc/profile,使修改生效 5 执行go version,查看是否安装成功...阅读全文

博文 2015-08-28 09:59 榴火

20.蛤蟆笔记go语言——使用LiteIDE

20.蛤蟆笔记go语言——使用LiteIDE LiteIDE 是一款简单、开源、跨平台的Go 语言 IDE。下载地址在 sourceforge 上,可能会有下载困难,因此在这里提供下载。如果单线程下载慢,可以使用下载工具。 下载地址如下: http://www.golangtc.com/download/liteide 文件包名字如:liteidex29.windows-qt4.zip 解压即可使用。 解压后又liteide文件夹,里面有bin文件夹,其中改变有liteide.exe可执行文件。双击即可运行。 如下图1: 创建项目 文件->新建 选择Go1 Command Project 然后输入名称,OK确认即可。 自带一个main.go文件。 运行 按下CTRL+ALT+R即可运行...阅读全文

centos 安装golang

vim $HOME/.profile export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin export GOPATH=/home/work/gopath source ./profile 在安装目录下新建两个目录 mkdir go mkdir gopath 下载源文件 wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz 解压 tar -C /usr/local -xzf go1.5.linux-amd64.tar.gz 搞定! 版权声明:本文为博主原创文章,未经博主允许不得转载...阅读全文

博文 2015-08-25 21:17 iluckyning

C++实现golang chan 版本一

这是我的一个简单例子,目前不够完善。 需要后续的优化,如,线程锁的更换,selector模式的加入,以及每个Chan依赖一个独立的线程,性能问题(一个线程管理多个Chan)。chan如何主动结束,程序结束时chan如何结束(通过数据未处理完)等等情况。阻塞式通道和非阻塞通道的设计!!! Lock.h #pragma once #if defined(__cplusplus) && (__cplusplus >= 201103) #include typedef std::thread::id TID; #else // #error "not support c++11" #if defined(WIN32) || defined(WIN64) #include 阅读全文

博文 2014-04-22 19:51 eclipser1987

golang 读写文件内容(备份)

以下是读取文件内容package main import ( "bufio" "fmt" "io" "os" "strings" ) func main() { fh, ferr := os.Open("d:\\n.txt") if ferr != nil { fmt.Printf("An error occurred on opening the inputfile\n" + "Does the file exist?\n" + "Have you got acces to it?\n") return } defer fh.Close() inputread := bufio.NewReader(fh) for { input, ferr := inputread.ReadString(...阅读全文

博文 2013-04-14 23:21 yatere

Windows上安装golang编译环境

为了保持整个Windows的环境纯洁,有zip包的东西向来不会去用安装包。幸运的是,golang是有zip包提供的。 但是如果直接解压而不外加其它措施,会提示很多包(package)找不到,所以在命令行中执行go相关命令之前,需要先设置几个环境变量。 因为命令行当中的set命令作用域只在当前命令行会话,所以这不影响我们“保持纯净”。相关环境变量及设置样例如下: set GOBIN = d:\go\bin set GOARCH = amd64 set GOOS = windows set GOROOT = d:\go set PATH = %PATH%;%GOBIN% 大功告成...阅读全文

博文 2012-09-02 12:35 liuyanghejerry

优化 Go 中的 map 并发存取

Catena (时序存储引擎)中有一个函数的实现备受争议,它从 map 中根据指定的 name 获取一个 metricSource。每一次插入操作都会至少调用一次这个函数,现实场景中该函数调用更是频繁,并且是跨多个协程的,因此我们必须要考虑同步。 该函数从 map[string]*metricSource 中根据指定的 name 获取一个指向 metricSource 的指针,如果获取不到则创建一个并返回。其中要注意的关键点是我们只会对这个 map 进行插入操作。 简单实现如下:(为节省篇幅,省略了函数头和返回,只贴重要部分) var source *memorySource var present bool p.lock.Lock() // lock the mutex defer p.l...阅读全文

博文 2015-04-02 10:31 88250

这个你知吗:linux安装go语言的方式

今天折腾了一天的VPS,装了HHVM、FTP,装不成功VPN。 GO语言也安装完成了,但中途也遇到一些问题,主要还是英文的问题,所以说学计算机的人啊,必须先学好英语。 言归正传,golang.org作为一个技术的官网,居然被墙了。天朝不会凡谷歌的东西都要墙掉吧?呵呵。 首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1.linux-amd64.tar.gz 这个版本的镜像地址。 按照说明cd 进入 /usr/local 目录,然后执行 wget -c http://www.golangtc.com/static/go/go1.4beta1.lin...阅读全文

博文 2014-11-02 21:47 ngyxf26v