说明
基本语法
- go语言中没有 引用
不定参函数
1
2
3
4
5
6func test(args ...int){
for i:=0;i<len(args);i++{
fmt.Println("下标 ",i,"值 ",args[i])
}
}多返回值
1
2
3
4
5func test5()(a int, b int, c int){
//多重赋值
a,b,c=1,2,3
return
}匿名变量_
匿名变量与函数无效返回值搭配使用
函数类型
函数也可以作为变量使用,通过传入参参数和返回参数标记不同函数类型。
函数名是一个指针1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38package main
import "fmt"
func test6(){
fmt.Println("arigado")
}
func test7(a int, b int){
fmt.Println(a+b)
}
func test9(a int, b int) int{
return a+b
}
func test8() {
fmt.Println("sumanai")
}
//type 可以定义函数类型
//type 可以为已存在类型起别名
type FUNCTYPE func()
type FUNCTEST func(int,int)
type funcdemo func(int,int)int
func main(){
//函数调用
//test10(10,20)
//如果使用Print打印函数名是一个地址
//函数名本身就是一个指针类型数据 在内存中代码区进行存储
//fmt.Println(test10)
//自动类型推到创建函数类型
//f:=test10
//f(10,20)
//fmt.Printf("%T",f)
//直接定义函数类型
var f func(int,int)
f=test10
f(10,20)
}闭包
函数调用结束时会从内存中销毁
可以通过匿名函数和闭包 实现函数在栈区的本地化1
2
3
4
5
6
7
8
9
10
11
12
13func bibao() func() int{
var a int
return func() int{
a++
rerurn a
}
}
func main(){
f := bibao()
for i:=0;i<10;i++ {
Println(f())
}
}数组
1
2var arr [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
arr2 :=[...]int{1,2,3}随机
生成随机数代码
rand.Seed(time.now().UnixNano())
a := rand.Intn(100)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30package main
import(
"fmt"
"math/rand"
"time"
)
func BubbleSort(arr [10]int) [10]int{
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if(arr[j]>arr[j+1]){
arr[j],arr[j+1]=arr[j+1],arr[j]
}
}
}
return arr
}
func main(){
var arr [10]int
rand.Seed(time.Now().UnixNano())
for i := 0; i < len(arr); i++ {
arr[i]=rand.Intn(100)//0-99
}
arr =BubbleSort(arr)
fmt.Println(arr)
}切片Slice
自动推到类型创建切片: make([] 数据类型,数组名)
添加切片信息: append(s,34,44,55)
长度: len(s)
容量: cap(s)
与数组区别:数组必须写元素个数。切片不用
容量扩展:小于1024字节扩展一倍,否则扩展1/4
切片截取:- 切片名[起始下标:]
slice:=s[2:] - 切片名[:结束位置] 不包含结束位置
slice:=s[:2]
切片名[起始位置:结束位置]
slice:=s[2:5] 切片名[起始位置:结束位置:容量]
slice:=s[0:2:2]
- 切片名[起始下标:]
切片拷贝:
1 | s1:=[]int{1,2,3,4,5} |
1 | func main(){ |
- map
1
2
3
4
5
6
7
8
9
10
11
12
13func map1(){
//map中数据无序存储,长度自动扩容
m := make(map[string] int,1)
m["Alice"] = 10
m["Mom"] = 30
m["Dadi"] = 32
//delete(map,key)
delete(m, "Dadi")
delete(m,"Tom") //不会报错
for i,j :=range m{
println(i,j)
}
}
map作为函数参数
1 | func map2(m map[int]string){ |
- 指针
两种指针声明方式
var p *int //nil空指针
p :=new(int) //new创建好的空间值为数据类型的默认值
1 | //指针作为函数参数是地址传递 |
数组指针
1 |
|
切片指针
1 | func main(){ |
切片指针传参
1 | func test(s *[]int){ |
new 创建切片指针
1 | package main |