go语言区块链学习调用智能合约

go语言区块链学习调用智能合约

1. 获取abi文件 合约的接口 在remix工具中编译合约后,会有一个abi,复制 然后新建一个xx.abi文件,把赋值的粘贴到里面 注意:代码变了,重新编译后abi也会变,所以一定要用最新的abi 也可以通过solc生成abi: solc --bin test.sol -o test.abi 2. 安装abigen工具 用来生成go文件, 下载文件:github地址 找到这个main.go文件,进行go build,生成abigen.exe文件。...

2022-11-25 500 0
详解go语言中并发安全和锁问题

详解go语言中并发安全和锁问题

首先可以先看看这篇文章,对锁有些了解 GO语言并发编程之互斥锁、读写锁详解 Mutex-互斥锁 Mutex 的实现主要借助了 CAS 指令 + 自旋 + 信号量 数据结构: type Mutex struct { state int32 sema uint32 } 上述两个加起来只占 8 字节空间的结构体表示了 Go语言中的互斥锁 状态: 在默认情况下,互斥锁的所有状态位都是 0,int32 中的不同位分别表示了不同的状态: 1位表示是否被锁定 1位表示是否有协程已经被唤...

2022-11-25 491 0
Go语言中log日志库的介绍

Go语言中log日志库的介绍

一、标准库log介绍 Go语言内置的log包实现了简单的日志服务。 1、使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法。 log包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。 logger会打印每条日志信息的...

2022-11-25 518 0
Go来合并两个csv的实现示例

Go来合并两个csv的实现示例

背景 通常我们处理文件都是用python+pandas,确实很香。但是今天突然有人找我用go写一个合并两个csv文件的,需要将两个csv按id进行合并,大致如下图 思路很简单,先读入两个csv文件,然后遍历比较id,如果相同就把另一个文件的内容加到第一个中。然后创建merge.csv,将上一步得到的数据写入csv即可。 代码部分 package main import ( "encoding/csv" "log" "os" "fmt" ) func joi...

2022-11-25 496 0
Go 中实现超时控制的方案

Go 中实现超时控制的方案

前言 日常开发中我们大概率会遇到超时控制的场景,比如一个批量耗时任务、网络请求等;一个良好的超时控制可以有效的避免一些问题(比如 goroutine 泄露、资源不释放等)。 Timer 在 go 中实现超时控制的方法非常简单,首先第一种方案是 Time.After(d Duration): func main() { fmt.Println(time.Now()) x := <-time.After(3 * time.Second) fmt.Println(x) } outp...

2022-11-25 473 0
GO的range具体使用

GO的range具体使用

GO 语言的 for…range  能做什么呢? for…range  如何使用 ? for…range  的返回值有哪些情况,可以对于任何数据结构使用吗? for…range  的返回值如果不需要,可以如何处理? for…range  的数据是如何传递的? 刚学习 golang 的 xdm 会不会有上面的疑问?其实很简单,我们就一个一个的来分享和实操一遍 GO 语言的 for…range  能做什么呢? golang 的 for…range&nb...

2022-11-25 484 0
Go 中闭包的底层原理

Go 中闭包的底层原理

