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

用Golang写一个搜索引擎(0x08)--- 索引的段

我觉得这个标题应该改改了,我写下来其实是告诉大家怎么写一个搜索引擎,并没有涉及太多的Golang的东西,我觉得这样也挺好,熟悉了原理,用什么实现其实并不重要了,而且说说原理比说代码更实在。 之前已经说了底层的数据结构了,包括倒排和正排索引。今天我们上一层,来说说索引的字段和段。 字段这个上一篇已经介绍过了,字段的概念实际上是搜索引擎索引中我们能看到的最底层的东西,也是对外暴露的最底层的概念,在字段之下是倒排和正排索引,这两项其实对用户是封装起来了,我们可以认为每个字段对应一个正排和一个倒排,而实际上也确实是这样的。 在字段之上就是我们这一篇主要说的段了,段这个概念并不是搜索引擎特有的,也不是必须的,是我这个项目新增出来的,当然,也不是我原创,很多搜索引擎的引擎系统都有这个概念。 所谓段,就是...阅读全文

博文 2017-02-09 08:19:58 吴yh坚

Golang学习 - strconv 包

// 将布尔值转换为字符串 true 或 false func FormatBool(b bool) string // 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False // 其它任何值都返回一个错误。 func ParseBool(str string) (bool, error) // ErrRange 表示值超出范围 var ErrRange = errors.New("value out of range") // ErrSyntax 表示语法不正确 var ErrSyntax = errors.New("invalid syntax") // 将整数转换为字符串形...阅读全文

博文 2019-04-21 22:34:41 佛心看世界

mutex.go

