「测试开发全栈化-Go」(1) Go语言基本了解作为一个测试,作为一个测试开发,全栈化 管理是我们未来go语言的后缀名的发展方向 。已经掌握了Java、Python、HTML的go语言的后缀名你,是不是也想了解下最近异常火爆的Go语言呢go语言的后缀名?来吧,让我们一起了解下 。
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易 。
Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本 。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区 。这三个人都是计算机界的大神,有的参与了C语言的编写,有的还是数学大神,有的还获得了计算机最高荣誉-图灵奖 。
接下来说说Go语言的特色:
简洁、快速、安全
并行、有趣、开源
内存管理、数组安全、编译迅速
Go语言的用途:
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言 。
对于高性能分布式系统领域而言 , Go 语言无疑比大多数其它语言有着更高的开发效率 。它提供了海量并行的支持 , 这对于 游戏 服务端的开发而言是再好不过了 。
Go语言的环境安装:
建议直接打开官方地址因为墙的原因打不开
因为我用的是windows系统,这里主要讲下Windows系统上使用Go语言来编程 。
Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.17.2.windows-amd64.msi)的安装包来安装 。
默认情况下 .msi 文件会安装在 c:Go 目录下 。你可以将 c:Gobin 目录添加到 Path 环境变量中 。添加后你需要重启命令窗口才能生效 。个人建议还是安装到 Program Files文件夹中 。
使用什么开发工具来对Go语言进行编写:
个人建议用VS code, 也可以用Sublime Text来编辑 。如果你之前看了我讲的HTML语言的学习 , 肯定已经下载了VS code. 那么这时你需要在VS code中下载Go语言的扩展插件 。
这里有一个巨大的坑,就是在下载Go的插件和依赖包时,会提示一些包没有 。主要是因为下载的依赖包部分被墙了 , 只能想别的办法去下载 。
建议参考网页:
解决vscode中golang插件安装失败方法
在学习go的过程中,使用的是vscode , 但是一直提示安装相关插件失败,然后上网查方法,基本上是叫你建立golang.org目录什么的 , 结果全是错的,而且都是抄袭,很烦 。无意之中看到一位博主分享的方法 , go语言的后缀名他也是饱受上述的垃圾博文困扰,然后找到了解决方法 , 这里向他致敬,秉着让更多人看到正确解决方法的心,我写下正确的解决方法,希望对你有所帮助 , 也可以点开原博主链接参考:
Go有一个全球模块代理,设置代理再去安装golang的插件,就可以安装成功了 。步骤有 , 首先Windows用户打开Powershell,一个蓝色的界面,注意不是cmd!不知道的直接打开window下面的搜索,然后输入powershell,搜索出来就可以了 。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我们打开VsCode界面,下面会提示安装插件,我们选择Install ALL,就会安装成功
当你在运行Go语言程序时,提示所有的插件包都已经安装成功了时,就可以正常使用了,要不然一堆报错会让你非常心烦 。
好了,今天先到这里,晚安、下班~
一学就会,手把手教你用Go语言调用智能合约智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键 。
go语言的后缀名我们先来go语言的后缀名了解一下智能合约调用的基础原理 。智能合约运行在以太坊节点的 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,相信读者也知道运行结果是正确的了 。
gcc后面既有-c又有-o是什么意思?-c和-o都是gcc编译器的可选参数 。
-c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件 。
-o用于指定输出(out)文件名 。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为可执行程序 。
例如:
gcc -c test.c将生成test.o的目标文件
gcc -o app test.c将生成可执行程序app
gcc -c a.c -o a.o表示把源文件a.c编译成指定文件名a.o的中间目标文件(其实在这里,你把-o a.o省掉,效果是一样的 , 因为中间文件默认与源文件同名,只是后缀变化) 。
扩展资料:
gcc -c与gcc -o以及不加参数的区别
-cCompile and assemble, but do not link.
-o filePlace the output into file.
'none' means revert to the default behavior of guessing the language based on the file's extension.
中文翻译一下:
-c编译和汇编,但不要链接 。
-o file将输出放入文件 。
'无参数'表示恢复为基于文件扩展名猜测语言的默认行为 。
go语言语法(基础语法篇)import "workname/packetfolder"
导入多个包
方法调用 包名.函数//不是函数或结构体所处文件或文件夹名
packagename.Func()
前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名称了:
当导入一个包时 , 该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已 。下划线的作用仅仅是为了调用init()函数 , 所以无法通过包名来调用包中的其他函数
import _ package
变量声明必须要使用否则会报错 。
全局变量运行声明但不使用 。
func 函数名 (参数1,参数2,...) (返回值a 类型a, 返回值b 类型b , ...)
func 函数名 (参数1,参数2 , ...) (返回值类型1, 返回值类型2,...)
func (this *结构体名) 函数名(参数 string) (返回值类型1, 返回值类型2){}
使用大小来区分函数可见性
大写是public类型
小写是private类型
func prifunc int{}
func pubfunc int{}
声明静态变量
const value int
定义变量
var value int
声明一般类型、接口和结构体
声明函数
func function () int{}
go里面所有的空值对应如下
通道类型
内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值 , 它的返回值是一个指向新分配类型零值的指针
func new(Type) *Type
[这位博主有非常详细的分析]
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可 。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的 。
同一个程序中的所有 goroutine 共享同一个地址空间 。
语法格式如下:
通道(channel)是用来传递数据的一个数据结构 。
通道的声明
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯 。操作符 - 用于指定通道的方向,发送或接收 。如果未指定方向,则为双向通道 。
[这里有比较详细的用例]
go里面的空接口可以指代任何类型(无论是变量还是函数)
声明空接口
go里面的的强制类型转换语法为:
【go语言的后缀名 go语言代码文件后缀】int(data)
如果是接口类型的强制转成其他类型的语法为:
go里面的强制转换是将值复制过去,所以在数据量的时候有比较高的运行代价
gohttpserver apk识别成zipPK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件 , Dex是DalvikVMexecutes的全称,即AndroidDalvik执行程序 , 并非JavaME的字节码而是Dalvik字节码 。
由于APK文件本身就是压缩包,如果用户的电脑上装了WinRAR(85%的装机量),用IE下载APK文件,扩展名就会被自动改为“.zip” 。
如果你的下载服务器为Nginx服务器,那么,在Nginx安装目录下的conf/mime.types文件的对应位置 , 加上以下一行语句 , 指定APK文件的MIME类型为application/vnd.android.package-archive即可:
注意:上面的配置只是在nginx那层好了,但如果你是用nginx tomcat的方式 , 在ie下还是会变成zip的还需要在tomcat里面配置conf/web.xml里指定了apk类型
一个TCP服务端可以同时连接很多个客户端,例如世界各地的用户使用自己电脑上的浏览器访问淘宝网 。因为Go语言中创建多个goroutine实现并发非常方便和高效,所以我们可以每建立一次链接就创建一个goroutine去处理 。
如何为Linux安装Go语言Go语言在Centos下的安装:
注意 , 以下命令需要以root身份,或者sudo运行 。
说明 , 如果要自定义安装位置的话,需要配置GOROOT环境变量,所以这里我们采用默认的目录进行安装,就可以不配置GOROOT环境变量了 。
首先去官网下载go的安装包,这里用的是:go1.5.1.linux-amd64.tar.gz
■ 1,选择安装路径
由于默认的go路径 , 在/usr/local下,所以用如下命令,解压创建/usr/local/go
tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz
■2,添加PATH环境变量
vi /etc/profile
然后加入下面这行:
export PATH=$PATH:/usr/local/go/bin
■3,建立Go的工作空间(workspace,也就是GOPATH环境变量指向的目录)
GO代码必须在工作空间内 。工作空间是一个目录,其中包含三个子目录:
src ---- 里面每一个子目录,就是一个包 。包内是Go的源码文件
pkg ---- 编译后生成的 , 包的目标文件
bin ---- 生成的可执行文件 。
这里,我们在/home目录下, 建立一个名为gopath(可以不是gopath, 任意名字都可以)的文件夹 ,
然后再建立三个子文件夹(子文件夹名必须为src、pkg、bin) 。如下图:
■4,设置GOPATH环境变量
vi /etc/profile
然后加入下面这行:
export GOPATH=/home/gopath
保存后 , 执行以下命令,使环境变量立即生效:
source /etc/profile
至此,Go语言的环境已经安装完毕 。下面开始 HelloWorld
关于go语言的后缀名和go语言代码文件后缀的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- c语言如何调用excel,C语言如何调用max函数
- word文档怎么分享到朋友圈,world文档怎么分享到朋友圈
- 电脑桌面多个表格怎么弄,电脑屏幕上怎么显示多个表格
- linux从哪输命令 linux快速输入命令
- net软件开发技能需求,软件开发需求文档
- python爬虫模拟登陆,python模拟登录网站
- 购物车redis持久化到数据库,购物车放redis还是数据库
- 存储引擎mysql怎么看 查看mysql中支持的储存引擎语句
- 鸿蒙系统3.0图标在哪,鸿蒙系统图标说明