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

Go语言atomic原子操作

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

博文 2015-06-17 20:12:43 xcltapestry

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-06 23:00:00 白玉雄

优化 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-05 11:29:41 88250

IntelliJ IDEA 安装Golang插件

网上的例子比较多,这里不重复,只解决我遇到的 --新版本的Intellij无法安装插件的问题。 1、输入仓库网址,搜索不到新的golang插件 2、从https://plugins.jetbrains.com/plugin/5047-go-language-golang-org-support-plugin下载插件,选择 “install plugin from disk”,提示plugin ××× is incompatible with this installation。 3、满足 1、2后恭喜你,无可适配的插件版本。 解压插件zip包,找到lib中 intellij-go-***.jar ,打开jar中的META-INF\plugin.xml,修改 阅读全文

博文 2017-08-16 10:03:19 nickso

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-10-04 19:27:08 咖啡伴侣

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-06 00:00:00 xiaofengshuyu

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()加锁后,便不能再次...阅读全文

博文 2015-06-17 20:03:41 chenbaoke

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-19 03:00:01 ilahsa

浅谈 Golang sync 包的相关使用方法

更多精彩文章:https://deepzz.com Desc:Go sync 包的使用方法,sync.Mutex,sync.RMutex,sync.Once,sync.Cond,sync.Waitgroup 尽管 Golang 推荐通过 channel 进行通信和同步,但在实际开发中 sync 包用得也非常的多。另外 sync 下还有一个 atomic 包,提供了一些底层的原子操作(这里不做介绍)。本篇文章主要介绍该包下的锁的一些概念及使用方法。 整个包都围绕这 Locker 进行,这是一个 interface: type Locker interface { Lock() Unlock() } 只有两个方法,Lock() 和 Unlock()。 另外该包下的对象,在使用过之后,千万不要复制...阅读全文

博文 2017-09-14 10:34:59 deepzz

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-07 10:48:11 baiyuxiong

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 11:00:17 tree2013

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-29 03:00:00 rootarvin

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-08 08:00:00 xiaofengshuyu

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 09:03:40 shikuijie

golang互斥锁的一个案例

