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

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 白玉雄

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

腾讯云 Game-Tech 技术沙龙小游戏专场“空降”长沙

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[腾讯游戏云](https://cloud.tencent.com/developer/user/1024461?fromSource=waitui)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/1349?fromSource=waitui) ![img](https://ask.qcloudimg.com/draft/1024461/lhk5s3w7rp.jpg?imageView2/2/w/1620) 小游戏作为今年快速成长的新生态,...阅读全文

博文 2018-10-12 16:19:52 qcloudcommunity

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 咖啡伴侣

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

优化 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

Go 中锁的使用

> > 本文对Go中锁机制的进行简单介绍 Go中锁分为两种: * 互斥锁 * 读写锁 --- 互斥锁 --- 并发程序对公共资源访问的限制最常见的就是使用互斥锁的方式。在Go中,sync.Mutex 提供了互斥锁的实现。 简单使用示例: func main () { var mutex sync . Mutex count := 0 for r := 0 ; r < 50 ; r ++ { go func () { mutex . Lock () count += 1 mutex . Unlock () }() } time . Sleep ( time . Second ) fmt . Println ( "the count is : " , count ) } 当执行了 mutex.L...阅读全文

博文 2017-11-22 02:36:32 薛锦

【互联网早报】2017.11.14

## ??国内新闻?? 1. 2.8天签收过亿,菜鸟智慧物流再为天猫双11提速 http://t.cn/RjGRDq6 2. 标普:中国2017年网络零售总额或近1万亿美元 http://t.cn/RjbsVMb 3. 百度与力帆、盼达达成三方合作 探索自动驾驶共享出行 http://t.cn/RjbSX3a 4. Thermaltake推出新款电竞椅:主动通风散热 http://t.cn/Rj4Bxj3 5. 腾讯全国首批微信商保医院落地 线上一键理赔 http://t.cn/RjGglOS ## ?国际新闻? 1. IBM超越谷歌抵达量子计算里程碑:研制出50量子位计算机 http://t.cn/RjG6PGj ...阅读全文

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.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

数组与切片

数组与切片的概念在其它语言中也有,之前我是没有搞明白他们之间的关系的。今天做了下总结 区别:数组是值类型,切片是引用类型,在使用的时候有区别。 如果用一个数组A创建新数组B的时候,需要将A中的所有元素全部复制一遍过去。如果是切片的话,就会指向原来的数据。 数组赋值拷贝见下面例子 func main() { var a [10]int = [10]int{1, 2, 3} b := a b[0] = 2 fmt.Printf("%d,%d", (int)(a[0]), (int)(b[0])) } 输出的结果 1,2 创建过程也不同: 数组的创建使用 = []type{}创建,初始数据为0。 ...阅读全文

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

浅谈 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

细说腾讯产品经理的职级划分

在中国,大多数互联网人都有一个共同的目标,那就是进BAT工作。今天小编和大家分享的就是BAT中腾讯产品经理职级相关东东。本文是小编在一个产品经理网站上面看到的,江湖人称中关村第一才女的腾讯人写的一篇文章,希望对想进腾讯做产品经理的小伙伴有所帮助吧。 腾讯产品的职级,主要有几个大点,可以大致衡量你面前的这位产品经理在哪个段位。 一级产品经理:初级、优化特性、提升数据 产出:优化现有产品特性 其实一级产品经理,应该叫产品助理。一个没有任何产品经验的应届大学毕业生,可以用 1-3年 的时间,成为一个优秀的产品助理。 他需要做的第一个修炼是,锁定一个自己喜欢的产品,画出让它持续运营的完整服务流程,并估算整体服务成本。 如果你始终对属于 UI/UE 的界面细节充满热...阅读全文

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

数据宝ChinaDataPay.com董事长汤寒林参加中国长江经济带发展高峰论坛

 2016年11月29日,由江西省商务厅指导、江西省服务外包产业协会主办的第三届中国长江经济带发展高峰论坛在江西南昌举行,本次论坛以“数据•融合•创新”为主题,围绕外包、制造业服务化、互联网+、电子商务、大数据、人工智能、移动互联网等新兴领域的发展为契机进行高端对话。贵州数据宝网络科技有限公司Chinadatapay.com董事长汤寒林作为特邀嘉宾发表《大数据行业的“淘宝”》的主题演讲,就如何高效开展大数据交易进行分享,并与华道数据、用友网络、中兴软件、联合金融、兴业证券等机构共同探讨大数据与服务贸易行业融合的创新模式。 ![1.jpg](http://studygolang.qiniudn.com/161207/6942fb4a9522d59f113aa36e38fabea3.jp...阅读全文

【互联网早报】2017.11.01

## ??国内新闻?? 1. 京东物流启动青流计划 引进千辆新能源车 http://t.cn/RWF2156   2. 22家基金集体下调乐视网估值:最大折价52%至7.34元 http://t.cn/RWkCNIp   3. ofo回应“顶风”投放新车:总量绝无新增 实际在减少 http://t.cn/RWkyAql   4. 人工智能公司旷视科技完成4.6亿美元C轮融资 http://t.cn/RWFP9ua   ## ?国际新闻? 1. 三星电子第三季营业利润同比增179%创新高 http://t.cn/RWkdrw0   2. SpaceX今年第16次发射,并且成功回收火箭 http://t.cn/RWDhXwW 3...阅读全文

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

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 二进制操作

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

阿里巴巴CTO王坚:谈“大数据”是对数据的不自信

云栖大会进入第二天,阿里巴巴CTO王坚博士在主题演讲中阐述了对大数据的看法。王坚认为,现在业界在谈数据时前面加上“大”,是对数据不够自信。 王坚强调,数据要产生价值,远远不需要前面加一个“大”字,“是因为我们对数据不够自信,而使得我们要在前面加一个字叫‘大’,愿意把它叫做‘大数据’。” 在王坚看来,在世界发展的任何时候,只要有基础设施就会有数据,就像有路就会有脚印。互联网的普及和发展改变了人类的生活和生产方式,引发了前所未有的信息革命和产业革命,互联网作为国家信息基础设施,就像公路、港口等一样,越来越成为国民经济各项事业发展的基础。 王坚认为,正因为互联网变成了基础设施,数据以更低的成本被自然沉淀,数据成为了生产资料。“数据跟土地一样变成了生产资料,这种变化是远远超出大家的...阅读全文

history.back(-1)和history.go(-1)的区别

history.back(-1)和history.go(-1)的区别 阅读:7233 次 编辑日期:2016-01-11 目录: 1这个方法的用途 2两个方法的区别 3总结 概述: H5页面做多了,自然就会做到页面上的返回功能,返回功能大致有两种:history.back(-1)和history.go(-1),今天我们来说说两种方法的区别。 这个方法的用途 返回一个页面方法有很多,就好比给返回按钮绑定一个URL,但是如果一个页面可以从很多页面到达,那么这个页面返回的页面就不是固定的,那么绑定固定的URL显然不妥。 两个方法的区别 既然history.back(-1)和history.go(-1)都是返回之前页面,但是方法不同,所以肯定是有区别的: 1 2 history.back(-1)//...阅读全文

博文 2017-09-28 15:31:02 a460550542

golang 互斥锁 sync.Mutex

一、介绍 sync.Mutex为互斥锁(也叫全局锁),Lock()加锁,Unlock()解锁。 二、场景 适用于场景: 读写次数不确定的场景(读写次数没有明显区别),同时只能一个读或者写 三、代码测试 正确示范 package main import ( "fmt" "sync" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) for i := 0; i <= 100; i++ { wg.Add(1) go add(i) } wg.Wait() } var s = 1000 var lock sync.Mutex var wg = &sync.WaitGroup{} func add(count int) { lo...阅读全文

博文 2019-06-27 00:32:56 清晨的麦田

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

数据宝第一季度大会暨蒋巷生态园拓展训练完满结束

喧鸟覆春洲,杂英满芳甸。在春意盎然,繁花似锦的4月天,为了丰富员工的业余生活,促进员工之间的交流沟通,加强团队文化建设,增强团队凝聚力,2017年4月27日,第一季度,数据宝(上海、北京分公司)员工前往江苏常熟蒋巷生态园开展为期2天的拓展训练,期以最强健的体魄,最刚烈的意志以及最顽强斗志迎接数据宝未来。 ![1.jpg](http://studygolang.qiniudn.com/170515/cdd6b4b8481a8e80a56a32357c8aed88.jpg) 人才是数据宝核心竞争力 人才是一个企业发展的核心竞争力,是先进生产力和先进文化的重要创造者和传播者,是互联网社会发展的宝贵资源。数据宝公司拥有员工500余人,其中博士学位占比20%,硕士学位40%,本科学位...阅读全文

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

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

【广州招聘】go语言开发/golang

.........................................分割线...................................... 职位描述: 1、负责棋牌游戏服务器架构优化; 2、负责棋牌游戏新游戏,活动等开发; 3、协助运维维护线上服务器。 职位要求: 1、熟悉c/c++/java,至少一年你使用经验; 2、熟悉golang,至少一年服务器开发项目经验; 3、熟悉tcp,ip,http等网络协议; 4、熟悉docker优先; 5、熟悉棋牌开发优先; 6、善于沟通,要有团队合作精神; 7、能承受一定强度的工作压力,对工作有热情,负责。 ...............阅读全文

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

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

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

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

golang协程同步的几种方法

# golang协程同步的几种方法 --- 本文简要介绍下go中协程的几种同步方法。 ## 协程概念简要理解 协程类似线程,是一种更为轻量级的调度单位,但协程还是不同于线程的,线程是系统级实现的,常见的调度方法是时间片轮转法,如每隔10ms切换一个线程执行。 协程则是应用软件级实现,它和线程的原理差不多,当一个协程调度到另一个协程时,将上一个协程的上下文信息压入堆栈,来回切换。一个线程可以跑很多个协程,由这个线程来调度协程的切换,如果是C/C++的话底层就能通过select/poll/epoll来做,例如微信后台的开源libco库。 golang协程底层不是C,纯go实现,golang的协程应该是目前各类有协程概念的语言中实现的最完整和成熟的,调度是基于GPM模型实现的,有兴趣可以去了解下,...阅读全文

博文 2019-06-29 21:31:53 BethlyRoseDaisley

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

在中国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

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 徐学良

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

go编程解数独

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

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 实现Twitter snowFlake算法 高效生成全局唯一ID

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

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

LiteIDE

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

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快速入门到综合实战

身为技术员,在追求高薪的路上,我们从未停歇,而了解企业需求增长最快的技术领域,并迅速掌握解锁各种新技术,是我们的最佳加薪法宝。最近几年Go语言技术迅速蹿红,美国程序员招聘网站Hired发布《2019软件工程师状态》报告中显示,基于市场供需,Go语言使用者目前最受招聘市场欢迎,原因在于GO语言在业界的使用频率越来越高,国外的Google、AWS、Cloudflare等,国内阿里、知乎等都已经大规模用Go语言开发相关产品,知乎还舍弃了Python,用Go重构推荐系统。 在谈到区块链时,大家第一时间想到的技术也一定是Go语言技术,它被称为区块链公链开发最佳编程语言,是目前区块链开发工程师必须掌握的技能。打开招聘网站,区块链开发工程师的工资总是能亮瞎我们的眼,我们一边眼馋,一边蠢蠢欲动,看到了趋势,...阅读全文

博文 2019-11-05 19:32:48

Golang标准库深入 - 锁、信号量(sync)

概述 sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。 本包的类型的值不应被拷贝。 虽然文档解释可能不够深入,或者浅显易懂,但是我觉得还是贴出来,对比了解可能会更好。 Go语言中实现并发或者是创建一个goroutine很简单,只需要在函数前面加上"go",就可以了,那么并发中,如何实现多个goroutine之间的同步和通信?答: channel 我是第一个想到的, sync, 原子操作atomic等都可以。 首先我们先来介绍一下sync包下的各种类型。那么我们先来罗列一下sync包下所有的类型吧。 1. Cond 条件等待 type Cond struct { // L is held...阅读全文

博文 2018-05-17 23:33:04 90design

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

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