1.go语言有两大类型:
数值类型boolstring数组struct结构体指针slice切片管道chanmapinterface
2.变量的定义:
局部变量
var `变量名` `类型` = `参数`
var `变量名` = `参数`
`变量名` := `参数`
全局变量
var (
`变量名` = `参数`
)
整数类型小数类型
3.Golang语言中的单引号和双引号的区别:
''""
4.字符串拼接格式:
var str1 string = "123"+
"456"
5.基本数据类型转换:
在go语言中转换数据类型需要显式转换
将float64类型转换为float32类型
var n1 float64 = 3.2
n2 := float32(n1)
6.基本数据类型转换为string数据类型:
fmt.Sprintf
num1 := 3
string1 := fmt.Sprintf("%d",num1)
strconv
str1 := strconv.FormatInt(num1,10) #第一个参数是变量,第二个参数是这个变量的类型 2是2进制数,10是10进制数 具体看官方文档
strconv.Itoa
str1 := strconv.Itoa(num1) #num1是int类型
7.string数据类型转换为基本数据类型:
var str1 string = "1"
//bool
b,_ := strConv.ParseBool(str1)
//int
b,_ := strConv.ParseInt(str1,10,0)
//float
b,_ := strConv.ParseFloat(str1,64)
8.指针:
*ptr&num&ptr
num := 1
var ptr *int = &num
&ptr = 2
9.接收键盘输入语句:
var name string
fmt.Scanln(&name)
或
fmt.Scanf("%s",&name)
10.分支结构
if elseswitch
swich 表达式 {
case 表达式1,表达式2,表达式3:
语句块
fallthrough
default:
语句块
}
表达式caseif或defaultelseswtchfallthrough
11.for循环控制
1.
num1 := 10
for i:=0; i<num1;i++{
语句块
}
2.
num1 := 10
i := 1
for i<num1{
语句块
i++
}
3.
for {
语句块
break
}
for 后面如果什么也不写,相当于无限循环
12.遍历数组
var str [5]int = [5]int{1,2,3,4,5}
for index,val := range str{
语句块
}
indexval
13.多层循环break和continue的使用
lable1:
for i:=1;i<10;i++{
lable2:
for j:=1;j<10;j++{
}
}
breakbreak lable1continue
14.goto 基本介绍(不推荐使用)
num1 :=1
if num1 == 1{
goto lable1
}
fmt.println("你好1")
lable1:
fmt.println("你好2")
输出的会是"你好2"
15.函数定义的基本语法:
func 函数名(形参 类型,形参 类型)(返回值 类型){
执行语句
}
16.包的一些知识点
import 自定义名 "路径"
17.打包语法
go build -o 指定路径 需要打的包名
18.自定义类型的细节
type mytype int
mytype
19.func可以当参数传递
func mytype1(num1 int, num2 int)int{
}
func mytype2(n1 func(int,int)int, num1 int, num2 int){
语句块
}
fun main(){
num1 := 1
num2 := 2
mytype2(mytype1,num1,num2)
}
20.可变参数
func args1(args... int){
fmt.Println(args)
}
func main(){
args1(1,2,3,4)
}
args
21.init函数细节
init
22.匿名函数细节
func (n1 int, n2 int)int{
return n1+n2
}(n1,n2)
或
a := func (n1 int, n2 int)int{}(n21,n2)
匿名函数
23.闭包
func Addupper()func(int,int)int{
return func(n int,n2 int)int{
return n+n2
}
}
func main(){
add := Addupper()
num3 := add(2,3)
fmt.Println(num3)
}
24.defer延迟机制
defer
25.时间日期
import "time"
now := time.Now() # 获取当前时间
now.Format("2006-0102 15:04:05") #格式化日期时间
now.Unix() #秒数时间戳
now.UnixNano() #纳秒数时间戳
26.捕获异常defer+recover
defer func(){
err := recover() //revcover可以捕获到异常
if err != nil{
fmt.Println("err",err)
}
}
捕获异常的最大作用在于当程序报错时,后面的代码还可以执行
27.自定义异常 errors.New和panic内置函数
import "errors"
errors.New("代码执行错误")
Panic(err)
自定义异常的最大作用在于读取文件错误时后面的代码不能执行,需要终止程序
28.数组(值类型)
var num [3]int = [3]int{1,2,3}
var num = [...]int{8,9,10}
var num = [...]int{0:8,1:9,2:10}
29.slice切片(值类型)
var num [3]int = [3]int{1,2,3}
var slice1 := num[:]
var slice2 := make([]int,4,10) #4是大小,10是容量
var slice3 []int = []int{1,2,3}
注意:切片和数组是有很大区别的,数组的大小是固定的,切片大小可以变化
var slice1 []int = []int{1,2,3}
slice1 = append(slice,4)
var slice2 = make([]int,1)
copy(slice2,slice1) #将slice1的数据copy给slice2
30.map(引用类型) key-value数据结构
var a map[string]string := make(map[string]string)
增 改:
a["key"] = value
删:
delete(a,"key")
查:
val,finRes := a["key"]
for-range
31.结构体
type Logins struct {
Username string `json:"userename"`
Password string `json:"password"`
}
序列化/反序列化
import "encoding/json"
var u Logins = Logins{"Username":"123","Password":"123"}
序列化:
jsonstr,err := json.Marshal(结构体变量)
if err != nil{
fmt.Println("序列化错误")
}
反序列化:
json.Unmarshal([]byte(jsonstr),&u)