常见的循环结构
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
//常规结构
for i := 0; i < 10; i++ {
fmt.Print(i)
fmt.Print(" ")
}
fmt.Print("\n")
//仅判断条件
i := 0
for i < 10 {
fmt.Print(i)
fmt.Print(" ")
i++
}
fmt.Print("\n")
//极简结构
i = 0
for {
if i >= 10 {
break
}
fmt.Print(i)
fmt.Print(" ")
i++
}
fmt.Print("\n")
//对集合类型的操作
//range关键字是对集合进行遍历
for index, value := range os.Args {
fmt.Println(strconv.Itoa(index) + "-->" + value)
}
}
输出
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0-->/tmp/___go_build_main_go
1-->-a
2-->fuck
3-->-b
4-->you
类似于C++ loop的坑爹语法下的循环结构
package main
import (
"fmt"
"strconv"
)
func main() {
for a := 1; a < 5; a++ {
for b := 0; b < 5; b++ {
if b%2 == 1 {
continue
}
fmt.Println(strconv.Itoa(a) + "-->" + strconv.Itoa(b))
}
}
fmt.Println("========================================")
flg:
for a := 1; a < 5; a++ {
for b := 0; b < 5; b++ {
if b%2 == 1 {
continue flg
}
fmt.Println(strconv.Itoa(a) + "-->" + strconv.Itoa(b))
}
}
}
1-->0
1-->2
1-->4
2-->0
2-->2
2-->4
3-->0
3-->2
3-->4
4-->0
4-->2
4-->4
========================================
1-->0
2-->0
3-->0
4-->0
range的一个非典型错误
package main
import "fmt"
type ttest struct {
name string
}
func main() {
a := []*ttest{&ttest{"aaa"}, &ttest{"bbb"}}
b := []ttest{ttest{"ccc"}, ttest{"ddd"}, ttest{"eee"}}
for k, v := range b {
fmt.Printf("v-->%p\n", &v)
if k == 0 {
a = append(a, &v)
}
}
for _, v := range a {
fmt.Print(v.name + ",")
}
}
由于变量v的地址一直不变,而值随着遍历一直在变所以拼接到a最后面的哪个值一直在变,运行结果如下:
v-->0xc000010200
v-->0xc000010200
v-->0xc000010200
aaa,bbb,eee,
Process finished with exit code 0