对于go语言的语法还是简单易懂的,不过还是要多看看,加深一下印象。而只学基本语法是根本无法满足开发的需求的。最近跟着视频学习,除了基本语法还有并发、中间件、日志库、互联网协议、Mysql、redis、gin、docker等等。为了以后自己复习方便,看完后进行一些总结。有需要的同学也可以看一下!
1. for…range(键值循环)
Go语言中可以使用for...range
遍历数组、切片、字符串、map、通道(chan)
,通过for…range遍历的返回值有一下规律:
- 数组、切片、字符串返回索引和值;
- map返回键和值;
- 通道(chan)只返回通道内的值。
2. iota(枚举):
itoa
的用法需要注意的两个要点:
- iota在
const
关键字出现时将被重置为0; - const 中
每新增一行常量声明
,iota累加1;
3. byte 和 rune 的区别:
- 都属于类型别名;
- byte是uint8的别名;rune是uint32的别名。
4. 数组(array):
数组必须指定存放的元素的类型和容量(长度),数组的长度也是数组类型的一部分;数组是值类型的
。
练习:找出数组中和为指定值的两个元素的下标。比如数组[1,3,5,7,8]中和为8的两个元素下标为(0,3)(1,2)
思路:双层循环
func main() {
a1:=[]int{
1,3,5,7,8}
for i:=0;i<len(a1);i++{
for j:=i+1;j<len(a1) ;j++ {
if a1[i]+a1[j]==8{
fmt.Printf("%d,%d\n",i,j)
}
}
}
}
结果:
0,3
1,2
5. 切片(slice):
-
切片是一个拥有相同类型元素的可变长度,其内部结构包括: 地址,长度,容量。支持自动扩容。
切片是引用类型
,故切片不能直接比较,唯一合法的是和nil
比较。 -
在切片中,声明一个变量但不初始化,那么它的值为nil;
一个nil值的切片并没有底层数组,故一个nil值的切片的长度和容量都是0;但是我们不能说一个长度和容量是0的切片一定是nil。var s1 []int ------------------------ len(s1)=0,cap(s1)=0,s1==nil
s2:=[]int{} --------------------------len(s2)=0,cap(s2)=0,s2!=nil
s3: