日期:2014年7月21日

 
一、控制结构
 
1、Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语句,另外Go中还提供了类型选择和多路通信转接器的select。Go的控制结构的语法和C相比有所不同,它不需要圆括号,但语句体必须总是包含在大括号内。
 
2、控制结构语法
1)if-else
    (1)if后紧跟单个条件
    例如:if x > 0 {   //{必须和if在同一行,这是Go语法规定的,如果换行写,编译就会报错
                   return y
               } else {
                   return x
               }
    (2)if后接受初始化语句
     例如: m1:=7
                 if n1:=9; n1 >= m1 {
                        fmt.Print("n1 >= m1")
                  }
    (3)if后紧跟逻辑运算符
      例如:if true && true {
                       fmt.Println("true")
                 }
     if语句体中,语句体结束于break、continue、goto、return,这和其它语言没什么区别。
 
2)goto
    Go中支持goto语句,不过使用的时候要多加小心。
    例如:
     func gotodemo() (string){
        i := 0
    GoToHere:   //这是函数内定义的标签,注意,它是区分大小写的。
        if i >= 5 {
            return "OK"
        }
        fmt.Println(i)
        i++
        goto GoToHere  //goto跳转至函数定义的标签处
    }
 
3)for
    Go语言中,for控制结构的功能相对来说较为强大,它可以完成C语言中for的功能,也能完成while的功能,当然我并不知道这门语言的设计者为什么要改变我们在其它语言中的通用性的使用习惯,但我觉得我喜欢这种风格,少即是多,如果能通过一个关键字来实现多种效果,又何必多增加一个关键字呢?Google对Go语言的设计思路和其本身遵从“更少点=简单”的理念是一致的。
    for循环的三种形式:
    (1)for init ; condition ; post {}  //同C中的for
    (2)for condition {} //同while
    (3)for {} //死循环
 
4)break和continue
    break用来终止循环,continue用来终止当前循环
    例如:
    func breakdemo() {
        for i := 0; i < 10 ; i++ {
            if i > 5 {
                break //整个循环终止
            }
            fmt.Println(i)
        }
 
        Tag:for i := 0; i < 10 ; i++ {
            if i > 10 {
                break Tag //终止标签名为Tag的循环
            }
            fmt.Println(i)
        }
    }
    func continuedemo() {
        for i := 0; i < 10 ; i++ {
            if i == 2 {
                continue
                fmt.Println("after continue")  //不会执行
            }
            fmt.Println("continue")
        }
    }
 
5)range
range可以用于循环,range 是个迭代器,当被调用的时候,从它循环的内容中返回一个键值对,基于 不同的内容,range 返回不同的东西。
例如:
   func rangedemo() {
        list := [] string { "a", "b", "c" }
        for k, v := range list { //用 range 对其进行循环。每一个迭代,range 将返回 int 类型的序号,string 类型的值
            fmt.Print("k=")
            fmt.Println(k)
            fmt.Print("v=")
            fmt.Println(v)
        }
    }
打印:
k=0
v=a
k=1
v=b
k=2
v=c
当对 slice 或者 array 做循环时,range 返回序号作为键,这个序号对应的内容作为值。 上述循环中k值变化范围是0~2,v值的变化范围是"a"~"c"。
 
range还可以直接使用在字符串的遍历中,字符串被打散成独立的Unicode字符,例如:
        for pos,char := range "abcd" {
            fmt.Printf("character '%c' starts at byte position %d\n",char, pos)
        }
打印:
character 'a' starts at byte position 0
character 'b' starts at byte position 1
character 'c' starts at byte position 2
character 'd' starts at byte position 3
 
6)switch
Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找 到匹配项,而如果 switch 没有表达式,它会匹配 true 。
例如:
    func switchdemo() {
        len := 4
        switch len {
        case 0:
            println("len=0")
        case 1:
            println("len=1")
            fallthrough
        case 2:
            println("len=2")
        case 3,4:
            println("len=3 or len=4")
        default:
            println("default")
        }
    }
现在,我们来对switch中len的值来进行分析:
(1)假如len := 0,打印结果:len=0
(2)假如len := 1,打印结果:len=1 
                                               len=2
         为什么不满足的case 2,也会执行呢?这是因为我们使用了fallthrough关键字,它会强制case 2中的语句得以执行。
