环境
go version go1.10.1 darwin/amd64
Range
for循环的range形式可遍历切片或映射。
当使用 for 循环遍历切片时,每次迭代都会返回两个值。 第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。实例演示如下
package main
import "fmt"
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main() {
for i, v := range pow {
fmt.Printf("%d = %d\n", i, v)
}
}
运行后结果如下
0 = 1
1 = 2
2 = 4
3 = 8
4 = 16
5 = 32
6 = 64
7 = 128
range对索引跟值的处理
可以将下标或值赋予 _ 来忽略它。若你只需要索引,去掉 , value 的部分即可。实例演示如下
package main
import "fmt"
func main() {
pow := make([]int, 10)
for i := range pow {
pow[i] = 1 << uint(i) // == 2**i
}
for _, value := range pow {
fmt.Printf("%d\n", value)
}
}
运行后的结果和上面一致
练习:切片
实现 Pic 。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx ,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。
图像的选择由你来定。几个有趣的函数包括 (x+y)/2 、x*y 、 x^y 、 x*log(y) 和 x%(y+1) 。
(提示:需要使用循环来分配 [][]uint8 中的每个 []uint8 ; 请使用 uint8(intValue) 在类型之间转换;你可能会用到 math 包中的函数。)
这个是官方的一个练习,有兴趣的可以自己实现下,下面是我的实现
package main
// import "math"
import "golang.org/x/tour/pic"
func Pic(dx, dy int) [][]uint8 {
x := make([]uint8, dx)
y := make([][]uint8, dy)
for i := range y {
for j := range x {
// 第一种
// m := float64(i)
// t := float64(j)
// t = float64(math.Log(t))
// x[j] = uint8(m * t)
// 第二种
// x[j] = uint8((i + j) / 2)
// 第三种
// x[j] = uint8(i * j)
// 第四种
// x[j] = uint8(i ^ j)
// 第五种
x[j] = uint8(i % (j + 1))
}
y[i] = x
}
return y
}
func main() {
pic.Show(Pic)
}
第一种方式展示的图片如下
第二种方式展示的图片如下
第三种方式展示的图片如下
第四种方式展示的图片如下
第五种方式展示的图片如下
版权声明
由 durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。