package main
import "fmt"
// 标题: 控制语句和数组
func main() {
// if 语句
age := 19
if age > 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
if year := 2020; year > 2000 { // 变量定义和比较放在一行
fmt.Println("21世纪")
} else {
fmt.Println("活在历史中")
}
// for 循环
for i := 0; i < 10; i++ {
fmt.Print(i)
}
var j int32 = 0
for ; j < 10; j++ {
if j > 4 {
break
} else if j > 3 {
continue
}
fmt.Print(j)
}
// foreach 循环
for i, c := range "我爱你中国" {
fmt.Printf("%d, %c", i, c)
}
// switch 不用写 break
finger := 5
switch finger {
case 0:
fmt.Println("0")
case 1:
fmt.Println("1")
case 2, 5, 8:
fmt.Println("您好")
fallthrough // 继续执行default
default:
fmt.Println("**")
}
// goto 语句, 一般用于退出多层循环
tag1:
var i int = 5
if i > 6 {
goto tag1
}
// 运算符跟C语言完全一致
// 数组
var arr1 = [3]int{1, 2, 3} // 数组长度不能变
var arr2 [3]bool // 都是默认值false
var arr3 = [...]int{7, 7, 7} // 根据数组长度自动推断(定长)
var arr4 = []int{7, 7, 7} // 根据数组长度自动推断(非定长, 所以其实创建的是切片而非数组)
var arr5 = [10]int{1, 2} // 长度为10, 只指定两个值, 后面都是默认值0
var arr6 = [10]int{0: 100, 3: 20} // 根据索引初始化, 其它默认
for i := 0; i < len(arr6); i++ {
fmt.Println(arr6[i])
}
// 二维数组
var arr7 [3][2]int
arr7 = [3][2]int{[2]int{1, 3}, [2]int{9, 8}}
for _, ints := range arr7 {
for _, v := range ints {
fmt.Println(v)
}
}
// 数组是值类型, 深拷贝.
// 切片是引用类型, 浅拷贝. 切片是不指定长度的数组
var s1 []int // 定义int类型的切片.
var s2 = []string{"北京", "上海", "广州"}
var s3 = arr6[:] // 中括号就是切片操作, 返回的类型是切片
fmt.Println(s1 == nil) // true. 没有开辟内存空间
fmt.Println(s2 == nil) // false
// 长度和容量.
fmt.Printf("len(s2):%d\tcap(s2):%d\n", len(s2), cap(s2)) // len=3,cap=3
// 容量是第0个元素到底层数组结尾的容量
s3 := s2[0:2]
fmt.Printf("len(s3):%d\tcap(s3):%d\n", len(s3), cap(s3)) // len=2,cap=3
_ = cap(s2[1:]) // 结果是2
s1 := make([]int, 5, 10) // 创建切片slice, 长度=5, 容量=10
s1 = append(s1, 999, 888) // append and assign. append太多次数容量会+100%或者+25%
fmt.Println(s1) // 输出[0 0 0 0 0 999 888]
// 切片复制
var s2 = make([]int, 3, 3)
copy(s2, s1) // 深拷贝. 只拷贝s2能存下的部分.
s2[0] = 777 // s1不会变
fmt.Printf("%v, len=%v, cap=%v\n", s2, len(s2), cap(s2)) // [777 0 0], len=3, cap=3
// 排序
sort.Ints(s2)
fmt.Printf("%v\n", s2, len(s2), cap(s2)) // [0 0 777], len=3, cap=3
}
Go语言学习草稿(2) 控制语句 数组 切片
最新推荐文章于 2024-01-12 15:35:36 发布