入门:基础语法(四)循环

ace_kylin · · 649 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

#### 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中很常用。

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

649 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传