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

POJ 1047 Round and Round We Go 循环数新解

题目描述: 给定一字符串表示的高精度数,判断它是否是可循环的。如果假设字符串num的长为n,则将num从1开始乘到n,如果每次得到的结果包含的字符元素都和a是相同的,则它是可循环的。 解题思路: 初看这一题,想到的解法是利用高精度数的乘,计算出num乘以1到n的结果,再与num进行对比。这种方法较为简单,可以得到正确的结果,但是效率并不是很理想。对于循环数,我们最常见到的是循环小数,而这一题的解法也是由此引申得出的。 初等数论里面有以下三个定理: 欧拉定理:设a、m为整数,m>1,(a,m)=1,则a^φ(m)≡1 (mod m)。 整数的次数:a、m为整数,m>1,(a,m)=1,k是使a^k≡1 (mod m)成立的最小正整数,则k叫做a对模m的次数。 次数定理:设a对模m的次数为k,n...阅读全文

博文 2016-02-05 07:00:01 furney

Golang linux下安装与配置

一下载安装包 到 https://code.google.com/p/go/downloads/list?q=OpSys-FreeBSD+OR+OpSys-Linux+OR+OpSys-OSX+Type-Archive下载合适的版本,我选择的是:go1.2.linux-386.tar.gz 然后解压 :tar -xzvf go1.2.linux-386.tar.gz 二 配置e $mv go /usr/local/go //将 go移动/usr/local/go目录下 $ vi /etc/profile 在/etc/profile文件末尾添加: #go configuration export GOROOT=/usr/local/go //go安装目录 export GOARCH=386 /...阅读全文

博文 2015-06-17 20:19:53 Crazy__Programmer

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

博文 2015-11-25 17:00:01 eclipser1987

go 处理zip解压时乱码问题

问题 go语言自带的zip包可以解压zip文件 然而,如果你用winrar压缩成zip后。再用go去解压会发现文件名称是乱码。 而当你使用一众国产压缩软件压缩后再解压却不是乱码。 原因 winrar压缩时,默认采用本地编码方式来进行压缩。 在中国,本地编码方式一般是GBK。 而我们知道go语言字符串都是utf-8格式的,所以有可能出现乱码的情况。 image.png 解决方案 判定文件名编码方式,如果为GBK则转换GBK=》utf-8 由上面图片我们知道如果flags字段11bit为为1则是utf-8编码。0位本地编码 代码 代码中要用到如下两个包 "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transf...阅读全文

博文 2019-06-21 21:32:41 丶赤水断

武汉招聘golang开发工程师

武汉楚易唯公司招聘 golang开发工程师 10k-20k(视能力和经验可面议) 任职要求: 1、具有良好的团队合作精神,有较强的开发能力和灵活性; 2、开发经验丰富,熟悉golang语言,基础扎实,2年以上golang开发工作经验,有完整的项目经验 ; 3、精通Golang协程,精通channel和锁,对高并发、高可用架构系统有正确、深刻的理解,要求有分布式服务器开发经验; 4、额Web开发经验,对RESTful概念有清晰的理解,并至少有一次API Server开发项目中运用到; 5、熟悉xml/json/protobuf等至少任意一种网络通信技术和数据交换格式 ; 6、良好的算法基础和清晰的编程思路; 7、工作积极主动,态度踏实认真,...阅读全文

图解Go的select语句原理

Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前的groutine。所以,有人也会说select是用来阻塞监听goroutine的。 还有人说:select是Golang在语言层面提供的I/O多路复用的机制,其专门用来检测多个channel是否准备完毕:可读或可写。 以上说法都正确。 I/O多路复用 我们来回顾一下是什么是I/O多路复用。 普通多线程(或进程)I/O image 每来一个进程,都会建立连接,然后阻塞,直到接收到数据返回响应。 普通这种方式的缺点其实很明显:系统需要创建和维护额外的线程或进程。因为大多数时候,大部分阻塞的线程或进程是处于等待状态,只有少部分会接收并处理响应,而其...阅读全文

博文 2019-04-11 03:34:39 RyuGou

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 16:00:01 爬墙

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-10-24 17:00:30 iluckyning

优化 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-08-18 17:06:34 88250

golang 中 sync.Mutex 和 sync.RWMutex

