for循环
package main
import "fmt"
func main() {
//经典循环方式
for i := 0; i < 5; i++ {
fmt.Println("你好")
}
//for {
// fmt.Println("死循环")
//}
//
k := 0
for k < 3 {
fmt.Println("你好", k)
k++
}
//遍历数组
a := [3]string{"张三", "李四", "王五"}
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
//使用range遍历数组 i是索引位置 n是数组内容
for i, n := range a {
fmt.Println(i, n)
}
}
双重for循环
package main
import "fmt"
func main() {
//双重for循环
for i := 0; i < 5; i++ {
for j := 0; j < 3; j++ {
fmt.Println(i, j)
}
}
}
冒泡排序
package main
import "fmt"
func main() {
//冒泡排序利用双重for循环把最大 最小的值移动到一侧,每次判断出一个数据
//如果有n个数组,执行n-1次循环,就可以完成排序
arr := [5]int{2, 5, 1, 4, 7}
for i := 0; i < len(arr); i++ {
//减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]
}
}
}
fmt.Println(arr)
}
continue
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
if i == 2 {
//跳过本次循环 不打印
continue
}
fmt.Println(i)
}
fmt.Println()
//在外层定义abc
abc:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
//在这里 指定abc标签 那么说明 j>1的都不会打印出来 i从下一轮开始
continue abc
}
fmt.Println(i, j)
}
}
}
break
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
if i == 1 {
//跳过本次循环 不打印
break
}
fmt.Println(i)
}
fmt.Println()
//在外层定义abc
abc:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
//在这里 指定abc标签 那么说明 j>1的都不会打印出来 i也停止
break abc
}
fmt.Println(i, j)
}
}
}
goto
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 2 {
//跳转到定义标签的位置 循环就不执行了
goto Loop
}
fmt.Println(i)
}
fmt.Println("这里不会打印")
Loop:
fmt.Println("跳转到这里,直接打印")
}
切片
package main
import "fmt"
func main() {
//切片 就是动态数组 不需要输入数组的长度
var name = []string{"张三", "李四"}
fmt.Println(name)
}
使用make创建切片
package main
import "fmt"
func main() {
//使用make 创建切片数组 第二个参数是数组的长度,第三个参数是数组的容量
a := make([]string, 0, 0)
fmt.Println(a)
//长度0和容量0
fmt.Println(len(a), cap(a))
//添加内容 然后返回a
a = append(a, "张三", "李四")
fmt.Println(a)
//添加数组进来
b := []string{"王五", "赵六"}
//数组以...的形式插入进来
a = append(a, b...)
fmt.Println(a)
}
copy
package main
import "fmt"
func main() {
a := []int{1, 2}
b := []int{3, 4, 5, 6}
//把a数组 复制一份放入到b的索引位置 改变n=b的索引位置的数据
copy(b, a)
//1 2 5 6
fmt.Println(b)
}
sort
package main
import (
"fmt"
"sort"
)
func main() {
var a = []int{1, 5, 2, 3}
//升序排序
sort.Ints(a)
fmt.Println(a)
//降序排序 需要转成切片
sort.Sort(sort.Reverse(sort.IntSlice(a)))
fmt.Println(a)
var b = []string{"a", "好好", "dd"}
sort.Strings(b)
fmt.Println(b)
//搜索排序后的索引位置
i := sort.SearchStrings(b, "dd")
fmt.Println(i)
}
map
package main
import "fmt"
func main() {
//map 键值对
//定义map
var m map[string]int
fmt.Println(m)
//创建一个map 并赋值
a := map[string]int{"name": 12, "age": 16}
fmt.Println(a)
//如果不存在 则添加数据
a["pwd"] = 11
//如果存在 则修改数据
a["age"] = 66
fmt.Println(a)
//删除age
delete(a, "age")
fmt.Println(a)
//通过key 获取value值
fmt.Println(a["pwd"])
//value就是value值 ok就是存在返回true 不存在返回false
value, ok := a["pwd"]
fmt.Println(value, ok)
//循环遍历map
for key, value := range a {
fmt.Println(key, value)
}
}
list
package main
import (
"container/list"
"fmt"
)
func main() {
//创建list
a := list.New()
//往队头插入元素
a.PushFront("a") //a
//往队尾插入元素
a.PushBack("b") // a,b
//在最后一个元素 之前插入
a.InsertBefore("c", a.Back()) //a,c,b
//在第一个元素之后插入
a.InsertAfter("d", a.Front()) //a,d,c,b
//遍历list 从对首的位置开始 不为空 就一直读取下一个元素
for e := a.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
fmt.Println("队首的元素", a.Front().Value)
fmt.Println("队尾的元素", a.Back().Value)
//删除第一个元素
a.Remove(a.Front())
for e := a.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}