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

Golang 共享内存

Golang语言中,进程间通信除了使用channel,还可以使用共享内存,即sync包。 Q-1 package main import ( "fmt" "time" ) func main() { for i := 1; i < 6; i++ { go func(x int) { time.Sleep(time.Second) fmt.Println("第", x, "个子goroutine执行结束") }(i) } fmt.Println("主goroutine执行结束") } 上面的代码毫无疑问的只会输出:“主goroutine执行结束”,而不会输出子goroutine执行结束,这是因为,主协程一旦执行完毕,整个进程就会结束。 sync组等待 sync包中常用的有三个方法:Add(nu...阅读全文

博文 2018-06-07 15:30:02 -beyond

【武汉】楚易唯增招一名golang 地铁口旁 晋升空间大 找工作快来点我!欢迎大家转发介绍小伙伴

武汉楚易唯网络科技有限公司招聘啦! 增招一名中高级Golang开发工程师 --------------------------------------------------------------------------------------------------------------------- 高级golang开发工程师(10k-20k)(视专业技能和工作经验可面谈) 任职要求: 1、具有良好的团队合作精神,有较强的开发能力和灵活性; 2、开发经验丰富,熟悉golang语言,基础扎实,2年以上golang开发工作经验,有完整的项目经验 ; 3、精通Golang协程,精通channel和锁,对高并发、高可用架构系统有正确、深刻的理解,要求有分布式服务...阅读全文

Golang解析xml

golang解析xml到struct func Xml() { xmlDoc := ` Tove Jani Reminder Don't forget me this weekend! ` type xmlStruct struct { XMLName xml.Name `xml:"note"` To string `xml:"to"` From string `xml:"from"` Heading string `xml:"heading"` Body string `xml:"...阅读全文

博文 2020-04-11 13:32:42 是个懒人

你不得不知道的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 梦朝思夕

go 官方版本的日志模块为什么加锁那么多

看了下go的log模块代码,写一条日志的做法是 1,拼接日志内容 2,加锁 3,写文件 4,解锁。 这个做法在协程很多的情况下,效率比较低。 官方为啥没有提供一个高效率的版本呢? 我自己撸了一个,也就200多行代码(https://github.com/Titanarthas/s_g_log) 对比测试了下,50000个协程,每个协程写11条日志。 官方版本的log耗时是6秒多,我自己写的版本是2.4秒,也没发现我的实现有啥问...阅读全文

网络安全 - 制作免杀

介绍:之前使用 小七免杀工具包 来作免杀(有空我会上传到网盘上),就是对PE(.bat、.exe这类)文件中出现的特征码进行替换修改,修改方法:等价替换指令,字符串修改大小写等。 现在开源的东西比起手工,免杀率高,速度快,功能多。下面我就介绍下 Hercules 工具: 一、安装 Kali Linux 二、搭建GO语言环境 1、下载解压GO 解压到 /usr/local 目录下: 2、配置环境 让GO命令有效: 文件后追加 export PATH=$PATH:/usr/local/go/bin: 再按 Esc ,输入 :wq,保存退出。使文件生效,并查看版本号,是否正确配置: 三、安装Hercules 升级软件包: 运行Hercules: 四、生成免杀载荷 选择1,输入ip、端口号(用于反弹...阅读全文

博文 2017-06-09 05:05:42 alexnevsky

golang配置oci8所遇到问题解决

新建文件夹 mingw 将 MinGW.zip 解压到mingw目录下,进入mingw\lib目录下 新建文件夹pkg-config 执行命令 go get github.com/wendal/go-oci8将github.com\wendal\go-oci8\windows文件夹下的oci8.pc文件拷贝到当前pkg-config文件夹下并修改文件内容如下 ### 异常总结1 当报该异常时,请升级golang的编译版本,该方法需要1.8版本 gopkg.in\kataras\iris.v6\response_writer.go:65: undefined: http.Pusher 2 当报该异常时,是本地oracle客户端版本不匹配,可以下载一个对应的 C:/mingw/bin/..b/g...阅读全文

博文 2017-10-12 06:30:01 count-mjb

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

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 榴火

Go 博客平台 Pipe 1.6.0 发布,支持 sitemap

[Pipe](https://github.com/b3log/pipe) 是一款小而美的开源博客平台,使用 golang、Vue.js 编写。 v1.6.0 主要是支持了 sitemap 和 RSS 输出。 关于**独立账号体系**的特性正在通过社区进行投票,欢迎大家[前来支持](https://github.com/b3log/pipe/issues/117)! ### 安装 [下载](https://pan.baidu.com/s/1jHPtHLO)最新的 Pipe 包解压,进入解压目录直接运行 pipe/pipe.exe 可执行文件即可。 从 1.5.0 升级只需将已有的配置拷贝覆盖即可,启动后会自动升级。 ### 文档 * [Pipe 用...阅读全文

golang sync.once解析

实现原理(当前代码版本go version go1.11.4 ) 1.atomic 原子操作计数器,用于记录此Once对象下的done的值,func()方法只执行一次 2.使用Mutex互斥锁保证多协程操作的安全性 由于代码量比较少贴出源码如下: // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sync import ( "sync/atomic" ) // Once is an object that wil...阅读全文

博文 2019-07-12 21:32:40 清晨的麦田

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 亓斌哥哥

<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

这个你知吗: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 读写文件内容(备份)

以下是读取文件内容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

Go语言基础-sync包

Golang 推荐通过 channel 进行通信和同步,但在实际开发中 sync 包用得也非常的多,在以太坊的源码中也有很多这类应用的体现。 Go sync包提供了:sync.Mutex,sync.RMutex,sync.Once,sync.Cond,sync.Waitgroup,sync.atomic等,文本主要对sync.Mutex,sync.RMutex和sync.Waitgroup的使用进行了说明,后续会推出其它方法的使用说明。 sync包含一个 Locker interface: type Locker interface { Lock() Unlock() } 该接口只有两个方法,Lock() 和 Unlock()。整个sync包都是围绕该接口实现。 互斥锁Mutex 互斥锁Mu...阅读全文

博文 2018-07-18 07:34:45 北枫晴天

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 悠米海

golang sync.Mutex

相较于Go语言宣扬的“用通讯的方式共享数据”,通过共享数据的方式来传递信息和协调线程运行的做法其实更加主流,比较大多数的现代编程语言,都是用后一种方式作为并发编程的解决方案的。  一旦数据被多个线程共享,那么就很可能会产生争用和冲突的情况。这种情况被称为竞态条件(race condition),这往往会破坏共享数据的一致性。  共享数据的一致性代表着某种约定,即:多个线程对共享数据的操作总是可以达到它们各自预期的效果。  如果这个一致性得不到保证,那么将会影响到一些线程中代码和流程的正确执行,甚至会造成某种不可预知的错误。  同步解决。同步的用途有两个,一个是避免多个线程在同一时刻操作同一个数据块,另一个是协调多个线程,以避免它们在同一时刻执行同一个代码块。  一个线程在想要访问某一个共享资...阅读全文

博文 2018-11-18 03:34:39 one_zheng

【go】sync

sync.once可以控制函数只能被调用一次。不能多次重复调用。 例如:保证channel 关闭只执行一次,避免关闭已关闭的channel导致panic type MyChannel struct { C chan T once sync.Once } func NewMyChannel() *MyChannel { return &MyChannel{C: make(chan T)} } func (mc *MyChannel) SafeClose() { mc.once.Do(func(){ close(mc.C) }) } 更多的实现原理,参考:https://cloud.tencent.com/dev... sync.Mutex 互斥锁它能够保证同时只有一个 goroutine 可以...阅读全文

博文 2020-05-20 23:32:42 阿阿阿黄

有关go管道,锁和dlv调试的细节分享

2019年初在做流媒体服务时对三处细节印象深刻,特整理记录下来。 ## 管道中的`<-` 简单来说就是这样子的:接受者<-发送者。 然而中间会多个管道,所以我借用Go语言圣经中的三处例子做解释 ```go ch <- x // x作为发送者发送给管道 x = <-ch // 管道作为发送者发送数据给接受者x <-ch // 管道发送数据,没有接收者,丢弃,同时造成管道堵塞,等待接收者 ``` 所以我们可以具体化刚才说的发送接收流程,它应该为:接收者 <- 管道 <- 发送者。如果缺了接收者或发送者,都会造成管道堵塞。 ## 互斥锁 举个例子 ```go import "sync" var ( mu sync.Mutex // guards balance balance int ) func...阅读全文

博文 2019-03-20 16:55:16 OctopusLian

windows to go模式下的引导加密的win8系统修复

win8 X64 企业版,系统蓝屏提示“INACCESSABLE_BOOT_DEVICE”,,不想重装;安全模式也是进不去,所以就尝试用系统盘进行系统修复,但是在修复的时候提示说系统盘被加密,需要解锁之后才可以修复 于是就先: manage-bde -unlock -password c: 然后输入密码去解锁,然后要去除加密: manage-bde -off c: 提示解密进行中,然后就回来了,而不是显示进度条,我还以为完成了,于是就退出,结果修复还是提示未解锁 然后想起来应该用status看一下的,于是重新上述步骤;然后还是提示下解密进行中就结束 了,于是就: manage-bde -status 果然看到,还是“转换状态”是解密进行中,于是等待; 就是不知道直接用manage-bde a...阅读全文

博文 2016-01-26 22:00:03 a904254

Java版本分析

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】进入 链客,有问必答!!编译了一个java版本的,比如同步数据到2000多块,重启程序,在同步发现每次都是从938的高度开始同步,找不到解决的办法答:可能是启动命令的问题,启动命令里面的哪个参数有问题吧golang的rpc中的这个方法:Unlock_keystore是什么意思?答:解锁账号的意思,通过rpc转账,或者调用智能合约消费gas到时候,都会说你的账号没解锁,需要调用这个方法来解锁...阅读全文

博文 2019-01-22 14:34:49 陈_3061

技术技能学习

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!!编译了一个java版本的,比如同步数据到2000多块,重启程序,在同步发现每次都是从938的高度开始同步,找不到解决的办法答:可能是启动命令的问题,启动命令里面的哪个参数有问题吧golang的rpc中的这个方法:Unlock_keystore是什么意思?答:解锁账号的意思,通过rpc转账,或者调用智能合约消费gas到时候,都会说你的账号没解锁,需要调用这个方法来解锁...阅读全文

博文 2019-03-04 12:34:40 链客区块链技术问答社区

Destructuring assignment(解构赋值)in ES6

ES6允许按照一定模式,从数组和对象(以及字符串、数值、布尔值、函数参数等)中提取值,按照对应位置给变量进行赋值,这被称为解构赋值。首先,假定你已经了解了什么是解构赋值,我们先来快速看一下它的常见用途。 交换变量的值 let x=1,y=2; [x,y]=[y,x]; 与传统的引入中间变量进行值交换的方式相比,这种写法不仅简洁,而且易读,语义非常清晰 解析函数多返回值 JS中函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回,通过解构赋值,我们可以很方便的将这些值取出来并赋给其它变量。 //返回一个数组 function arr(){ return [1,2,3]; } let [x,y,z]=arr(); //返回一个对象 function obj(){ return {...阅读全文

博文 2017-08-03 08:05:05 弧度里的微笑

Ubuntu 16.04 快速搭建以太坊私有链开发环境

之前用的是CENTOS7,后边发现有好多搞不定的小坑,果断换用ubuntu继续学习。环境:ubuntu16.04安装git之后的安装都需要依赖Git sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git 查看版本号 git--version git version 2.18.0 1.安装go语言环境(1)下载linux下go的安装包$ wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz(2)下载完后,进入到下载目录,将其解压到 /usr/local 文件夹下并在$HOME下新建一个文件夹go: ...阅读全文

博文 2018-07-26 20:34:53 中中二次元

【武汉】招golang开发工程师,回复及时,年底/开年想换工作的小伙伴尽情骚扰HR

武汉楚易唯 增招3名中高级Golang开发工程师 ----------------------------------------------------------------------------------------------------------------------------------------------- 要求其实很简单: 专业基础技能扎实,灵活性强,有较强的职业操守,热爱go语言,有完整的golang项目开发经验,go开发经验资深尤佳,薪资可以面谈,但是也有上限,突出能力和贡献者后期可享受项目的股份期权。 无论你是想做项目经理还是技术总监,只有有能力,都OK! ------------------------------------------...阅读全文

主题 2017-11-20 06:18:58 whcyw

golang nats 安装

下载 [root@localhost ~]# weget https://github.com/nats-io/gnatsd/releases/download/v1.2.0/gnatsd-v1.2.0-linux-amd64.zip 解压 [root@localhost ~]# unzip gnatsd-v1.2.0-linux-amd64 启动 [root@localhost ~]# cd gnatsd-v1.2.0-linux-amd64 [root@localhost gnatsd-v1.2.0-linux-amd64]# nohup ./gnatsd -l nats.log -P pid.log -DV ...阅读全文

博文 2018-08-18 12:35:05 luckyase

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-11 03:00:05 hezhixiong

Go语言之RWMutex

自“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/0nfjNsFNIrMhYJMf3P-sEw本篇文章,笔者主要来介绍读写锁的一种Go语言的实现方式RWMutex。1.基本概念读写锁:是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。读操作可并发重入,写操作是互斥的。主要适用的场景是:读多写少的业务场景。这种场景下如果每次读写都使用互斥锁那么整个效率就会变得很低。因为只是读的话并不需要互斥锁来锁住数据,只有写操作的时候需要互斥锁,而读写结合的时候,也是需要加锁的,不然的话会导致读的数据不一定是期望的。对于RWMutex的规则如下:1、可以随便读,多个goroutine同时读。2、写的时候,不能读也不能写。主要有下面四个API构成,读...阅读全文

博文 2019-12-23 09:51:08 ZhDavis

Go语言之RWMutex

自“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/0nfjNsFNIrMhYJMf3P-sEw本篇文章,笔者主要来介绍读写锁的一种Go语言的实现方式RWMutex。1.基本概念读写锁:是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁。读操作可并发重入,写操作是互斥的。主要适用的场景是:读多写少的业务场景。这种场景下如果每次读写都使用互斥锁那么整个效率就会变得很低。因为只是读的话并不需要互斥锁来锁住数据,只有写操作的时候需要互斥锁,而读写结合的时候,也是需要加锁的,不然的话会导致读的数据不一定是期望的。对于RWMutex的规则如下:1、可以随便读,多个goroutine同时读。2、写的时候,不能读也不能写。主要有下面四个API构成,读...阅读全文

博文 2019-12-21 20:32:49 灰常出色

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

博文 2014-10-05 23:14:32 Jahe

Golang 返回&errorString,而不是errorString的原因

Errors包 查看golang的errors包你会发现其源码是: func New(text string) error { return &errorString{text} } // errorString is a trivial implementation of error. type errorString struct { s string } func (e *errorString) Error() string { return e.s } 返回了一个实现error接口的errorString类型的指针。 那为啥不是返回errorString的值类型?? 你可能会说:因为只有 `*errorString` 才有 `Error` 方法啊... 错, 而且打错特错。 正解:...阅读全文

博文 2018-04-18 11:33:06 90design

用 Go 构建一个区块链 -- Part 5: 地址

翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。如果想直接运行代码,也可以 clone GitHub 上的教程仓库,进入 src 目录执行 make 即可。 引言 在上一篇文章中,我们已经初步实现了交易。相信你应该了解了交易中的一些天然属性,这些属性没有丝毫“个人”色彩的存在:在比特币中,没有用户账户,不需要也不会在任何地方存储个人数据(比如姓名,护照号码或者 SSN)。但是,我们总要有某种途径识别出你是交易输出的所有者(也就是说,你拥有在这些输出上锁定的币)。这就是比特币地址(address)需要完成的使命。在上一篇中,我们把一个由用户定义的任意字符串当成是地址,现在我们将要实现一个跟比特币一...阅读全文

博文 2017-11-06 14:04:41 liuchengxu

sync包下的mutex理解

Go中`sync`包下有2种`mutex`实现: * `sync.Mutex` * `sync.RWMutex` `Mutex`底层基于`sync/atomic`实现了 [Compare and Swap](https://en.wikipedia.org/wiki/Compare-and-swap). 由于该算法逻辑只需要一条汇编就可以实现,在单核CPU上运行是可以保证原子性的,但多 核CPU上运行时,需要加上`LOCK`前缀来对总线加锁,从而保证了该指令的原子性: ``` // src/sync/atomic/asm_amd64.s#L35 TEXT ·CompareAndSwapInt32(SB),NOSPLIT,$0-17 JMP ·Compar...阅读全文

Innodb中的事务隔离级别和锁的关系

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。 #一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。这种方式可以有效的避免循环死锁,但在数据库中却不适用,因为在事务开始阶段,数据库并不知道会用到哪些数据。数据库遵循的是两段锁协议,将事务分成两个...阅读全文

博文 2017-12-05 03:13:14

以太坊本地开发环境以及智能合约

首先安装go环境 https://golang.org/dl/ 直接用安装包安装。 完成后看下 go env 然后关注下gopath路径, GOPATH="/Users/MacPro/box/ 我们要把go版客户端放这里,go编译器执行都是去设定好的目录执行。以后写go的时候项目也要放这里。 下载go版以太坊客户端 git clone https://github.com/ethereum/go-ethereum cd go-ethereum make geth 编译成功以后开始以太坊本地测试 先用命令看下,是否成功, build/bin/geth -h 如果直接用geth 需要做下环境变量 export PATH=$PATH:/全路径/build/bin/geth 开始搭建私有测试链 1 ...阅读全文

博文 2018-07-20 18:34:46 李斯特_旺

windows 下 go-micro 生成protobuf 文件

安装protoc https://github.com/google/protobuf/releases/tag/v3.4.1 下找到win32包 解压并配置环境变量 安装 gen-proto-go go get -u github.com/golang/protobuf/protoc-gen-go 安装micro protobuf 插件 go get github.com/micro/protobuf/proto github.com/micro/protobuf/protoc-gen-go proto生成文件 protoc -I . --go_out=plugins=micro:. greeter.prot...阅读全文

博文 2017-10-10 14:04:51 Kathent

Golang sync

Go1.9.2 sync库里包含下面几类:Mutex/RWMutex/Cond/WaitGroup/Once/Map/Pool 1.Mutex:互斥锁,等同于linux下的pthread_mutex_t //多个线程同时运行,获得Mutex锁者线程优先执行,其余线程阻塞等待 func testMutex() { mutex := sync.Mutex{}; for i := 0; i < 10; i++ { go func(idx int) { mutex.Lock(); defer mutex.Unlock(); fmt.Println("idx :=", idx); time.Sleep(time.Second); }(i) } time.Sleep(20 * time.Second);...阅读全文

博文 2017-12-22 14:00:01 chevin

最新 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-10-01 16:00:00 lcj0304

用生产者消费者理解golang channel

golang实现多生产者多消费者: package main import ( "fmt" "time" ) func consumer(cname string, ch chan int) { for i := range ch { fmt.Println("consumer--", cname, ":", i) } fmt.Println("ch closed.") } func producer(pname string, ch chan int) { for i := 0; i < 4; i++ { fmt.Println("producer--", pname, ":", i) ch <- i } } func main() { //用channel来传递"产品", 不再需要自己去...阅读全文

博文 2017-07-23 10:06:26 zengfan

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% 大功告成...阅读全文

博文 2014-10-04 19:26:02 liuyanghejerry

GO 锁

"锁" 在线程同步的时候是非常重要的, 如果是文件锁能够防止误写, 当然锁的用法也比较简单, 操作前 加锁, 操作完成 解锁, 当有其他线程操作的时候, 需要等待, 直到其他线程解锁, 方能继续操作. var lock *sync.Mutex lock = new(sync.Mutex) lock.Lock() ... ... // 处理操作的逻辑 lock.Unlock() 如果在解锁之前再次进行加锁,会进入死锁状态 如果是文件锁, 会分为读锁 RLock(), 写锁 WLock() 以及 读写锁 RWLock() var lock *sync.RWMutex lock = new(sync.RWMutex) lock.RLock() ... ... // 处理文件操作的逻辑 lock.R...阅读全文

博文 2017-02-10 14:45:03 yin32167