前言
为啥要学go呢...因为近期需要用hyperledger fabric来做一个区块链项目,决定用go来实现智能合约chaincode,所以打算学一些基本的东西,不打算太深入,谨以此系列博客来记录学习的过程。
环境搭建
https://www.cnblogs.com/itogo/p/5635596.html 百度有很多 就不详细说了
第一个GO程序
package main
import "fmt"
func main(){
fmt.Println("hello,world")
}
package是包名 import则是导入包 func main显然就是主函数了 中规中矩的语法。
数据类型
基本类型还是那几个 不过GO1.9版本之后可以直接定义了 方便了不少。
package main
import "fmt"
func main() {
var a = 1.5
var b =2
fmt.Println(a,b)
}
在此之前,声明的方式可以是:
var a = "boy♂next♂door" //隐式定义,编译器会自动识别类型
var b string = "that's good!" //显式定义
var c bool
注意类型需要放在变量后面,这一点不同于C++和java
声明多个变量时 可以是
var a1,b1,c1 string
也可以是
var (
v1 v_type1
v2 v_type2
)
后者多用于申明全局变量(这样写代码比较漂亮)
也可以使用:=来定义,例如:
g, h := 123, "hello"
如果使用这种方法,要求g和h之前是未定义过的,否则会报错。
并且 你声明的变量是必须使用到的 否则也会报错,比如说:
package main
import "fmt"
func main() {
var a string = "123"
fmt.Println("hello, world")
}
编译时会跟你说 a declared and not used
对于不想改变的常量,可以加上const来定义,另外 const还能用作枚举:
const (
Unknown = 0
Female = 1
Male = 2
)
特殊的iota,可以用作枚举,每一次出现常量时会自增1,初始值为0
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}
输出结果为
0 1 2 ha ha 100 100 7 8运算符
没啥好讲的 跟C++基本一样
条件语句
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}
实例:
package main
import "fmt"
func main(){
var count int
var flag bool
count=1
for count < 100 {
count++
flag = true;
//注意tmp变量 :=
for tmp:=2;tmp<count;tmp++ {
if count%tmp==0{
flag = false
}
}
if flag == true {
fmt.Println(count,"素数")
}else{
continue
}
}
}
和C++真像啊....
switch的用法也类型,不过不用 break;
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
函数
func function_name( [parameter list] ) [return_types] {
函数体
}
举个栗子:
func max(num1, num2 int) int {
/* 定义局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
函数也可以返回多个值,例如说:
func swap(x, y string) (string, string) { return y, x }
数组
定义:
var balance [10] float32
初始化:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
不定长数组声明:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
指针
var fp *float32
结构体
type Books struct {
title string
author string
subject string
book_id int
}
map
package main import "fmt" func main() { var countryCapitalMap map[string]string /* 创建集合 */ countryCapitalMap = make(map[string]string) /* map 插入 key-value 对,各个国家对应的首都 */ countryCapitalMap["France"] = "Paris" countryCapitalMap["Italy"] = "Rome" countryCapitalMap["Japan"] = "Tokyo" countryCapitalMap["India"] = "New Delhi" /* 使用 key 输出 map 值 */ for country := range countryCapitalMap { fmt.Println("Capital of",country,"is",countryCapitalMap[country]) } /* 查看元素在集合中是否存在 */ captial, ok := countryCapitalMap["United States"] /* 如果 ok 是 true, 则存在,否则不存在 */ if(ok){ fmt.Println("Capital of United States is", captial) }else { fmt.Println("Capital of United States is not present") } }另外一种初始化方式:
countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}
删除元素:
delete(countryCapitalMap,"France");