1. 什么是闭包? 一个函数内引用了外部的局部变量,这种现象,就称之为闭包。 例如下面的这段代码中,adder 函数返回了一个匿名函数,而该匿名函数中引用了 adder 函数中的局部变量 sum ,那这个函数就是一个闭包。 package main import "fmt" func adder() func(int) int { sum := 0 return func(x int) int { sum += x ret...

2022-11-25 464 0
为什么GO不支持循环引用

为什么GO不支持循环引用

学习 Go 语言的开发者越来越多了,很多小伙伴在使用时,就会遇到种种不理解的问题。 其中一点就是包的循环引用的报错: package command-line-arguments imports github.com/eddycjy/awesome-project/a imports github.com/eddycjy/awesome-project/b imports github.com/eddycjy/awesome-project/a: import cycle not allowed...

2022-11-25 530 0
golang redigo发布订阅使用的方法

golang redigo发布订阅使用的方法

redigo 对 发布订阅的使用 redigo 对redis 的发布订阅机制放在pubsub.go 中 订阅主题后 通过Receive() 函数接受发布订阅主题的消息 // Receive returns a pushed message as a Subscription, Message, Pong or error. // The return value is intended to be used directly in a type switch as // illustrated in t...

2022-11-25 437 0
定位并修复 Go 中的内存泄露问题

定位并修复 Go 中的内存泄露问题

Go 是一门带 GC 的语言,因此,大家很容易认为它不会有内存泄露问题。 大部分时候确实不会,但如果有些时候使用不注意,也会导致泄露。 本文案例来自谷歌云的代码,探讨如何找到并修复 Go 中的内存泄露。(确切来说是因为资源泄露导致的内存泄露,除了本文介绍的,还有一些其他泄露的情况) 这篇文章回顾了我如何发现内存泄漏、如何修复它,以及我如何修复 Google 示例 Go 代码中的类似问题,以及我们如何改进我们的库以防止将来发生这种情况。 Google Cloud Go 客户端库 [1] 通常在后台使用 gRPC...

2022-11-25 505 0
Go语言并发编程 互斥锁详情

Go语言并发编程 互斥锁详情

1、互斥锁Mutex 1.1 Mutex介绍 Go 语言的同步工具主要由 sync 包提供,互斥锁 (Mutex) 与读写锁 (RWMutex) 就是sync 包中的方法。 互斥锁可以用来保护一个临界区,保证同一时刻只有一个 goroutine 处于该临界区内。主要包括锁定(Lock方法)和解锁(Unlock方法)两个操作,首先对进入临界区的goroutine进行锁定,离开时进行解锁。 使用互斥锁 (Mutex)时要注意以下几点: 不要重复锁定互斥锁,否则会阻塞,也可能会导致死锁(deadloc...

2022-11-25 473 0
浅谈golang 的高效编码细节

浅谈golang 的高效编码细节

xdm,我们都知道 golang 是天生的高并发,高效的编译型语言 可我们也都可知道,工具再好,用法不对,全都白费,我们来举 2 个常用路径来感受一下 struct 和 map 用谁呢? 计算量很小的时候,可能看不出使用 临时 struct 和 map 的耗时差距,但是数量起来了,差距就明显了,且会随着数量越大,差距越发明显 当我们遇到键和值都可以是固定的时候,我们选择 struct 比 选择 map 的方式 高效多了 我们模拟循环计算 1 亿 次,看看使用各自的数据结构会耗时多少 循环前计算...

2022-11-25 480 0
Golang开发命令行之flag包的使用方法

Golang开发命令行之flag包的使用方法

1、命令行工具概述 日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,鼠标能够让用户更容易上手,降低用户学习成本。 而对于开发者,键盘操作模式能显著提升生产力,还有在一些专业工具中, 大量使用快捷键代替繁琐的鼠标操作,能够使开发人员更加专注于工作,提高效率,因为键盘操作模式更容易产生肌肉记忆 举个栗子:我司业务研发,前些年在我们的强力推动下(被迫)转向使用了 git 作为版本控制,开始使用的是图形化“小乌龟”工具。后续出现几次问题解决起来较麻烦后,推荐其使用原生的 git 命令行。如今,使用...

2022-11-25 431 0
Golang标准库和外部库的性能比较

Golang标准库和外部库的性能比较

前言: 我已经在生产中使用 Go 一段时间了,因为它的构建规模较小,并且由 goroutines 提供的并发性能以及直接在机器上运行构建的能力,所以我非常喜欢它的快速和可靠。 由于标准包的速度非常快,您可以在不使用任何第三方库或框架的情况下构建生产就绪的微服务。这并不是说 Go 中没有提供更多灵活性或速度的框架,只是它们不那么受欢迎。 官方通常告诉你坚持使用标准库。具有讽刺意味的是, golang 框架 的顶级 Google 搜索结果一般都是关于为什么不应该使用标准库。 我对标准库的替代品进行了一些研究和基...

2022-11-25 498 0
go语言编程学习实现图的广度与深度优先搜索

go语言编程学习实现图的广度与深度优先搜索

图的实现 所谓图就是节点及其连接关系的集合。所以可以通过一个一维数组表示节点,外加一个二维数组表示节点之间的关系。 //图的矩阵实现 typedef struct MGRAPH{ nodes int[]; //节点 edges int[][]; //边 }mGraph; 然而对于一些实际问题,其邻接矩阵中可能存在大量的0值,此时可以通过邻接链表来表示稀疏图,其数据结构如图所示 其左侧为图的示意图,右侧为图的邻接链表。红字表示节点序号,链表中为与这个节点...

2022-11-25 469 0