介绍 golang 中的 sync 包实现了两种锁: Mutex:互斥锁 RWMutex:读写锁,RWMutex 基于 Mutex 实现 Mutex(互斥锁) Mutex 为互斥锁,Lock() 加锁,Unlock() 解锁 在一个 goroutine 获得 Mutex 后,其他 goroutine 只能等到这个 goroutine 释放该 Mutex 使用 Lock() 加锁后,不能再继续对其加锁,直到利用 Unlock() 解锁后才能再加锁 在 Lock() 之前使用 Unlock() 会导致 panic 异常 已经锁定的 Mutex 并不与特定的 goroutine 相关联,这样可以利用一个 goroutine 对其加锁,再利用其他 goroutine 对其解锁 在同一个 gorout...阅读全文

博文 2017-07-31 09:06:25 WangZZ

go同步编程

锁 互斥锁 函数write中的这条defer语句保证了在该函数被执行结束之前互斥锁mutex一定会被解锁。 var mutex sync.Mutex func write() { mutex.Lock() defer mutex.Unlock() // 省略若干条语句 } func repeatedlyLock() { var mutex sync.Mutex fmt.Println("Lock the lock. (G0)") mutex.Lock() fmt.Println("The lock is locked. (G0)") for i := 1; i <= 3; i++ { //开启3个协程,mutex已经锁定,所以程序会被阻塞。在unlock之后,随机启动一个。 go func(...阅读全文

博文 2018-09-21 15:34:47 jincheng828

求助贴:snappy-go使用有问题

代码: contBytes := make([]byte,1024) stringsReader := strings.NewReader(pbMsg.GetBody().GetReqData().GetContent()) snappyReader := snappy.NewReader(stringsReader) rNum, _ := snappyReader.Read(conBytes) fmt.Println("rNum", rNum) 在实际项目中,使用了protobuf 和 snappy,pbMsg.GetBody().GetReqData().GetContent()返回的是一个被snappy压缩过的字符...阅读全文

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即可运行...阅读全文

博文 2016-07-10 11:00:02 notbaron

Golang sync.Cond源码分析

cond的主要作用就是获取锁之后,wait()方法会等待一个通知,来进行下一步锁释放等操作,以此控制锁合适释放,释放频率,适用于在并发环境下goroutine的等待和通知。 针对Golang 1.9的sync.Cond,与Golang 1.10一样。 源代码位置:sync\cond.go。 结构体 type Cond struct { noCopy noCopy // noCopy可以嵌入到结构中,在第一次使用后不可复制,使用go vet作为检测使用 // 根据需求初始化不同的锁,如*Mutex 和 *RWMutex L Locker notify notifyList // 通知列表,调用Wait()方法的goroutine会被放入list中,每次唤醒,从这里取出 checker copy...阅读全文

博文 2018-04-23 17:33:05 lhahhahakk

golang笔记之基于共享变量的并发

介绍 golang 中的 sync 包实现了两种锁: Mutex:互斥锁 RWMutex:读写锁,RWMutex 基于 Mutex 实现 Mutex(互斥锁) Mutex 为互斥锁,Lock() 加锁,Unlock() 解锁 在一个 goroutine 获得 Mutex 后,其他 goroutine 只能等到这个 goroutine 释放该 Mutex 使用 Lock() 加锁后,不能再继续对其加锁,直到利用 Unlock() 解锁后才能再加锁 在 Lock() 之前使用 Unlock() 会导致 panic 异常 已经锁定的 Mutex 并不与特定的 goroutine 相关联,这样可以利用一个 goroutine 对其加锁,再利用其他 goroutine 对其解锁 在同一个 gorout...阅读全文

博文 2019-05-06 15:46:55 月下独酌100

gitbook 入门教程之还在搞公众号互推涨粉?gitbook 集成导流工具,轻轻松松躺增粉丝!

相信大多数博客作者都或多或少有过这样想法: 现在各种平台这么多,想要实现全平台发布就要到处复制粘贴,等我有空一定做统一平台一次性全部解决! 不知道正在阅读文章的你,有没有这样的想法? 反正我确实这么想过,甚至 github 上相关项目早已创建,可一直迟迟没有下一步,要么是工作忙,要么是技术储备不够,总有一大堆借口自我安慰! 如果只是专注于某一两家平台,这种需求可能不会那么强烈,可是如果你和我一样曾经手动复制粘贴过下面这么多平台,那么我相信你一定可以体会一文多发的迫切性! 幸运的是,在一文多发探索的路上并不孤单,不堪其扰的大佬们早已说干就干动手解决了这个问题,有的是开源平台,有的是 SAAS 服务,大家都在努力... 其中,SAAS 服务可能是最简单上手的方式了,这就是今天的主角: OpenW...阅读全文

博文 2019-09-26 10:33:04 雪之梦技术驿站

技术进阶:Redis分布式锁的应用(一)

导入 之前一直在给大家写docker相关的东西,当然docker的东西也会继续的写,在此插一篇《关于Redis分布式锁的应用》开开荤腥。 背景 同一主机同一进程不同的线程,如何同步访问一段代码块呢? Java有synchronized synchronized(this) { } Golang有sync工具包 var mutex sync.Mutex //加锁mutex mutex.Lock() do Something··· //解锁mutex mutex.Unlock() PHP 因为PHP没有多线程的概念,对PHP而言,普遍的是多进程,PHP的多个多进程之间同步访问,可以通过文件锁来实现。 $fp = fopen("logs/lock.l", "a+"); if (flock($fp,...阅读全文

博文 2018-09-02 20:34:43 指尖流年

Golang channel 之 写操作 send

channel的基本写操作 假如有一个元素类型为int的channel,变量名为ch,那么写操作(简称send为写)在代码中的写法如下所示: ch <- 10 其中ch可能是“有缓冲”的,也可能是“无缓冲”的,甚至可能为nil。 按照上面的写法,有两种情况使写操作不会阻塞: 1)通道ch的“读等待队列”里已有goroutine在等待; 2)通道ch是“有缓冲”的,且缓冲区没有用尽。 第一种情况中,只要ch的读等待队列里有协程在排队,那么当前进行写请求的协程直接把数据交给队首的读协程就好了,无关ch有没有“缓冲”; 第二种情况中,ch是有缓冲的,且缓冲区没有用尽,也就是底层数组没有存满,那么当前执行写请求的协程直接把数据追加到缓冲数组中即可。 同样是上面的写法,有三种情况使写操作会阻塞: 1)...阅读全文

