<meta charset="utf-8">
一、各种语言入门例子:打印Hello,World!
package main
import (
"fmt"
)
func main(){
fmt.Println("Hello,World!")
}
二、定义变量
1、var name type_name = value
2、var name = value
3、name:=value // 只能定义为局部变量
Go语言中,所有变量都被初始化为零值
// int= 0 string ="" bool = false
// *int = nil //指针类型
三、
常量定义:
1、const name type_name = value
2、数据的初始化递增 与 iota连用
const (
INIT = iota
ONE
TWO
)
四、控制语句
1、 if else 条件语句 if后面判断条件不可以加() 而且{必须和if 在同一行
2、for 循环语句 后面不加()
3、switch case 不需要用break
五、结构体
变量如果定义为小写字母开头的话 意味着这个变量是这个结构体私有变量
六、map
// map 的定义
// map[key_type] value_type
var map_name map[string]int
//map 注意点 : map使用之前要进行初始化操作
func init() {
map_name = make(map[string]int)
}
func main() {
fmt.Println("")
map_name["111"] = 100
fmt.Println("map_name", map_name)
}
init()函数在变量定义之后 main函数执行之前执行。不需要被调用,自动调用。可以被定义多个
七、数组和切片
/*
知识点一 数组
特点:1、内存连续的数据集合 var arr[5] int --> arr[0]...arr[4]
2、数组取值 下标从0开始
3、作为函数参数 可以为值传递也可以为引用传递
知识点二 切片
特点: 1、切片底层是数组
2、动态增加(数组是固定大小)
3、函数参数属于引用传递
*/
// 数组定义
var arr_name [2] int
// 切片定义
var slice_name [] int
value_slice1 = slice_name[1:3:5]; // 容量 slice_name[n:m:f] 长度 len = m-n cap = f-n
八、匿名函数
/*
匿名函数的定义
j:=func(i,j int )(data int ){
data = i+j
return data
}
j是我们的函数的地址
x,y :=func(i,j int)(m,n int){
return j,i
}
*/
九、接口
/*
接口: go语言为了实现多态
1、定义接口
2、接口的使用 --->go语言为了实现多态
*/
type I_name interface {
Printflm() //接口的函数
}
//接口的实现函数
func Ts_Func(data I_name) {
data.Printflm()
}
type A1 struct {
}
type B1 struct {
}
func (this *A1) Printflm() {
fmt.Println("A1 Printflm")
}
func (this *B1) Printflm() {
fmt.Println("B1 Printflm")
}
func main() {
data1 := A1{
}
data2 := B1{
}
Ts_Func(&data1)
Ts_Func(&data2)
}
十、异常
/*
异常处理: panic recover
panice 是什么? :错误,严重错误。导致程序崩溃
产生的常见原因:1、map忘记初始化
2、并发安全 map
3、网络 数据库连接
4、数组越界的
defer 数据延迟处理
1、 close free
2、 conn 数据库连接 defer close()---》 error---》close(conn)
*/
func Panic_func() {
panic("12345")
}
func main() {
defer func() {
if err := recover(); err != nil {
strerr := fmt.Sprintf("%s", err)
fmt.Println(strerr)
}
}()
fmt.Println("data:")
Panic_func()
fmt.Println("data1:")
}