可以使用内建函数 make 也可以使用 map 关键字来定义 Map:
// 声明变量,默认 map 是 nil
var map_variable map[key_data_type]value_data_type
// 使用make 函数
map_variable := make(map[key_data_type]value_data_type)
可以使用内建函数 make 也可以使用 map 关键字来定义 Map:
// 声明变量,默认 map 是 nil
var map_variable map[key_data_type]value_data_type
// 使用make 函数
map_variable := make(map[key_data_type]value_data_type)
/* 打印子切片从索引 0(包含) 到索引 2(不包含) */ number2 := numbers[:2] printSlice(number2) /* 打印子切片从索引 2(包含) 到索引 5(不包含) */ number3 := numbers[2:5] printSlice(number3)
numbers := []int{0,1,2,3,4,5,6,7,8}
len=2 cap=9 slice=[0 1]
len=3 cap=7 slice=[2 3 4]
通过内置函数make()初始化切片s,[]int 标识为其元素类型为int的切片
s := make([]int, len, cap)
初始化切片s,是数组arr的引用
s := arr[:]
/* 未定义长度的数组只能传给不限制数组长度的函数 */ setArray(array) /* 定义了长度的数组只能传给限制了相同数组长度的函数 */ var array2 = [5]int{1, 2, 3, 4, 5}
func setArray(params []int) {
fmt.Println("params array length of setArray is : ", len(params))
}
func setArray2(params [5]int) {
fmt.Println("params array length of setArray2 is : ", len(params))
}
注意:以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:
a = [3][4]int {
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11} , // 此处的逗号是必须要有的
}
上面代码也可以等价于
a = [3][4]int {
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}}
func getSequence() func() int { i:=0 return func() int { i+=1 return i } }
闭包,A函数 返回一个函数,假设返回的函数为B,那么函数B,可以使用A函数中的变量
nextNumber := getSequence()
nextNumber 是 返回函数B类型,func() int,i是函数A中的变量,初始值 i=0
执行nextNumber(),i+=1, reuturn i ==> 1
再执行nextNumber(),i+=1,return i ==> 2
再执行nextNumber(),i+=1,return i ==> 3
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
for key, value := range oldMap {
newMap[key] = value
}
以下描述了 select 语句的语法
否则:
1. 如果有default子句,则执行该语句。
2. 如果没有default字句,**select将阻塞,直到某个通信可以运行**;Go不会重新对channel或值进行求值。
iota 表示从 0 开始自动加 1,所以 i=1<<0, j=3<<1(<< 表示左移的意思),即:i=1, j=6,这没问题,关键在 k 和 l,从输出结果看 k=3<<2,l=3<<3。
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=", i)
fmt.Println("j=", j)
fmt.Println("k=", k)
fmt.Println("l=", l)
}
以上实例运行结果为:
i=1
j=6
k=12
l=24
这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public)
main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)