基础四
来源:互联网 发布:小米pad连接 Mac 编辑:程序博客网 时间:2024/04/30 01:23
- 说明
- 遍历
- 迭代循环
- 键值对
- 声明
- 语法
- 赋值
- 闭包
- 方法作为值
- 使用闭包
- 坑
说明
本章主要说明Go语言中的复杂结构
下面的示例代码来自于这里
遍历
迭代循环
- for 循环的 range 格式可以对 slice 或者 map 进行迭代循环
package mainimport "fmt"var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}func main() { for i, v := range pow { fmt.Printf("2**%d = %d\n", i, v) }}
- 可以通过 _ 来忽略序号或者值
package mainimport "fmt"func main() { pow := make([]int, 10) for i := range pow { pow[i] = 1 << uint(i) } for _, value := range pow { fmt.Printf("%d\n", value) }}
键值对
声明
map
映射键到值
package mainimport "fmt"type Vertex struct { Lat, Long float64}var m map[string]Vertexfunc main() { m = make(map[string]Vertex) m["Bell Labs"] = Vertex{ 40.68433, -74.39967, } fmt.Println(m["Bell Labs"])}
语法
- 跟结构体语法相似,不过使用时必须有键名
package mainimport "fmt"type Vertex struct { Lat, Long float64}var m = map[string]Vertex{ "Bell Labs": Vertex{ 40.68433, -74.39967, }, "Google": Vertex{ 37.42202, -122.08408, },}func main() { fmt.Println(m)}
- 上面的代码中,Vertex也可以省略,代码如下:
package mainimport "fmt"type Vertex struct { Lat, Long float64}var m = map[string]Vertex{ "Bell Labs": {40.68433, -74.39967}, "Google": {37.42202, -122.08408},}func main() { fmt.Println(m)}
赋值
- 在 map m 中插入或修改一个元素
m[key] = elem
- 获得某个元素元素
elem = m[key]
- 删除元素
delete(m, key)
- 检测某个值是否存在
elem, ok = m[key]
- 下面是一个完整的示例
package mainimport "fmt"func main() { m := make(map[string]int) m["Answer"] = 42 fmt.Println("The value:", m["Answer"]) m["Answer"] = 48 fmt.Println("The value:", m["Answer"]) delete(m, "Answer") fmt.Println("The value:", m["Answer"]) v, ok := m["Answer"] fmt.Println("The value:", v, "Present?", ok)}
闭包
方法作为值
- 在Go中,方法也可以作为值
package mainimport ( "fmt" "math")func main() { hypot := func(x, y float64) float64 { return math.Sqrt(x*x + y*y) } fmt.Println(hypot(3, 4))}
使用闭包
- 下面是一个闭包的例子:
package mainimport "fmt"func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum }}func main() { pos, neg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), neg(-2*i), ) }}
- 函数 adder 返回一个闭包。每个闭包都被绑定到其各自的 sum 变量上
坑
当从 map 中读取某个不存在的键时,结果是 map 的元素类型的零值
闭包是一个方法内的值,它来自方法体的外部的变量引用, 方法可以对这个引用值进行访问和赋值,而该方法也被绑定在这个值上
练习:斐波纳契闭包
package mainimport "fmt"// fibonacci 函数会返回一个返回 int 的函数。func fibonacci() func() int { x:=0 y:=1 return func() int{ sum := x + y x=y y=sum return sum }}func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) }}
0 0
- 基础四
- JDBC基础(四)
- CodeSmith基础(四)
- VLAN基础 四
- CodeSmith基础(四)
- JDBC基础(四)
- CodeSmith基础(四)
- Dojo 基础入门(四)
- JDBC基础(四)
- C++基础(四)
- javascript(基础整理四)
- Ajax基础 (四)
- PL_SQL基础--续四
- C#基础四
- maven基础四
- ACM基础题(四)
- jquery基础(四)
- JDBC 基础(四)
- Jenkins+Ant+Jmeter搭建持续集成的接口测试平台
- iphone ios 如何使用gcd,block
- Android 选取图片、手机拍照以及保存图片到本地、读取图片
- java生成随机数字和字母组合(自定义长度)
- iOS开发-UI控件:代码取消UITableViewCell选中状态
- 基础四
- 解读 node.js express 生成的app.js
- hdu 2138(米勒—拉宾素数测试)
- 深入浅出 Map 的实现(HashMap、HashTable、LinkedHashMap、TreeMap)
- Openwrt 交叉编译(Crosscompile)及使用SDK生成ipk安装包
- c标签 if else c标签 总结
- javascript jquery console调试方法说明
- symmetricDS交流
- USACO:Factorials