(3)假如len := 3或len := 4,打印结果len=3 or len=4,case中多个条件的判断使用","隔开,各个条件之间的关系是"OR"的关系。
(4)假如len不是0~4中任何一个值,那么就会执行default条件中的语句,打印出:default。
 
二、内建函数
 
在Go中提供了少数内建函数,它们可以在不用导入任何包的情形下使用,下图中列出了Go中的内建函数:
内建函数的用途简介:
close :用于 channel 通讯。使用它来关闭 channel。 
delete :用于在 map 中删除实例。 
len 和 cap :可用于不同的类型,len 用于返回字符串、slice 和数组的长度。
new :用于各种类型的内存分配。
make :用于内建类型(map、slice 和 channel)的内存分配。
copy :用于复制 slice。参阅本章的 “slice”。 
append :用于追加 slice。参阅本章的 “slice”。 
panic 和 recover :用于异常处理机制。
print 和 println :是底层打印函数,可以在不引入 fmt 包的情况下使用。它们主要用于调试。 
complex、real 和 imag :全部用于处理 复数。有了之前给的简单的例子,不用再进一步讨论复数了。

Go语言学习笔记(三) [控制结构、内建函数]的更多相关文章

  1. Go语言学习笔记三: 常量

    Go语言学习笔记三: 常量 定义常量 常量就是在声明后不能再修改的量. const x int = 100 const y string = "abc" const z = &qu ...

  2. 【GO】GO语言学习笔记三

    7.数组: 几乎是最常用的数据类型了... 数组就是指一系列同一类型数据 的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数 组的长度. 常规的数组声明方法: ...

  3. c语言学习笔记三

    第三章,函数 字符串函数 //strcmp int my_strcmp(char *str1,char *str2) {   while(*str1 = = *str2)   /*不可用while(* ...

  4. [C语言学习笔记三]格式化输出和输入

    使用 printf 函数来输出,使用 scanf 函数来输入 在 printf 函数中使用变量,需要使用占位符代替. int 型一般存储整数,使用 %d 代替 long long int 型一般存储长 ...

  5. JavaScript--基于对象的脚本语言学习笔记(三)

    事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv=&q ...

  6. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  7. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  8. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  9. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

随机推荐

  1. 二叉树/DFS总结

    二叉搜索树(Binary Search Tree,又名排序二叉树,二叉查找树,通常简写为BST)定义如下: 空树或是具有下列性质的二叉树: ()若左子树不空,则左子树上所有节点值均小于或等于它的根节点 ...

  2. DNS: Internet’s Directory

    关于DNS 互联网上几乎一切活动都以DNS请求开始.DNS(Domain Name System)是Internet的目录.访问URL时,设备所要做的第一件事就是询问目录,根据域名查出IP地址. 查询 ...

  3. 解决 Files 的值"<<<<<<< HEAD"无效。路径中具有非法字符

    通常我们使用版本控制后会出现诸如此类的问题,此时从vs工具找错误和调试是无法找到问题的,也不影响项目的运行,但是有错误就是得解决.原因是版本控制导致文件的路径出现问题. 解决 Files 的值&quo ...

  4. volatile的使用

    //资源(把 volatile去掉进行测试 )public class Demo { volatile int i =1;}//测试 public static void main(String[] ...

  5. robotframework 远程连接数据库问题

    今天在使用RF远程连接数据库时出现报错的问题,因为我发现只安装databaselibrary跟PyMsql的话,连接本地的数据库是OK的,但是如果我们的测试机性能有限,那么既要编写代码.运行测试.还有 ...

  6. EF学习笔记(十) 处理并发

    总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...

  7. 转 tomcat+nginx+redis实现均衡负载、session共享(二)

    http://www.cnblogs.com/zhrxidian/p/5491285.html http://www.cnblogs.com/zhrxidian/p/5432886.html

  8. 自动的输入号码的辅助软件在ie浏览器下的尝试

    在ie下面的自动输入号码的软件,我已经折腾了好久.由于ie环境非常复杂:网页延迟这个时间一直不能准确的得到,这个时间主要包括:网络的与服务器的交换速度,网页自身的加载速度,网页的js渲染的效果的影响. ...

  9. IntelliJ IDEA小问题通过操作软件解决

    Diamond types are not supported at this language level http://blog.csdn.net/qq_34884729/article/deta ...

  10. finalize方法的使用

    finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法.这个方法在gc启动,该对象被回收的时候被调用.其实gc可以回收大部分的对象(凡是new出来的对象,g ...