重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

go语言自定义包教学 go语言 包和模块

golang中自定义包

golang中默认以文件夹名作为包名,导入的文件的路径为$GOPATH/src

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了屏南免费建站欢迎大家使用!

例如我们在 $GOPATH/src下面建立一个gopackage的一个文件夹,下面建立一个abc.go的文件,文件内容如下

则我们在包外部使用gopackage包中的函数时,导入格式是这样的:

我们在abc.go文件中需要导出的函数的首字母都是大写的,这是因为 只有首字母大写的标识符才可以导出 ,mutiply(int,int)int函数不可以被导出,编译失败。

当我们使用多个自定义包时如果发生冲突,怎么办呢,我们可以给不同的包提供不同的别名

如果abc.go文件中包名不是文件夹的名字,如

则在外部导入是,golang会自动为该包提供别名

一学就会,手把手教你用Go语言调用智能合约

智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键。

我们先来了解一下智能合约调用的基础原理。智能合约运行在以太坊节点的 EVM 中。因此要 想调用合约必须要访问某个节点。

以后端程序为例,后端服务若想连接节点有两种可能,一种是双 方在同一主机,此时后端连接节点可以采用 本地 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语言安装包

go语言作为google的一个主推语言,最近很多人都在研究,也花了一点时间对他的安装进行了测试,本人使用Sublime Text 2 + GoSublime + gocode

顾名思义首先是安装Go,这里有很详细的安装说明, 或者(golang.org自己去找hosts),官方已经支持Windows版本

下载解压配置环境变量

“环境变量”(我的电脑-高级系统设置-环境变量),在系统变量的标签下,依次新建编辑如下几个键值对:

(1). 新建 变量名:GOBIN 变量值 :c:\go\bin

(2). 新建 变量名:GOARCH 变量值:386

(3). 新建 变量名:GOOS 变量值:windows

(4). 新建 变量名: GOROOT 变量值:c:\go

(5). 编辑 Path 在Path的变量值的最后加上 %GOBIN%

1. 下载 Sublime Text 2,地址如下:

2. 解压以后,双击 sublime_text,就可以使用 Sublime Text 2 了。

破解:

用 WinHex 编辑 sublime_text_backup.exe 文件, 跳到 000CBB70 那一行,将该行的 8A C3 修改为 B0 01 然后保存

破解注册成功

3. 安装 Package Control,在打开 Sublime Text 2以后,按下快捷键 Ctrl + `,打开命令窗行(具体在view——show Console),并回车:

import urllib2,os; pf=’Package Control.sublime-package’; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),’wb’).write(urllib2.urlopen(‘’+pf.replace(‘ ‘,’%20′)).read()); print ‘Please restart Sublime Text to finish installation’

4. 重启Sublime Text 2后,就可以发现在 Preferences菜单下,多出一个菜单项 Package Control。

5.现在安装GoSublime插件了,按住Ctrl+Shilft+p会弹出一个对话框输入install回车弹出一个安装包的对话框

同上输入GoSublime选择GoSublime回车

本机已经安装所以没有出现选项,输入Go build选中回车(这个属于可选)

到此GoSublime安装成功

6.下面安装gocode,

首安装 Git-1.7.11-preview20120710。

打开控制台,输入以下内容:

go get github.com/nsf/gocode

go install github.com/nsf/gocode

go get github.com/DisposaBoy/MarGo

go install github.com/DisposaBoy/MarGo

也可以去github下载(要安装google的git版本管理工具)

安装完成后,我们可以在 go/bin 目录下,发现多出了个 gocode 文件。(一定要放在bin目录下)

7. 修改GoSublime配置:在 Preferences菜单下,找到Package Settings,然后找到 GoSublime,再往下找到 Settings – Default。再打开的文件中,添加如下配置,并保存:

"env": {"path":"c:/go/bin;" },

好了,到目前为止,开发环境搭建完成。

下面可以自由编程了。呵呵。

按下快捷键 Ctrl + b 界面下方会出现如下界面:

好了,到现在,开发环境就搭建完毕了。

如下是内容我这边没有使用照样可以使用:

sublime Text 2 编译配置设置方法

tools-build system-new build system 新建一个配置文件 设置为

{

“cmd”: ["go", "run", "$file_name"],

“file_regex”: “^[ ]*File \”(…*?)\”, line ([0-9]*)”,

“working_dir”: “$file_path”,

“selector”: “source.go”

}

然后就可以用ctrl+b 编译了

保存

golang 遇到导入自定义包导入不进去的问题解决

当尝试了网上所有方法,仍然发现在主文件.go中或者在其他地方引用自定义包时,自动删除导入的包的情况解决如下:

如你存放地址的包在src/xxx.com中时请通过命令行进入这个文件夹的位置

然后执行go mod init xxx.com/m/v1回车

上述的.../m/v1随便,这个是按照官方的建议这么写的方便维护版本吧?!

再次尝试引入自定义包,引用方式如下:

xxx.com/m/v1

|_test

| |_test.go

|_main.go

import (

"fmt"

"xxx.com/m/v1/test"

)

献给被折磨许久的小伙伴们。。。

如何在golang使用自定义的包

例如你自定义的包在 %GOPATH%\custom\mypkg 你的包名也应该声明为 package mypkg 在其它包中 import "custom/mypkg"

如何在Go语言中导入和使用不同的同名软件包

package p2

//整数变量

var Pack1Int int = 42

//浮点变量

var PackFloat = 3.14

//简单函数

func ReturnStr() string {

return "Hello main!"

}

package main

import (

"./p2"

"fmt"

)

//程序入口

func main() {

//定义一个变量

var test1 string

//接收p2包中函数的返回值

test1 = p2.ReturnStr()

//打印函数返回值

fmt.Println("------haliluya---------", test1)

//打印变量

fmt.Println("------haliluya---------", p2.Pack1Int)

fmt.Println("------haliluya---------", p2.PackFloat)

}

p2.ReturnStr()  通过包名调用


当前标题:go语言自定义包教学 go语言 包和模块
文章URL:http://cqcxhl.cn/article/hjhjdj.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP