= 和 :=/range/切片
Go 语言中 = 和 := 有什么区别#
使用 = 前必须先用 var 声明
var a
a = 100
//或
var b = 100
//或
var c int = 100
:= 是声明并赋值,并且系统自动推断类型,不需要 var 关键字
d := 100
range 函数#
range 函数可以用来遍历数组,切片,通道或者 Map。
用于遍历数组、切片时,返回索引和元素;用于遍历 Map 时,返回键和值;用于遍历通道,只有一个返回值。各种类型的返回值参考下表:
// range函数使示例
package main
import (
"fmt"
)
func main() {
fmt.Println("----切片迭代----")
nums := []int{1,2,3,4,5,6}
for k , v := range nums {
fmt.Printf("key : %v value : %v \n",k,v)
}
fmt.Println("----map迭代----")
kvs := map[string]string{
"name": "zhangsan",
"sex": "男",
}
for mk , mv := range kvs {
fmt.Printf("mk : %v mv : %v \n",mk,mv)
}
fmt.Println("----字符串迭代----")
for sk, sv := range "hello world!" {
//注意这里单个字符输出的是ASCII码,
//用 %c 代表输出字符
fmt.Printf("sk : %v sv : %c \n",sk,sv)
}
fmt.Println("----channel迭代----")
ch := make(chan int, 10)
ch <- 11
ch <- 12
close(ch) // 不用的时候记得关掉,不关掉又没有另一个goroutine存在会死锁
for x := range ch {
fmt.Println(x)
}
}
//结果
----切片迭代----
key : 0 value : 1
key : 1 value : 2
key : 2 value : 3
key : 3 value : 4
key : 4 value : 5
key : 5 value : 6
----map迭代----
mk : name mv : zhangsan
mk : sex mv : 男
----字符串迭代----
sk : 0 sv : h
sk : 1 sv : e
sk : 2 sv : l
sk : 3 sv : l
sk : 4 sv : o
sk : 5 sv :
sk : 6 sv : w
sk : 7 sv : o
sk : 8 sv : r
sk : 9 sv : l
sk : 10 sv : d
sk : 11 sv : !
----channel迭代----
11
12
切片(slice)#
概念#
切片是一个引用类型,可以创建” 字符串” 切片,可以创建” 整型” 切片等
切片和数组的区别 (重点)#
切片和数组相似,它们都是保存相同数据类型元素的容器 , 但是切片的元素个数是可变的,数组不可变
切片不需要明确指定元素的个数
创建切片方法#
var i []int //创建int类型切片
var s []string //创建string类型切片
切片的内部实现#
切片是一个很小的对象,它对底层的数组 (内部是通过数组保存数据的) 进行了抽象,并提供相关的操作方法;切片是有三个字段的数据结构,这 3 个字段分别是:指向底层数组的指针、切片访问的元素的个数 (即长度)、切片允许增长到的元素个数
字符串类型切片 和 字符串类型数组对比#
//创建 "字符串"类型的切片
myStr2 := []string{"zhangsan", "list", "wangwu"}
fmt.Println(myStr2)
fmt.Printf("%T \n",myStr2)
//结果:
[zhangsan list wangwu] #字符串类型切片打印的结果
[]string #字符串类型的切片
---------------------------------------------------------
//创建"字符串"类型的数组
myStr3 := [3]string{"zhangsan","lisi","wangwu"}
fmt.Println(myStr3)
fmt.Printf("%T",myStr3)
//结果:
[zhangsan lisi wangwu]
[3]string #字符串类型的数组
参考:www.cnblogs.com/chadiandianwenrou/...
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: