一、前言
随着区块链的流行,以及当今对系统高性能、高并发的要求越来越高,对语言的并发处理性能要求也越来越高。
而Go语言则是众多编程语言中并发性高、简洁的一门。十分适合做高性能高并发的系统。
参考文章
区块链的入门了解
Go语言的基本语法知识
Go语言进阶学习
Go Web开发基础学习
web框架学习
二、基础知识
-
代码结构(包,引入,函数)
-
变量(掌握 声明:var a type,:=,赋值,作用域)
var i int
var j int = 2
k:=1
var ptr *int
ptr=&u=i
- 语句(goto,无需括号和";",掌握循环语句的使用和range范围)
var i int = 1
for true{// 无限循环
if i < 10 {// 无需写括号,使用空格
fmt.Print("yes")
i++
}else{
break
}
}
kvs :=map[string]string{"title":"hello","author":"lyf"}
for k,v:=range kvs{
fmt.Print(k,v)
}
- 高级数据类型(了解掌握数组,切片(动态数组),结构体,map)
var arr int[10]
var slice = make([]int ,3,10)
slice = append(slice, 1)// 在长度后面加,拓展
slice[0]=1
temp:=slice[:10]
fmt.Print(temp[:])
kvs :=map[string]string{"title":"hello","author":"lyf"}
for k,v:=range kvs{
fmt.Print(k,v)
}
- 函数(值传递和引用传递)
- 指针的使用(*,&)
与Java使用不同点:引入切片、结构体和指针的简单使用,变量声明 类型位置相反,无需括号和";",引入goto语句,使用函数时直接调用而不是对象调用该方法。
package main // 包声明
import (
"fmt"
) //引入包,引入必须使用不然报错
/**
*
*
*/
//(num1,num2 ) receiver?
func fun1(num1 float32,num2 int) int{
return num2
}
// go可以返回多个值
func fun2() (string,string,int) {
return "test1","test2",3
}
// go具有指针可以进行引用传递(通过指针)
// 引用传递
func swap(a *int,b*int) {
var temp int
temp = *a
*a = *b
*b = temp// 指针变量
}
func main() { // {不能单独放一行,和编译器规则有关?
fmt.Print("hello")
//关键词 https://www.runoob.com/go/go-basic-syntax.html
// 声明变量
var a int // 无需; 变量类型放后面
a =10
fmt.Println("a为",a)//,分割和JS console.log一样
// 声明多变量
var b,c int
b = 10
c = 10
fmt.Println("b+c",b+c)
//Sprintf格式化字符串 %d 表示整型数字,%s 表示字符串
var stockCode=123
var endDate="2020-12-31"
var url="Code=%d&endDate=%s"
var targetUrl=fmt.Sprintf(url,stockCode,endDate)
fmt.Println(targetUrl)
var str string ="i am go language"
fmt.Println("str:size为", len(str),",",str)
// 逻辑运算、数值运算与Java C保持一致
a++
a--
a+=a
// 循环的写法
// goto语句
var i int = 1
for true{// 无限循环
if i < 10 {// 无需写括号,使用空格
fmt.Print("yes")
i++
}else{
break
}
}
// := 未声明的使用引用
// label标签,label:
for i:=1;i<10;i++{
fmt.Print(i)
}
//var flag bool =true
//if flag{
// goto label
//}
fmt.Println(fun2())
num1:=1
num2:=2
swap(&num1,&num2)//传入地址
fmt.Print(num1,";",num2)
// 数组声明
var arr[10] int
for i:=0;i<10;i++{
arr[i]=i
}
// 指针
var ptr *int //声明指针变量(int型)
ptr = &num2 // 存储该变量的地址, *ptr就是指向该地址获取该地址的value,指针为空则nil
fmt.Print("*ptr",*ptr,"ptr",ptr,";&ptr",&ptr,"num2",num2,"&num2",&num2)
// 结构体
//结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称
type Books struct {
title string
}
fmt.Print(Books{
title: "test",
})
var book1 Books
book1.title="hello"
fmt.Print(book1.title)
// 切片
// 动态数组
var slice = make([]int ,3,10)
slice = append(slice, 1)// 在长度后面加,拓展
slice[0]=1
temp:=slice[:10]
fmt.Print(temp[:])
// range范围
var arrs = make([]int,3,3)
arrs[0]=1
arrs[1]=2
arrs[2]=3
for i:= range arrs{
fmt.Print(i)
}
kvs :=map[string]string{"title":"hello","author":"lyf"}
for k,v:=range kvs{
fmt.Print(k,v)
}
}