#### golang只有for循环,和其他语言一样,那我们直接进行一个简单的程序演示:将任意给定的一个数字转换成二进制。
**算法分析:任意给定一个数,eg:12,然后一直用12/2,12/2=6...0 6/2=3...0 3/2=1...1 1/2=0..1,然后把余数从最后一个往前记录,即可获得给定数的二进制数字,暨12的二进制数是1100**
那么我们用一个循环来控制给定的数字n/2以及n%2,我们这里的递增条件是n/2,并把值再赋给n,结束条件是n>0(当然不能等于0如果等于0的话就会多执行一次循环体),我们所需要的是n%2的值,那么我们每次循环就计算并记录一次n%2,然后把这个值从后往前记录下来即可:
```
func convert2Bin(n int) (result string) {
if n == 0 {
result = "0"
return result
}
for ; n > 0; n /= 2 {
lsb := n % 2
result = strconv.Itoa(lsb) + result
}
return result
}
```
#### 上面的程序演示了省略初始条件的循环,接下来演示一个只有结束条件的循环(其他语言中有while,go语言中就只有for)
我们的程序想要演示从一个文件中一行一行地读取数据,回顾一下之前在“分支”的程序fileReading,我们所使用的读文件的方式是通过ioutil.ReadFile()的方式读的,这个函数封装得很厉害,看一下函数原型:
`func ReadFile(filename string) ([]byte, error)`
它返回的是一个byte类型的slice,可以随时转换成string打印出来。
我们这里要做的是从文件中一行一行地读取数据,那我们就需要更底层一些的函数scanner.Text(),然后再根据Scan()函数来判度是否已经读完,然后放在循环中不断一行一行地读出数据,请看详细代码:
```
const fileName = "/home/goWorkSpace/src/fr13nd/iilidanProject/loop/readFileOneByLine/abc.txt"
file, err := os.Open(fileName)
if err != nil {
panic(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() { //返回的是一个bool值,结束读取后返回一个false
fmt.Println(scanner.Text())
}
```
当然,上面演示了省略两种循环条件的循环,有人就想省略结束条件~当然这就会成一个死循环,死循环在goroutine中很常用。
有疑问加站长微信联系(非本文作者))