go入门(3)

本文详细介绍了Go语言中的基本控制流结构,包括for循环的不同用法,如经典循环、死循环、数组遍历、range、双重for循环、冒泡排序以及条件语句如continue、break、goto。同时涵盖了切片、复制、排序、map和列表(list)等数据结构的使用。
摘要由CSDN通过智能技术生成

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)
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值