13 Matching Annotations
- Oct 2018
-
www.runoob.com www.runoob.com
-
可以使用内建函数 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)
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
/* 打印子切片从索引 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[:]
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
/* 未定义长度的数组只能传给不限制数组长度的函数 */ 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)) }
-
-
www.runoob.com www.runoob.com
-
注意:以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:
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}}
-
-
www.runoob.com www.runoob.com
-
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
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。
for key, value := range oldMap { newMap[key] = value }
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
以下描述了 select 语句的语法
- 每个case都必须是一个通信
- 所有channel表达式都会被求值
- 所有被发送的表达式都会被求值
- 如果任意某个通信可以进行,它就执行;其他被忽略。
- 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。
否则:
1. 如果有default子句,则执行该语句。 2. 如果没有default字句,**select将阻塞,直到某个通信可以运行**;Go不会重新对channel或值进行求值。
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
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
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
这种因式分解关键字的写法一般用于声明全局变量
var ( vname1 v_type1 vname2 v_type2 )
Tags
Annotators
URL
-
-
www.runoob.com www.runoob.com
-
以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public)
-
main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)
Tags
Annotators
URL
-