package main import ( "fmt" "runtime" "sync" ) type Counter struct { mu sync.Mutex x int64 } func (c *Counter) Inc() { c.mu.Lock() defer c.mu.Unlock() c.x++ } func main() { runtime.GOMAXPROCS(runtime.NumCPU()) c := Counter{} var wait sync.WaitGroup wait.Add(4) for k := 4; k > 0; k-- { go func() { for i := 2500000; i > 0; i-- { c.Inc() } wait.Done()...阅读全文

博文 2016-11-24 08:00:10 tree2013

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个)...阅读全文

博文 2015-06-18 09:02:12 chenbaoke

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() ...阅读全文

博文 2015-05-18 12:37:14 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-11 03:00:02 hezhixiong

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-10 03:00:05 weixiaole

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....阅读全文

博文 2016-03-16 09:00:02 leonpengweicn

在中国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 13:00:01 pkufergus

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 22:00:01 Skiychan

LiteIDE

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

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 11:00:35 fyxichen

go编程解数独

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

安装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-03 03:00:01 zolo

ElasticHD:ElasticSearch Dashboard Go Application. 【工具、无需安装】

ElasticHD:ElasticSearch Dashboard Go ApplicationElasticHD 是一款 ElasticSearch的可视化应用。不依赖ES的插件安装,更便捷;导航栏直接填写对应的ES IP和端口就可以操作Es了。目前支持如下功能: ES Real time data search ES Dashboard data visualization ES Index Template (在线修改、查看、上传) ES Indices Index deletion and search SQL Converts to Elasticsearch DSL ES 基本查询文档 Downloads ElasticHD【Precompiled binaries】 for s...阅读全文

博文 2017-06-17 12:38:18 farmerx

golang sync.Cond 类

众所周知,go语言在多线程方面的支持是十分完备的。在go语言sync包中提供了一个Cond类,这个类用于goroutine之间进行协作。 这个类并不复杂,只有三个函数,Broadcast() , Signal(), Wait(), 一个成员变量,L Lock 其中Broadcast()实现的功能是唤醒在这个cond上等待的所有的goroutine,而Signal()则只选择一个进行唤醒。Wait()自然是让goroutine在 这个cond上进行等待了。这几个函数有以下几个注意点: 1.Wait()函数在调用时一定要确保已经获取了其成员变量锁L ,因为Wait第一件事就是解锁。 但是需要注意的是,当Wait()结束等待返回之前, 它会重新对L进行加锁,也就是说,当Wait结束,调用它的Gor...阅读全文

博文 2017-09-18 12:30:00 elnino

golang time.Duration()的问题解疑

文: How to multiply duration by integer? 看到golang项目中的一段代码, -------------------------------------------------------------------------------------------------- You have to cast it to a correct format Playground. yourTime := rand.Int31n(1000) time.Sleep(time.Duration(yourTime) * time.Millisecond) If you will check documentation for sleep, you see that ...阅读全文

博文 2017-07-01 10:00:09 oxspirt

记一次 golang 实现Twitter snowFlake算法 高效生成全局唯一ID

最近在着手准备一个H5游戏 因为这是我第一次接触游戏这个类目 即使量不大也想好好的做它一番 在设计表结构的时候想到了表全局唯一id这个问题 既然是游戏 那么一定是多人在线点点点(运营理想状态 哈哈哈) 一开始想使用mongoDB的objectId来作为全局唯一id 但是字符串作为索引的效率肯定不如整型来得实在 两者的主要差别就在于,字符类型有字符集的概念,每次从存储端到展现端之间都有一个字符集编码的过程。而这一过程主要消耗的就是CPU资源,对于In-memory的操作来说,这是一个不可忽视的消耗。如果使用整型替换可以减少CPU运算及内存和IO的开销。 所以最后考虑到理想状态下的效率及视觉效果(整型),考虑找一个纯整型的id替代方案 无意间看到了Twitter的snowFlake算法 这篇内容...阅读全文

博文 2018-05-08 01:34:36 holdno

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...阅读全文

博文 2014-10-23 14:00:01 esrrhs

你不得不知道的sync.Map源码分析

sync.Map源码分析 背景 众所周知,go普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。博主是从golang 1.4开始使用的,那时候map的并发读是没有支持,但是并发写会出现脏数据。golang 1.6之后,并发地读写会直接panic: fatal error: concurrent map read and map write package main func main() { m := make(map[int]int) go func() { for { _ = m[1] } }() go func() { for { m[2] = 2 } }() select {} } 所以需要支持对map的并发读写时候,博主使用两种方法: 第三方类库 conc...阅读全文

博文 2018-06-10 19:34:36 梦朝思夕

golang中读写锁RWMutex和通用锁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()加锁后,便不能再次...阅读全文

博文 2017-03-05 06:03:01 skh2015java

golang gzip解压

import ( "bytes" "compress/gzip" "encoding/binary" "io/ioutil" ) func ParseGzip(data []byte) ([]byte, error) { b := new(bytes.Buffer) binary.Write(b, binary.LittleEndian, data) r, err := gzip.NewReader(b) if err != nil { logger.Info("[ParseGzip] NewReader error: %v, maybe data is ungzip", err) return nil, err } else { defer r.Close() undatas, err :...阅读全文

博文 2017-02-14 06:00:25 徐学良

<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...阅读全文

博文 2016-01-18 15:00:04 a11101171

golang 函数三 (延迟调用)

Go语言提供defer关键字,用于延迟调用,延迟到当函数返回前被执行,多用于资源释放、解锁以及错误处理等操作。比如:func main() { f, err := createFile("defer.txt") if err != nil { fmt.Println(err.Error()) return } defer closeFile(f) writeFile(f) } func createFile(filePath string) (*os.File, error) { f, err := os.Create(filePath) if err != nil { return nil, err } return f, nil } func writeFile(f *os.File) ...阅读全文

博文 2017-02-10 11:11:33 100018

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 17:00:01 悠米海

Go语言——内存管理

Go语言——内存管理 参考: 图解 TCMalloc Golang 内存管理 Go 内存管理 问题 内存碎片:避免内存碎片,提高内存利用率。 多线程:稳定性,效率问题。 内存分配 内存划分 arena即为所谓的堆区,应用中需要的内存从这里分配, 大小为512G,为了方便管理把arena区域划分成一个个的page,每个page为8KB,一共有512GB/8KB个页 spans区域存放span的指针,每个指针对应一个page,所以span区域的大小为(512GB/8KB) * 指针大小8byte = 512M bitmap区域大小也是通过arena计算出来512GB / (指针大小(8 byte) * 8 / 2) = 16G,用于表示arena区域中哪些地址保存了对象, 并且对象中哪些地址包含...阅读全文

博文 2018-10-25 17:34:51 陈先生_9e91

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(...阅读全文

博文 2015-06-17 20:17:41 yatere

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 11:00:03 榴火

这个你知吗: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-03 10:00:03 ngyxf26v

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-29 10:00:01 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-10-04 19:27:35 亓斌哥哥