博文 2019-12-10 03:32:42 封幼麟

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

博文 2016-03-07 23:00:02 yuchuanabcd

由浅入深聊聊Golang的sync.Map

前言 今天在技术群中有小伙伴讨论并发安全的东西,其实之前就有写过map相关文章:由浅入深聊聊Golang的map。但是没有详细说明sync.Map是怎么一回事。 回想了一下,竟然脑中只剩下“两个map、一个只读一个读写,xxxxx”等,关键词。有印象能扯,但是有点乱,还是写一遍简单记录一下吧。 1.为什么需要sync.Map? 2.sync.Map如何使用? 3.理一理sync.Map源码实现? 4.sync.Map的优缺点? 5.思维扩散? 正文 1.为什么需要sync.Map? 关于map可以直接查看由浅入深聊聊Golang的map,不再赘述。 为什么需要呢? 原因很简单,就是:map在并发情况虚啊,只读是线程安全的,同时写线程不安全,所以为了并发安全 & 高效,官方实现了一把。 1.1...阅读全文

博文 2019-07-23 17:44:18 咖啡色的羊驼

架构学习之路(一)-- 并发编程

得有下手干活的时候,也需要在迷茫期看一看大佬的学习路线,自己才能有提升。 本文链接:http://342104628.iteye.com/blog/2422044 关键概念 上下文切换 1.概念:CPU通过时间片算法,给可运行的线程分配运行时间,在不同线程之间的切换时需要将当前线程的状态保存并回复将要执行的线程状态信息,这个过程就是上下文切换。 2.如何减少或避免上下文切换? ·无锁并发编程 ·CAS算法 ·使用最少线程 ·协程 死锁 1.概念:两个或多个线程持有对方正在等待的锁 2.如何避免死锁? ·避免一个线程同时获取多个锁 ·避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源 ·尝试使用定时锁 ·对于数据库锁,加锁和解锁必须在一个数据库连接里 go并发机制 https:/...阅读全文

