前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学下go,本文也是从零开始,将go的基本语法,结构体,函数,方法,接口,并发等以小demo的方式进行讲解,有的地方会对比java加深记忆
go简介
go又称golang 是由Google开发,于2009年11月开源的一种服务端编程语言,go 很简洁,高效,支持并发 ,总之值得一看—— 维基百科
安装
go环境: go官网下载 安装就是一路next
ide: liteIDE官网下载 我用的是 liteIDE ,下载压缩包之后直接解压使用,怎么用就自己学习下很简单的
hello world
学习每种编程语言都是从hello world开始的,本次也是
package mainimport ( "fmt")func main() { fmt.Println("hello world") }
直接在ide中运行输出:hello world
一个.go文件通常会包括
声明包: package
引入包: import
变量/常量: var /const
函数: func
声明包
使用 packge 关键字来声明一个包,每个 Go 程序都由包构成的
引入包
使用 import 关键字来导入所需的包,go语言强制规定,导入的包必须被使用否则编译不过
import "fmt"import "math"//更简便的写法import ( "fmt" "math")
函数
使用 func 关键字来声明一个函数
常用结构:
func methodName(var1 int,var2 int) int{ ..... return xxx }
注意:与java不同的地方
入参的结构:变量名在前,类型在后,如(var1 int,var2 int)
java是类型在前,变量名在后
返回值:函数的返回值在参数的后面
java中是在方法名之前
一个.go只能声明一个main函数,否则编译不过
helloworld demo 的main函数没有入参也没有返回值,所以可以省略
变量
使用 var 声明一个变量列表,跟函数的参数列表一样,类型在最后;
var 也是可以定在包内和函数内;
如果定义的变量没有赋值则默认赋初始值:
数值类型为 0
布尔类型为 false
字符串为 ""
var isfalse boolvar istrue bool = truefunc main() { var num int fmt.Println(num, isfalse, istrue) }
定义多个及初始值
如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型
var isfalse, istrue, x = true, false, "chenmingyu"func main() { fmt.Println(isfalse, istrue, x) }
当两个或多个变量类型相同时,只需要写最后一个变量的类型,如:x int, y int 可以写成 x, y int
函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明,只能在函数内使用,所以函数外只能用var
func main() { var1 := "mingyu" fmt.Println("say hello", var1) }
常量
使用const 关键字来声明常量,如:
const word = "hello go"func main() { fmt.Println(word) }
函数的返回值
go 语言函数支持返回任意数量的返回值,如:
func transform(x, y string) (string, string) { return y, x }func main() { a, b := transform("say", "hello") fmt.Println(a, b) }
可见性规则
在go中使用首字母大小写来决定该常量、变量、结构体、函数、接口是否可以被外部包调用
首字母小写就相当于java中的 private
首字母大写就相当于java中的 public
package mainimport ( "fmt" "math")func main() { fmt.Println(math.Abs(12)) //小写报错 undefined: math.abs fmt.Println(math.abs(12)) }
结束语
初识 go 语言系列
[x] 初始 go 语言
[ ] 初识 go 语言:语法及类型
[ ] 初识 go 语言:方法,接口及并发