一学就会,手把手教你用Go语言调用智能合约智能合约调用是实现一个 DApp go语言怎么设置的关键go语言怎么设置,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统go语言怎么设置,智能合约的调用是连接区块链与前后端的关键 。
我们先来了解一下智能合约调用的基础原理 。智能合约运行在以太坊节点的 EVM 中 。因此要 想调用合约必须要访问某个节点 。
以后端程序为例go语言怎么设置,后端服务若想连接节点有两种可能,一种是双 方在同一主机 , 此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call , 远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信 。
提到 RPC , 读者应该对 Geth 启动参数有点印象,Geth 启动时可以选择开启 RPC 服务,对应的 默认服务端口是 8545 。。
接着,我们来了解一下智能合约运行的过程 。
智能合约的运行过程是后端服务连接某节点 , 将 智能合约的调用(交易)发送给节点 , 节点在验证了交易的合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认 , 至此交易才算完成 。
就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit , 软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,因此若想使用 Go 语言连接节点、发交易 , 直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了 。
总结一下,智能合约被调用的两个关键点是节点和 SDK 。
由于 IPC 要求后端与节点必须在同一主机 , 所以很多时候开发者都会采用 RPC 模式 。除了 RPC,以太坊也为开发者提供了 json- rpc 接口,本文就不展开讨论了 。
接下来介绍如何使用 Go 语言 , 借助 go-ethereum 源码库来实现智能合约的调用 。这是有固定 步骤的 , 我们先来说一下总体步骤,以下面的合约为例 。
步骤 01:编译合约,获取合约 ABI(Application Binary Interface , 应用二进制接口) 。单击【ABI】按钮拷贝合约 ABI 信息,将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi) 。
最好能将 calldemo.abi 单独保存在一个目录下,输入“ls”命令只能看到 calldemo.abi 文件 , 参 考效果如下:
步骤 02:获得合约地址 。注意要将合约部署到 Geth 节点 。因此 Environment 选择为 Web3 Provider 。
在【Environment】选项框中选择“Web3 Provider”,然后单击【Deploy】按钮 。
部署后,获得合约地址为:0xa09209c28AEf59a4653b905792a9a910E78E7407 。
步骤 03:利用 abigen 工具(Geth 工具包内的可执行程序)编译智能合约为 Go 代码 。abigen 工具的作用是将 abi 文件转换为 Go 代码,命令如下:
其中各参数的含义如下 。(1)abi:是指定传入的 abi 文件 。(2)type:是指定输出文件中的基本结构类型 。(3)pkg:指定输出文件 package 名称 。(4)out:指定输出文件名 。执行后 , 将在代码目录下看到 funcdemo.go 文件,读者可以打开该文件欣赏一下,注意不要修改它 。
步骤 04:创建 main.go,填入如下代码 。注意代码中 HexToAddress 函数内要传入该合约部署后的地址,此地址在步骤 01 中获得 。
步骤 04:设置 go mod,以便工程自动识别 。
前面有所提及,若要使用 Go 语言调用智能合约,需要下载 go-ethereum 工程,可以使用下面 的指令:
该指令会自动将 go-ethereum 下载到“$GOPATH/src/github.com/ethereum/go-ethereum” , 这样还算 不错 。不过,Go 语言自 1.11 版本后 , 增加了 module 管理工程的模式 。只要设置好了 go mod,下载 依赖工程的事情就不必关心了 。
接下来设置 module 生效和 GOPROXY,命令如下:
在项目工程内,执行初始化,calldemo 可以自定义名称 。
步骤 05:运行代码 。执行代码 , 将看到下面的效果 , 以及最终输出的 2020 。
上述输出信息中,可以看到 Go 语言会自动下载依赖文件,这就是 go mod 的神奇之处 。看到 2020,相信读者也知道运行结果是正确的了 。
GO语言(二十七):管理依赖项(下)-当您对外部模块的存储库进行了 fork (例如修复模块代码中的问题或添加功能)时,您可以让 Go 工具将您的 fork 用于模块的源代码 。这对于测试您自己的代码的更改很有用 。
为此,您可以使用go.mod 文件中的replace指令将外部模块的原始模块路径替换为存储库中 fork 的路径 。这指示 Go 工具在编译时使用替换路径(fork 的位置),例如,同时允许您保留import 原始模块路径中的语句不变 。
在以下 go.mod 文件示例中,当前模块需要外部模块example.com/theirmodule 。然后该replace指令将原始模块路径替换为example.com/myfork/theirmodule模块自己的存储库的分支 。
设置require/replace对时,使用 Go 工具命令确保文件描述的需求保持一致 。使用go list命令获取当前模块正在使用的版本 。然后使用go mod edit命令将需要的模块替换为fork:
注意:当您使用该replace指令时 , Go 工具不会像添加依赖项中所述对外部模块进行身份验证 。
您可以使用go get命令从其存储库中的特定提交为模块添加未发布的代码 。
为此,您使用go get命令,用符号@指定您想要的代码。当您使用go get时,该命令将向您的 go.mod 文件添加一个 需要外部模块的require指令 , 使用基于有关提交的详细信息的伪版本号 。
以下示例提供了一些说明 。这些基于源位于 git 存储库中的模块 。
当您的代码不再使用模块中的任何包时,您可以停止将该模块作为依赖项进行跟踪 。
要停止跟踪所有未使用的模块,请运行go mod tidy 命令 。此命令还可能添加在模块中构建包所需的缺失依赖项 。
要删除特定依赖项,请使用go get,指定模块的模块路径并附加 @none,如下例所示:
go get命令还将降级或删除依赖于已删除模块的其他依赖项 。
当您使用 Go 工具处理模块时,这些工具默认从 proxy.golang.org(一个公共的 Google 运行的模块镜像)或直接从模块的存储库下载模块 。您可以指定 Go 工具应该使用另一个代理服务器来下载和验证模块 。
如果您(或您的团队)已经设置或选择了您想要使用的不同模块代理服务器 , 您可能想要这样做 。例如,有些人设置了模块代理服务器 , 以便更好地控制依赖项的使用方式 。
要为 Go 工具指定另一个模块代理服务器,请将GOPROXY 环境变量设置为一个或多个服务器的 URL 。Go 工具将按照您指定的顺序尝试每个 URL 。默认情况下,GOPROXY首先指定一个公共的 Google 运行模块代理,然后从模块的存储库直接下载(在其模块路径中指定):
您可以将变量设置为其他模块代理服务器的 URL , 用逗号或管道分隔 URL 。
Go 模块经常在公共互联网上不可用的版本控制服务器和模块代理上开发和分发 。您可以设置 GOPRIVATE环境变量 。您可以设置GOPRIVATE环境变量来配置go命令以从私有源下载和构建模块 。然后 go 命令可以从私有源下载和构建模块 。
GOPRIVATE或环境变量可以设置为匹配模块前缀的全局模式列表,这些GONOPROXY前缀是私有的,不应从任何代理请求 。例如:
go语言聊天室实现(七)websocket收消息设置上一节中,我们为每个连接都创建了一个goroutine来读取其中的消息,现在我们将这个读取消息的方法实现一下 。
我们在application目录下新建controllers目录,并在其中创建一个MessageController.go文件 。
首先我们新建一个MessageController的结构体,内容如下
这个结构体包括两个内容,一个是我们将连接放在数组之后,返回的索引,另一个是连接本身.
这个是具体的方法 。
我们首先设置了一下读消息的大小、超时时间以及超时后需要的操作 。
超时时间如果设置为0,那么就是永不超时 。之前在这里直接写0,被告知需要传一个time.Time类型的数据 。最终谷歌后才得到了这个值time.Time{}为"0001-01-01 00:00:000000 UTC" 。
我们将用户手法消息的内容定义为一个结构体,然后将用户的订阅信息的json通过json.unmarshal转换成这个结构体 。
之后的switch操作与我们在Swoole中的操作基本雷同,在查询到login之后,调用service中 的login方法来进行注册 。
下一节中我们再介绍具体的注册逻辑 。
如何配置go语言开发环境1.1 Go 安装
Go的三种安装方式
Go有多种安装方式,你可以选择自己喜欢的 。这里我们介绍三种最常见的安装方式:
Go源码安装:这是一种标准的软件安装方式 。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装可以自己定制 。
Go标准包安装:Go提供go语言怎么设置了方便的安装包,支持Windows、Linux、Mac等系统 。这种方式适合快速安装,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装go语言怎么设置了 。**推荐这种方式**
第三方工具安装:目前有很多方便的第三方软件包工具,例如Ubuntu的apt-get、Mac的homebrew等 。这种安装方式适合那些熟悉相应系统的用户 。
最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具GVM , 这是目前在这方面做得最好的工具,除非你知道怎么处理 。
Go源码安装
在Go的源代码中,有些部分是用Plan 9 C和ATT汇编写的,因此假如你要想从源码安装,就必须安装C的编译工具 。
在Mac系统中 , 只要你安装了Xcode , 就已经包含了相应的编译工具 。
在类Unix系统中,需要安装gcc等工具 。例如Ubuntu系统可通过在终端中执行sudo apt-get install gcc
libc6-dev来安装编译工具 。
在Windows系统中,你需要安装MinGW , 然后通过MinGW安装gcc , 并设置相应的环境变量 。
你可以直接去官网下载源码,找相应的goVERSION.src.tar.gz的文件下载,下载之后解压缩到$HOME目录 , 执行如下代码:
cd go/src
./all.bash
运行all.bash后出现"ALL TESTS PASSED"字样时才算安装成功 。
上面是Unix风格的命令,Windows下的安装方式类似,只不过是运行all.bat,调用的编译器是MinGW的gcc 。
如果是Mac或者Unix用户需要设置几个环境变量,如果想重启之后也能生效的话把下面的命令写到.bashrc或者.zshrc里面 ,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是写入文件的,记得执行bash .bashrc或者bash
.zshrc使得设置立马生效 。
如果是window系统,就需要设置环境变量,在path里面增加相应的go所在的目录,设置gopath变量 。
当你设置完毕之后在命令行里面输入go,看到如下图片即说明你已经安装成功
图1.1 源码安装之后执行Go命令的图
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录 。
关于上面的GOPATH将在下面小节详细讲解
Go标准包安装
Go提供了每个平台打好包的一键安装,这些包默认会安装到如下目录:/usr/local/go
(Windows系统:c:\Go),当然你可以改变他们的安装位置 , 但是改变之后你必须在你的环境变量中设置如下信息:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
上面这些命令对于Mac和Unix用户来说最好是写入.bashrc或者.zshrc文件 , 对于windows用户来说当然是写入环境变量 。
如何判断自己的操作系统是32位还是64位?
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定自己的系统类型 。
Windows系统用户请按Win R运行cmd,输入systeminfo后回车,稍等片刻,会出现一些系统信息 。在“系统类型”一行中,若显示“x64-based
PC”,即为64位系统;若显示“X86-based PC”,则为32位系统 。
Mac系统用户建议直接使用64位的,因为Go所支持的Mac OS X版本已经不支持纯32位处理器了 。
Linux系统用户可通过在Terminal中执行命令arch(即uname
-m)来查看系统信息:
64位系统显示
x86_64
32位系统显示
i386
Mac 安装
访问下载地址 , 32位系统下载go1.4.2.darwin-386-osx10.8.pkg,64位系统下载go1.4.2.darwin-amd64-osx10.8.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中 , 默认已经在PATH中增加了相应的~/go/bin,这个时候打开终端 , 输入go
看到类似上面源码安装成功的图片说明已经安装成功
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录 。
Linux 安装
访问下载地址 , 32位系统下载go1.4.2.linux-386.tar.gz,64位系统下载go1.4.2.linux-amd64.tar.gz,
假定你想要安装Go的目录为 $GO_INSTALL_DIR , 后面替换为相应的目录路径 。
解压缩tar.gz包到安装目录下:tar zxvf go1.4.2.linux-amd64.tar.gz -C
$GO_INSTALL_DIR 。
设置PATH,export PATH=$PATH:$GO_INSTALL_DIR/go/bin
然后执行go
图1.2 Linux系统下安装成功之后执行go显示的信息
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录 。
Windows 安装
访问Google Code 下载页,32
位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的 。下载好后运行,不要修改默认安装目录
C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码 。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录
C:\Go\bin\,并添加环境变量 GOROOT,值为 Go 安装根目录 C:\Go\。
验证是否安装成功
在运行中输入 cmd 打开命令行工具,在提示符下输入 go,检查是否能看到 Usage 信息 。输入
cd %GOROOT% , 看是否能进入 Go 安装目录 。若都成功,说明安装成功 。
不能的话请检查上述环境变量 Path 和 GOROOT 的值 。若不存在请卸载后重新安装,存在请重启计算机后重试以上步骤 。
第三方工具安装
GVM
gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具 。使用起来相当的方便 , 安装gvm使用如下命令:
bash(curl -s -S -L )
安装完成后我们就可以安装go了:
gvm install go1.4.2
gvm use go1.4.2
也可以使用下面的命令,省去每次调用gvm use的麻烦: gvm use go1.4.2 --default
执行完上面的命令之后GOPATH、GOROOT等环境变量会自动设置好 , 这样就可以直接使用了 。
apt-get
Ubuntu是目前使用最多的Linux桌面系统,使用apt-get命令来管理软件包,我们可以通过下面的命令来安装Go,为了以后方便,应该把
git mercurial 也安装上:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable git-core mercurial
homebrew
homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已支持Go,可以通过命令直接安装Go,为了以后方便,应该把
git mercurial 也安装上:
brew updatebrew upgrade
brew install go
brew install git
【go语言怎么设置 go语言怎么设置字体大小】brew install mercurial
关于go语言怎么设置和go语言怎么设置字体大小的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 神奇手机直播工具怎么用,有什么神奇的直播
- 在西瓜视频如何分辨营销号,西瓜视频营销号太多
- 二类电商广告如何投放,二类电商广告投放渠道
- 小程序小商店注册,微信小程序商城注册
- 关于vb.netenter的信息
- 连接电脑的摄像头怎么关掉,外置摄像头怎么连接电脑
- 安卓虚拟机4.4,安卓虚拟机下载
- 直播挂脖蓝牙耳机话术,用蓝牙耳机直播效果怎么样
- 扫描java文件插入代码 java 代码扫描