博文 2018-08-21 19:34:59 魔改谢馒头

悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作都某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。 悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。 在数据库中,悲观锁的流程如下: 在对任意记录进行修改前,先尝试为该记录加上排他锁(exclusive locking)。 如果加锁失败,说明该记录正在被修改,那么当前查询可能要等待或者抛出异常。 具体响应方式由开发者根据实际需要决定。 如果成功加锁,那么就可以对记录做修...阅读全文

博文 2018-05-11 16:03:37 lobo

调用Bytom Chrome插件钱包开发Dapp

安装使用插件钱包 1. 打开Google浏览器的应用商店,搜索Bystore 下载链接:http://t.cn/E6cFFwb 2. 然后点击添加到Chrome,就可以添加到我们的: 3. 使用google插件钱包 如果你使用的是测试网,可以去测试网水龙头领取BTM。测试网水龙头:http://test.blockmeta.com/fau... 搭建Dapp demo Dapp demo是一个基于比原的储蓄合约,该demo可以进行资产的锁仓储蓄,到期返还资产并给一定的利息。这个dapp很适合的场景就是股息分红,内部通过智能合约自动锁仓操作,到期资产自动解锁。所以我个人对这个dapp应用场景表示非常看好。 项目源码地址:https://github.com/Bytom/Byto... 根据源码...阅读全文

博文 2019-04-08 14:34:42 比原链Bytom

golang ubuntu 安装笔记

1. 从http://www.golangtc.com/download下载适合平台的go安装包,我这里选择的是go1.5.1.linux-amd64.tar.gz 2.把安装包拷贝到/usr/local/目录下 sudo cp go1.5.1.linux-amd64.tar.gz /usr/local 3.进入/usr/local/目录下,解压文件go1.5.1.linux-amd64.tar.gz sudo tar xf go1.5.1.linux-amd64.tar.gz4.在/etc/profile文件末尾添加:

#go configuration export GOROOT=/usr/...阅读全文

博文 2015-11-14 18:00:03 Code_My_Life

golang学习笔记[3] 并发编程

// one project main.go package main import ( "fmt" "runtime" "sync" ) var counter int = 0 func Count(lock *sync.Mutex) { //每次对counter操作前都需要加锁,每次使用完之后都要解锁。 lock.Lock() counter++ fmt.Println(counter) lock.Unlock() } func main() { //创建一个sync包下的Mutex结构体 lock := &sync.Mutex{} for i := 0; i < 10; i++ { go Count(lock) } for { lock.Lock() c := counter lock...阅读全文

博文 2016-02-03 04:00:01 zhouyunxuan

Go 原子操作

概念 原子操作,意思就是执行的过程不能背终端的操作。在针对某个值的原子操作执行过程中,cpu不会再去执行其他针对这个值得操作。在底层,这会由CPU提供芯片级别的支持,所以绝对有效。即使在拥有多CPU核心,或者多CPU的计算机系统中,原子操作的保证也是不可撼动的。Go语言提供了院子操作的包atomic。其中有很多函数可以帮助我们进行原子操作。但是只能对几种简单类型进行原子操作:int32、int64、uint32、uint64、uintptr和unsafe.Ponter。atomic为这些简单类型童工了5中操作函数:增或减、比较并交换、载入、存储和交换。 为什么选择原子操作 我们知道go语言在sync包中提供了锁的包,但是为什么我们还要使用atomic原子操作呢?总结下来有一下几个原因: 加锁...阅读全文

博文 2019-04-10 19:34:40 大二小的宝

深入理解Go-sync.Map原理剖析

Map is like a Go map[interface{}]interface{} but is safe for concurrent useby multiple goroutines without additional locking or coordination. Loads, stores, and deletes run in amortized constant time. 上面一段是官方对sync.Map 的描述,从描述中看,sync.Map 跟map 很像,sync.Map 的底层实现也是依靠了map,但是sync.Map 相对于 map 来说,是并发安全的。 1. 结构概览 1.1. sync.Map sync.Map的结构体了 type Map struct ...阅读全文

博文 2019-09-08 18:32:52 tyloafer

ubuntu eclipse 编写简单go语言