概述 mutex.go是golang中针对互斥锁的实现,内部仅提供两个方法,分别是Lock()和Unlock,同时定义了几个常量和一个Mutex结构,如下 type Mutex struct { state int32 // 互斥锁上锁状态枚举值如下所示 sema uint32 // 信号量,向处于Gwaitting的G发送信号 } const ( mutexLocked = 1 << iota // 1 互斥锁是锁定的 mutexWoken // 2 唤醒锁 mutexWaiterShift = iota // 2 统计阻塞在这个互斥锁上的goroutine数目需要移位的数值 ) 如果对Mutex进行复制,可能会导致锁失效,因为内部都是值复制,相当于复制了一把新锁,mutexLocked标...阅读全文

博文 2019-03-29 20:34:40 killtl

Go 标准库 —— sync.Mutex 互斥锁

Mutex 是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex 类型的锁和线程无关,可以由不同的线程加锁和解锁。 方法 func (*Mutex) Lock func (m *Mutex) Lock() Lock 方法锁住 m,如果 m 已经加锁,则阻塞直到 m 解锁。 func (*Mutex) Unlock func (m *Mutex) Unlock() Unlock 方法解锁 m,如果 m 未加锁会导致运行时错误。 注意 在一个 goroutine 获得 Mutex 后,其他 goroutine 只能等到这个 goroutine 释放该 Mutex 使用 Lock() 加锁后,不能再继续对其加锁,直到利用 Unlock() 解锁后才能再加锁 在 Lock() 之前使...阅读全文

博文 2018-06-05 11:34:38 舆图易稿

LeetCode-8-字符串转换整数 (atoi)

题目描述 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0。 说明: 假设我们的环境只能存储 32 位大小的...阅读全文

golang标准库之strconv

字符串转整型 package main import ( "fmt" "strconv" ) func main() { //字符串转为整数 s := "128" // func ParseInt(s string, base int, bitSize int) (i int64, err error) // 返回字符串表示的整数值,接受正负号。 // base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制; // bitSize指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64; // 返回的err是*NumErr类型的,如果语法有误,err.Erro...阅读全文

博文 2019-10-04 15:32:45 aside section ._1OhGeD

go-Printf占位符(之后有时间整理成表格)

自https://768992698.iteye.com/blog/2326069 # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("%+v", people) {Name:zhangsan} %#v 相应值的Go语法表示 Printf("#v", people) main.Human{Name:"zhangsan"} %T 相应值的类型的Go语法表示 Printf("%T", people) mai...阅读全文

博文 2019-06-19 11:02:57 p_gerer

GoLang 小计

1. 每个package 都有 一个 init 函数可以默认进行调用。 不能自己手动调用。 2. 取模余数正负号和被除数一致。 3. new 出来的对象不一定是创建在堆上。 两个 空 struct 被new出来可能有相同的地址。 4. %v 内置格式输出 %b 二进制输出。 5. x & y 都是1 得到1 ,否则为0 交集 x | y 有1 得1 并集 x^y 相同得0 否则得1 对称差 x&^y y对应1位 清理x对应位,否则不动 差集 x = 00100010 y = 00000110 x&y = 00000010 x|y = 00100110 x^y = 00100100 x&^y = 00100000 6. 代码中数字 0666(八进制) 0xffffeeee(十六进制) 7.fm...阅读全文

博文 2018-08-07 07:30:02 gamearea

环境搭建

https://golang.google.cn/dl/ 1、下载二进制包:go1.4.linux-amd64.tar.gz。 wget https://dl.google.com/go/go1.12.8.linux-amd64.tar.gz 2、将下载的二进制包解压至 /usr/local目录。 tar -C /usr/local -xzf go1.12.8.linux-amd64.tar.gz 3、将 /usr/local/go/bin 目录添加至PATH环境变量:export PATH=$PATH:/usr/local/go/bi...阅读全文

博文 2019-08-16 00:32:52 麦子时光_新浪微博

go channel实现浅析

![qrcode_for_gh_5fcf50a6cc50_344.jpg](https://static.studygolang.com/180302/5316ebc60d4994ed92450c8b5da025f9.jpg) 实现: go1.10/src/runtime/chan.go CSP模型的实现 带缓冲的channel: c.qcount>0 表示c.recvq是empty的,可以接收数据。 c.qcount < c.dataqsiz意味着c.sendq是empty的,可以发送数据。 hchan结构体使用一个环形队列来保存groutine之间传递的数据(如果是缓存channel的话),使用两个list保存向...阅读全文

Golang 互斥锁与读写锁

互斥锁 代码示例 package main import ( "fmt" "sync" "time" ) func main() { //声明 var mutex sync.Mutex fmt.Println("Lock the lock. (G0)") //加锁mutex mutex.Lock() fmt.Println("The lock is locked.(G0)") for i := 1; i < 4; i++ { go func(i int) { fmt.Printf("----Lock the lock. (G%d)\n", i) mutex.Lock() fmt.Printf("++++The lock is locked. (G%d)\n", i) }(i) } //休息一...阅读全文

博文 2019-03-30 02:34:40 Rnben

子操作&普通锁&读写锁

一:原子操作CAS(compare-and-swap) 原子操作分三步:读取addr的值,和old进行比较,如果相等,则将new赋值给*addr,他能保证这三步一起执行完成,叫原子操作也就是说它不能再分了,当有一个CPU在访问这块内容addr时,其他CPU就不能访问 func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool) TEXT ·CompareAndSwapUint64(SB),NOSPLIT,$0-25 MOVD addr+0(FP), R3 MOVD old+8(FP), R4 MOVD new+16(FP), R5 SYNC LDAR (R3), R6 CMP R6, R4 BNE 7(PC) STD...阅读全文

博文 2019-01-17 20:15:13 hlxs

《go语言圣经》练习3.11

# 题目 **完善comma函数, 以支持浮点数处理和一个可选的正负号的处理** 本程序还没实现第二个功能 #代码 ```go package main import ( "fmt" "bytes" "os" "strings" ) func commaLeft (s string) string { //commaLeft 函数实现小数点左边数字的三位分节 var buf bytes.Buffer if len(s) <= 3 { return s } n := len(s)%3 if n == 0 { n = 3 } buf.WriteString(s[:n]) for n < len(s) { buf.WriteByte(',') buf.WriteString(s[n:n+3]) n...阅读全文

博文 2019-07-21 15:20:01 xiayanshangda

Bytom DAPP 开发流程

从目前已经发布的DAPP来看,DAPP架构大致可以分成3种类型:插件钱包模式、全节点钱包模式和兼容模式。 插件钱包模式是借助封装了钱包的浏览器插件通过RPC协议与区块链节点通信,插件在运行时会将Web3框架注入到DAPP前端页面中,然后DApp通过Web3来与区块链节点通信。 全节点钱包模式需要项目方同步并持有一个区块链节点,并对外提供一个浏览器环境与用户进行交互。 兼容模式可以在插件钱包和全节点钱包下同时使用,即上述两种方式可以自由切换,安全性能相对较高。 接下来介绍的比原链DAPP的架构模式跟账户模型DAPP的插件钱包模式有些相似,都是由DAPP前端、插件钱包和合约程序共同组成,其中插件钱包需要连接去中心化的区块链服务器blockcenter,该服务器主要是为了管理插件钱包的相关信息。此...阅读全文

博文 2019-07-18 10:32:43 比原链Bytom

不得不知道Golang之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-07-02 16:55:54 梦朝思夕

图解Go select语句原理

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

博文 2019-04-03 15:34:43 RyuGou

17.Go语言内置包之strconv

1.strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数:Atoi(),Itia(),parse系列,format系列,append系列。 1.1string与int类型转换 1.1.1Atoi() Atoi()函数用于将字符串类型的整数转换为int类型 func Atoi(s string) (i int, err error) 如果传入的字符串参数无法转换为Int类型,就会返回错误。 package main import ( "fmt" "strconv" ) func main() { s1 := "100" i1,err := strconv.Atoi(s1) if err != nil{ fmt.Println("can not conve...阅读全文

博文 2020-02-07 19:33:11 DevOperater

Python学习教程(Python学习路线):正则表达式-第二讲

Python学习教程(Python学习路线):正则表达式!这里接着跟大家讲正则表达式!想了一下觉得还得跟大家说点什么!毕竟正则表达式是很难的嘛!如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此,当然,也包括我。因为正则表达式也是我写Python爬虫的一大利器。再大再乱的内容,哪怕是大海捞针,只要告诉我这个针的样子我都能从茫茫大海中捞出来。至于我是怎么学会的,当然是从一开始的刷题,到后面不断的实战练习练习练习!(重点!!!)这里给推荐几个学习正则表达式的利器和网站,前面也有跟大家出了教程,剩下的还是靠你们自己去完成。第一:如果你还不知道正则表达式是什么,但是却要使用它的话。从这里可以快速入门。正则表达式30分...阅读全文

博文 2019-05-29 17:34:43 Pyhon_jack

藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。 很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。public static void main(String[] args) { String badRegex = "^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]...阅读全文

博文 2018-11-05 18:34:44 java菜

Golang学习 - strconv 包

// 将布尔值转换为字符串 true 或 false func FormatBool(b bool) string // 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False // 其它任何值都返回一个错误。 func ParseBool(str string) (bool, error) ------------------------------ // ErrRange 表示值超出范围 var ErrRange = errors.New("value out of range") // ErrSyntax 表示语法不正确 var ErrSyntax = errors.New(...阅读全文

Go小技巧之互斥锁、随机数、time、List

// 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 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-07-02 14:42:30 梦朝思夕

golang-101-hacks(1)——创建开发环境

注:本文是对golang-101-hacks中文翻译,本文的原文地址 创建Go开发环境是非常容易的,以Linux系统为例,你只需要从https://golang.org/dl/ 下载和你系统匹配的二进制包,然后解压包文件就OK了。(注意作者原文的下载的包文件版本有点旧 ,建议下载最新版本,目前最新版本是1.12了) # wget https://storage.googleapis.com/golang/go1.6.2.linux-amd64.tar.gz # tar -C /usr/local/ -xzf go1.6.2.linux-amd64.tar.gz 返回将解压的包文件放在/usr/local目录下,就结束安装了,但然还有一些收尾工作需要做: 1 为了直接运行Go工具类命令(go,...阅读全文

博文 2019-05-20 18:34:46 羊羽share

藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键...阅读全文

博文 2019-02-20 12:34:43 Java高级架构师

AQS抽象队列同步器

模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 Lock接口及其实现 中,DemoReentrantLock 和 DemoReadWriteLock 代码相似度很高。DemoReentrantLock 中的加解锁完全可以用DemoReadWriteLock中代替,即可实现加解锁。 优化两个锁的代码-采用模板方法模式 CommonMask实现两个锁共有的方法 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurr...阅读全文

博文 2020-01-19 01:32:42 依弗布德甘

白话比原链跨链技术

随着Bystack的主侧链架构的推出,主侧链之间的跨链问题也成为比原链团队的主要攻克工程难题,当前比原链已经推出了两种跨链的机制,各有不同的侧重点,可能因为本身的跨链技术比较晦涩,本篇想以较为通俗的方式向社区介绍比原链最新的跨链技术。 一些预备知识 跨链简单的来说就是解决如何让一条链上的token转移到另一条链上,本质是将一条链上的价值转移到另一条链,跨链需要保证以下几点: 1. 确保已跨链的资产的妥善保管,不能在原链上能够继续流通,要防止被窃取或者挪用; 2. 确保两条链上转移的资产是等同的,不能A链上减少了100价值的资产,而B链上只增加了50价值的资产; 3. 转移的资产能够安全的再转移回原链上,不能价值只是单向转移,或者转移过去无法转移回来; 基于这些要求,诞生出很多不同的跨链方案,...阅读全文

博文 2019-09-19 10:02:48 比原链Bytom

2020教你深入理解Golang之channel

前言Golang在并发编程上有两大利器,分别是channel和goroutine,这篇文章我们先聊聊channel。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这篇文章会先从channel的用法、channel的原理两部分对channel做一个较为深入的探究。channel用法什么是channel从字面上看,channel的意思大概就是管道的意思。channel是一种go协程用以接收或发送消息的安全的消息队列,channel就像两个go协程之间的导管,来实现各种资源的同步。可以用下图示意: channel的用法很简单: func main() {...阅读全文

博文 2020-02-17 20:32:48 即将秃头的Java程序员

Go RWMutex 源码学习

概述 上一篇文章我们看go了互斥锁的具体实现。但是如果业务逻辑是读多写少,如果每次读写都使用互斥锁那么整个效率就会变得很低。其实如果只是读的话并不需要互斥锁来锁住数据。只有写操作的时候需要互斥锁,但是如果有人读那么写操作也应该被锁住。在Go语言中提供了读写锁:RWMutex,并且提供了4个方法 读锁、读解锁、写锁、写解锁。其中读锁不是互斥,但是读锁和写锁是互斥的。简单来说是可以有多个读同时加锁,但是一旦有人想要获取写锁则会被阻塞。 简单使用 我们可以看到读锁可以获取多个,但是读锁还剩下一个的时候想要获取写锁则会被阻塞。等待3秒之后读锁被全部解开之后,会唤醒之前阻塞的写锁。别忘记最后需要解开写锁。还有一个比较常见的问题是,如果给没有读锁或者写锁的情况下解锁被抛出错误。 package main...阅读全文

博文 2019-08-01 11:32:40 大二小的宝

Go Mutex 源码学习

概述 互斥锁是并发程序中对共享资源进行访问控制的主要手段,Mutex是go语言提供的简单易用的互斥锁。Mutex的结构很简单,暴露的方法也只有2个,一个加锁 一个解锁。那么我们每天用的Mutex互斥锁是如何实现的呢?其实使用的是go语言automic包中的院子操作,具体如何使用可以参考之前写的文章。在Mutex中的state是状态码,在mutex中把state分成4段。如下图: Locked:表示是否上锁 上锁为1 未上锁为0 Woken:表示是否被唤醒,唤醒为1 未唤醒为0 Starving:表示是否为饥饿模式,饥饿模式为1 非饥饿模式为0 waiter:剩余的29位则为等待的goroutine数量 互斥锁的实现其实就是争夺Locked,当goroutineA 抢到了锁之后,第二个Goro...阅读全文

博文 2019-07-31 14:32:40 大二小的宝

RSCHA认证第六讲管理用户密码

RH124系列课程的目标: 1、获得 Redhat 或者 centos 上执行核心系统管理任务所需的足够技能。 2、掌握 RHCSA 认证红帽企业 Linux 系统管理员所需的基本技能。 本章的目标:管理用户密码。 手动锁定帐户,或者通过定义在阴影密码文件中设置密码过期策略来锁定。 阴影密码和密码策略 在遥远的过去,加密的密码存储在全局可读的/etc/passwd 文件中。这曾被认为具有合理的安全性,直到对加密密码的字典式攻击变得常见。在那时,加密密码或“密码哈希”移到更加安全的/etc/shadow 文件中。这种新文件也允许实施密码期限和到期功能。 现代密码哈希中的存储三段信息: $6$8k9dc5/aS415T 6: 哈希算法。数字1表示MD5哈希。使用SHA-512哈希时会出现数字6 ...阅读全文

博文 2019-08-10 02:32:43 多多北漂悟道之路

让我们一起啃算法----整数反

整数反转(Reverse-Integer) 这是一个比较简单的题目,题干如下: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1: 输入: 123 输出: 321示例 2: 输入: -123 输出: -321示例 3: 输入: 120 输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。来源:力扣 我觉得这个题目的考点在于让你有个意识:数字类型是有可能溢出的。 解题思路 这个题整体的思路就是:与10取模,再与10相除取整,往复循环直至目标值为0,流程图如下: 其中需要注意点有两个: 负数和正数其实不用分类讨论,例如 -123 与 10 取模得到的值...阅读全文

博文 2020-04-24 10:32:44 三斤和他的朋友们

golang基础--细说defer

defer 匿名函数特性 执行方式类似其它语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行 //执行顺序相反 package main import "fmt" func main() { fmt.Println("a") defer fmt.Println("b") defer fmt.Println("c") } /*输出 a c b */ 即使函数发生严重的错误也会执行,类似于try...except 常用于 资源清理,文件关闭,解锁以及记录时间等操作 支持匿名函数的调用 通过于匿名函数配合可在return之后修改函数计算的结果 -如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则 则时引用某个变量的地址 //支持匿名函数 ...阅读全文

博文 2018-07-12 13:30:31 failymao

EOS Cleos 命令使用指南

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 命令参考操作 语法 例子 获取所有命令 $ cleos 例子 获取所有子命令 $ cleos ${command} 例子 链接节点 $ cleos --url ${node}:${port} 例子 查询区块链状态 $ cleos get info 例子 通过transaction_id获取交易 $ cleos get transaction ${transaction_id} 例子 通过帐户获取交易 $ cleos get transaction ${account} 例子 转账EOS $ cleos transfer ${from_account} ${to_account} ${quantity} 例子 钱包...阅读全文

博文 2019-09-16 12:32:38 链客

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

Map is like a Go map[interface{}]interface{} but is safe for concurrent use by 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-09 01:04:19 tyloafer

golang fmt格式“占位符”

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("%+v", people) {Name:zhangsan} %#v 相应值的Go语法表示 Printf("#v", people) main.Human{Name:"zhangsan"} %T 相应值的类型的Go语法表示 Printf("%T", people...阅读全文

博文 2018-08-30 12:30:01 soundcode

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 15:33:13 梦朝思夕

leetcode 25. k个一组翻转链表

题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。 示例: 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 解题思路 1. 取链表的前K个节点,如果够K个节点,就截断后进行反转,不够K个节点,说明处理完了,return 2. 反转完前K个节点后,使用递归,处理后面的链表 代码实现 // ListNode Definition for singl...阅读全文

博文 2018-10-27 09:34:38 tomorrowwu

Bytom猜谜合约使用指南

准备工作: 1、安装全节点钱包V1.0.5以上并同步完成; 2、已经发行一种资产,发行资产的方法具体见文章《如何在Bytom上发布资产?》 3、准备好一些BTM作为手续费; 设置谜语(锁定资产): 1、打开钱包,点击Equity合约按钮; 2、进入Equity合约页面,点击加载模板,可以看见猜谜合约; 3、点击猜谜合约,进入猜谜合约模板; 4、在锁定资产页面中,选择我们要奖励给猜对答案的资产奖励(当前不支持直接锁定BTM,所以我们需要新建一种资产进行锁定); 设置锁定GOLD资产,选择想要的数量(注意:1=1诺=0.00000001单位,所以你如果想给别人发1单位的资产,需要填入100000000),填入密码以及Gas费用(合约建议固定给0.4btm); 5、设置猜谜的谜底(正确答案),比如...阅读全文

博文 2018-09-12 10:34:39 比原链Bytom

Golang 读写锁RWMutex 互斥锁Mutex 源码详解

前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现。 引子问题 我一般喜欢带着问题去看源码。那么对于读写锁,你是否有这样的问题,为什么可以有多个读锁?有没有可能出现有协程一直无法获取到写锁的情况?带着你的疑问来往下看看,具体这个锁是如何实现的。 如果你自己想看,我给出阅读的一个思路,可以先看读写锁,因为读写锁的实现依赖于互斥锁,并且读写锁比较简单一些,然后整理思路之后再去想一下实际的应用场景,然后再去看互斥锁。 下面我就会按照这个思路一步步往下走。 基础知识点 知识点1:信号量 信号量是 Edsger Dijkstra 发明的数据结构(没错就是那个最短路径算法那个牛人),在解决...阅读全文

博文 2019-06-10 17:33:26 LinkinStar

golang源码学习之mutex

老实说呢,Mutex源码我看了好多遍,依旧没完全看懂。各种状态逻辑很难理解。(golang 1.12.7) 先来看看Mutex的核心注释 // Mutex fairness. // // Mutex can be in 2 modes of operations: normal and starvation. // In normal mode waiters are queued in FIFO order, but a woken up waiter // does not own the mutex and competes with new arriving goroutines over // the ownership. New arriving goroutines have ...阅读全文

《Go语言四十二章经》第二十三章 锁

《Go语言四十二章经》第二十三章 锁 作者:李骁 ## 23.1 同步锁 Go语言包中的sync包提供了两种锁类型:sync.Mutex和sync.RWMutex,前者是互斥锁,后者是读写锁。 互斥锁是传统的并发程序对共享资源进行访问控制的主要手段,在Go中,似乎更推崇由channel来实现资源共享和通信。它由标准库代码包sync中的Mutex结构体类型代表。只有两个公开方法:调用Lock()获得锁,调用unlock()释放锁。 * 使用Lock()加锁后,不能再继续对其加锁(同一个goroutine中,即:同步调用),否则会panic。只有在unlock()之后才能再次Lock()。异步调用Lock(),是正当的锁竞争,当然不会有panic了。适用于读写不确定场景,即读写次数没有明显的区别...阅读全文

博文 2018-10-12 20:28:08 roteman

golang fmt格式“占位符”

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 # 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段名 Printf("%+v", people) {Name:zhangsan} %#v 相应值的Go语法表示 Printf("#v", people) main.Human{Name:"zhangsan"} %T 相应值的类型的Go语法表示 Printf("%T", people...阅读全文

博文 2020-01-04 19:32:50 寒云暮雨

Golang学习笔记-sync

Mutex sync.Mutex为互斥锁,同一时间只能有一个goroutine获得互斥锁。 使用Lock()加锁,Unlock()解锁,加锁前不能解锁,加锁后不能继续加锁。 已经锁定的 Mutex 并不与特定的 goroutine 相关联,可以利用一个 goroutine 对其加锁,再利用其他 goroutine 对其解锁。 适用于同一时间只能有一个goroutine访问资源的场景。 下面的代码如果不使用Mutex,输出的会是1 1 2 2 3 3而不是1 2 3 1 2 3。 package main import ( "fmt" "sync" "time" ) var ( mutex sync.Mutex ) func print123(){ mutex.Lock() defer mut...阅读全文

博文 2019-12-18 05:32:40 土豆吞噬者

把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路 此问题其实属于排序问题。 需要比较num1+num2的组合与num2+num1的组合,将小的放在前面。 借助java原生的sort方法,传入自定义的比较器即可。 Java代码实现 public class Solution { public String PrintMinNumber(int [] numbers) { String[] transfer = new String[numbers.length]; for (int i = 0; i < numbers.length; i++) { t...阅读全文

博文 2020-01-18 15:32:43 youzhihua

Go36-27,28-条件变量

条件变量 条件变量(conditional variable),和互斥锁一样,也是一个同步工具。我们常常会把条件变量与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。 作用 条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。当共享资源的状态发生变化时,它可以被用来通知被互斥锁阻塞的线程。 使用条件变量的最大优势就是在效率方面的提升。当共享资源的状态不满足条件的时候,想操作它的线程再也不用循环往复的做检查了,只要等待通知就好了。 使用条件变量 条件变量需要与互斥锁配合使用。条件变量的初始化需要互斥锁,并且它的方法有的也是基于互斥锁的。 条件变量提供的方法有三个: 等待通知(wait) 单发通知(signal) 广播通知(br...阅读全文

博文 2019-01-27 07:35:12 骑士救兵

golang 每日一包之sync.cond

该包结构如下: sync包结构 1:Cond类型其结构如下:Locker 的传入类型可以为*Mutex 或 *RWMutex cond结构 其主要方法如下:1. 构造方法 该方法用于初始化一个cond实例2. 广播 该方法用于唤醒所有因条件等待的协程3. 单个通知 该方法用于通知获得锁的单个协程4. 等待阻塞 等待 c.L 解锁并挂起 goroutine,在稍后恢复执行后,Wait 返回前锁定 c.L,只有当被 Broadcast 和 Signal 唤醒,Wait 才能返...阅读全文

博文 2020-03-23 15:33:20 Orain

试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。

试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。 1.问题描述 已知一个长度为 n 的数组和一个正整数 k,并且最多只能使用一个用于 交换数组元素的附加空间单元,试设计算法得到原数组循环右移 k 次的 结果并分析算法的时间复杂度。 2.解决思路 根据三步反转法,实现时间复杂度为O(n),空间复杂度为O(1) 过程: 1、将整体数组进行反转,原顺序1,2,3,4,5,6,7,8,9变为9,8,7,6,5,4,3,2,1 2、将前K-1个数进行反转,比如K=2,则结果为:8,9,7,6,5,4,3,2,1 3、将后K个数进行反转,结果:8,9,1,2,3,4,5,6,7 3.代码实现 golang code: package main import "fmt" func Do...阅读全文

博文 2019-06-25 16:03:44 小橙子Chelsea

用Go学UNIX环境编程 - 记录锁

本文参考《Unix环境高级编程》,Mac下实验结果可能会和书上有所不同(因为书上是以freeBSD进行实验),希望读者可以在不同的系统下进行实验,如果文章有错误的地方,还请提出,我会及时修正。 一、背景: 试想一下当两个人同时编辑一个文件时,其后果是什么样的呢?在unix系统中,文件的状态取决于写该文件的最后一个进程,比如数据库系统,需要保证多个进程写文件,依旧保持正确性。因此unix提供了记录锁的机制,作用是当一个进程正在读或者写一个文件时可以阻止另一个进程对同一个区域进行保护避免冲突。 在go语言里提供了两个接口来实现记录锁 syscall.Flock:支持整个文件记录锁 syscall.FcntlFlock: 支持字节范围记录锁 二、文件记录锁 2.1: 说明 syscall: Flo...阅读全文

博文 2019-10-13 18:32:43 jiangjincc