1、下载配置Golang,配置相关环境 一、现在地址:http://www.golangtc.com/download 我选择的是下面这个(64位,linux版) 二、配置环境 解压后在.bashrc中配置环境变量 2、配置gocode 默认情况下go的解压包里面没有gocode,所以我们需要安装一个,通过命令: ? 1 go get -u github.com/nsf/gocode 就可以在go的目录里看到了: 3、eclipse集成goclipse插件 goclipse(https://github.com/GoClipse/goclipse )是eclipse的一个go语言插件,可以在eclipse里面在线安装也可以下载,解压,将features和plugins目录里面的文件复制到ec...阅读全文

博文 2015-06-17 23:01:36 Java__Coder

Mac OS 10.9 [Mavericks] 编译支持 ZeroMQ 4.0.1 版本的 gozmq

下载 4.0.1 版本的 ZeroMQ 代码后解压到任意目录。 tar -xzvf zeromq-4.0.1.tar.gz cd zeromq-4.0.1 ./configure --prefix=/usr make make install go get -tags zmq_4_x github.com/alecthomas/gozmq 测试程序 package main import ( "fmt" zmq "github.com/alecthomas/gozmq" "os" ) func main() { major, minor, patch := zmq.Version() fmt.Printf("Current 0MQ version is %d.%d.%d\n", major,...阅读全文

博文 2017-02-09 13:21:25 genedna

Go语言中的条件变量

Go语言sync package提供了条件变量(condition variable)类型: type Cond struct { // L is held while observing or changing the condition L Locker // contains filtered or unexported fields } type Cond func NewCond(l Locker) *Cond func (c *Cond) Broadcast() func (c *Cond) Signal() func (c *Cond) Wait() type Locker type Locker interface { Lock() Unlock() } A Locker r...阅读全文

博文 2017-06-25 14:07:59 肖楠

golang-读写锁

写解锁会试图唤醒所有因欲进行的读锁定而堵塞的 goroutine 读解锁只会试图唤醒一个因欲进行写锁定而被堵塞的 goroutine package main import ( "fmt" "sync" "time" ) // 读写锁 /** sync.RWMutex 读写锁类型 提供的函数: 写锁:加锁/解锁 func (*RWMutex) Lock() func (RWmutex) UnLock() 读锁:加锁/解锁 func (*RWMutex) RLock() func (RWmutex) RUnLock() 写解锁会试图唤醒所有因欲进行的读锁定而堵塞的 goroutine 读解锁只会试图唤醒一个因欲进行写锁定而被堵塞的 goroutine **/ func main() { var...阅读全文

博文 2020-02-04 19:33:06 爱吃豆包

golang zip解压

package main import ( "archive/zip" "fmt" "github.com/axgle/mahonia" "io" "os" ) func main() { File, err := zip.OpenReader("init.zip") if err != nil { fmt.Println(err) } defer File.Close() for _, v := range File.File { info := v.FileInfo() if info.IsDir() { err := os.MkdirAll(mahonia.NewDecoder("gb18030").ConvertString(v.Name), 0644) if err != nil ...阅读全文

博文 2016-09-12 12:00:41 牛牛张

Go 之旅五: 并发

本文是学习 A Tour of Go (中文参考 Go 之旅中文 ) 整理的笔记。介绍Go 语言线程,信道以及互斥锁的概念和使用方法。 1. Go 线程 $GOPATH/src/go_note/gotour/concurrency/goroutine/goroutine.go 源码如下 /** * go 语言线程 */ package main import ( "fmt" ) func say(s string) { for i := 0; i < 2; i++ { fmt.Println(i, s) } } func main() { go say("world") say("hello") } 1234567891011121314151617181920 /** * go 语言...阅读全文

博文 2017-03-10 05:53:30 xugang

golang 创建压缩文件

import ( "os" "archive/zip" "io" "fmt" "strings" ) // ZipFiles compresses one or many files into a single zip archive file. //压缩多个文件到一个文件里面 // Param 1: 输出的zip文件的名字 // Param 2: 需要添加到zip文件里面的文件 //Param 3: 由于file是绝对路径,打包后可能不是想要的目录,oldform就是filename中需要被替换的掉的路径 //Param 4: 要替换成的路径 func ZipFiles(filename string, files []string, oldform, newform string) er...阅读全文

博文 2018-12-05 19:35:53 woahjknes

centos安装GOLang开发环境

先到GO的官方下载地址下载自己相对应的安装包 GO下载地址:url 新一下载了(go1.2.1.linux-386.tar.gz)安装包,下载完成后解压到/usr/local/目录中 tar xzvf go1.2.1.linux-386.tar.gz -C /usr/local/ 接着给GO设置环境变量 export PATH=$PATH:/usr/local/go/bin 这样子新一就安装好了,检查下是否安装好 go version //go version go1.2.1 linux/386 OK!大功告成!GO是需要GCC的。请检查下...阅读全文

golang并发编程读写锁sync.RWMutex

一、介绍 sync.RWMutex 为读写锁,lock为写锁定 ,Unlock 为写解锁,RLock为读锁,RUnlock为读解锁。 二、场景 适用于场景:多读一写,读可以同时进行,但是写只能一个写,读写是互斥的要么只能读或者只能写 三、代码测试 功能性测试 第一种场景 测试内容 : 读锁存在的情况下,同时出现读和写的操作,此时优先获取写锁 package main import ( "testing" "fmt" "sync" "time" ) var rwlock = &sync.RWMutex{} var wg = &sync.WaitGroup{} func TestRWMutex(t *testing.T) { //读 wg.Add(1) go rlockwork() time.S...阅读全文

博文 2019-06-27 21:32:40 清晨的麦田

Bytom资产发行与部署合约教程

发行资产 在比原链上发行资产比较方便快捷,使用节点的dashboard图形界面操作就可以,先在 “资产”一栏新建资产 新建完资产,需要上链,否则区块不认识你这个资产,那么在交易中的高级交易进行issue,点击Add action,总共三个action分别是 Issue、Control with address、Spend from account 输入账户的密码,等待交易确认,一旦确认成功资产就会发到刚才指定的地址上。可以只发一个地址,也可以发到多个地址,添加多个Control with address 即可。 编译合约 编译合约通过api进行编译,准备好postman或者其他可以post的工具,笔者使用的是postman。笔者看了官方的多个合约模版,于是准备部署一个简单的比较数字大小的合约...阅读全文

博文 2018-09-25 15:34:45 比原链Bytom

Go中接口的类型查询:comma-ok断言和switch测试

// code_026_go_antic_package project main.go

package main import ( "container/list" "fmt" "math/rand" //备注2:随机数的包 "sync" //备注1:异步任务的包 "time" ) type INFO struct { lock sync.Mutex //备注1:异步锁 Name string Time int64 } var List *list.List = list.New() //备注3:初始化List变量 func main() { var Info INFO go func() { for i := 0; i < 5...阅读全文

博文 2018-10-06 17:35:09 ck_god

golang zip解压

package main import ( "archive/zip" "fmt" "github.com/axgle/mahonia" "io" "os" ) func main() { File, err := zip.OpenReader("init.zip") if err != nil { fmt.Println(err) } defer File.Close() for _, v := range File.File { info := v.FileInfo() if info.IsDir() { err := os.MkdirAll(mahonia.NewDecoder("gb18030").ConvertString(v.Name), 0644) if err != nil ...阅读全文

博文 2016-08-30 11:00:08 牛牛张

用 Go 构建一个区块链 -- Part 4: 交易(1)

翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。如果想直接运行代码,也可以 clone GitHub 上的教程仓库,进入 src 目录执行 make 即可。 引言 交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易。在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它。在今天的文章中,我们将会开始实现交易这个部分。不过,由于交易是很大的话题,我会把它分为两部分来讲:在今天这个部分,我们会实现交易的通用机制。在第二部分,我们会继续讨论它的一些细节。 此外,由于代码实现变化很大,就不在文章中罗列所有代码了,这里 可以看到所有的改动。 没有...阅读全文

博文 2017-11-13 11:04:40 liuchengxu

28. 学习 Go 协程:互斥锁和读写锁

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 在 「19. 学习 Go 协程:详解信道/通道」这一节里我详细地介绍信道的一些用法,要知道的是在 Go 语言中,信道的地位非常高,它是 first class 级别的,面对并发问题,我们始终应该优先考虑使用信道,如果通过信道解决不了的,不得不使用共享内存来实现并发编程的,那 Gol...阅读全文

博文 2020-06-05 08:32:58 Python编程时光