日期: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. java注解的实质,何为注解

    注解就是贴标签 (1)注解的作用 1,生成文档.如常用的@param 2,跟踪代码依赖性,实现替代文件的功能.在spring中,主要是减少配置. 3,编译时进行格式检查.如常用的@override ( ...

  2. REdis命令处理流程处理分析

    分析版本:REdis-5.0.4. REdis命令处理流程可分解成三个独立的流程(不包括复制和持久化): 1) 接受连接请求流程: 2) 接收请求数据和处理请求流程,在这个过程并不会发送处理结果给Cl ...

  3. C#如何以管理员身份运行程序 转

    在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理员身份运行才会执行成功,否则无效果或提示错误. 比如在通过winform程序执行cmd命令时,某些情况 ...

  4. 乘法器的Verilog HDL实现(转载)

    原文地址:http://www.cnblogs.com/shengansong/archive/2011/05/23/2054401.html 1. 串行乘法器 两个N位二进制数x.y的乘积用简单的方 ...

  5. shell指令(一)

    ubuntu桌面窗口下进入shell窗口:Ctrl + Alt + F2~F6:  退出shell窗口:Ctrl + Alt + F7:从UI中进入UI命令窗口,Ctrl + Alt +T shell ...

  6. eclipse 工作区空格和回车键显示为乱码

    eclipse 工作区空格和回车键显示为乱码 解决方法:Windows => Preferences => General =>Editors =>Text Editor =& ...

  7. TCP/IP(八)之总结TCP/IP四层模型

    阅读目录(Content) 一.TCP/IP参考模型概述 1.1.TCP/IP参考模型的层次结构 二.TCP/IP四层功能概述 2.1.主机到网络层 2.2.网络互连层 2.3.传输层 2.3.应用层 ...

  8. 最大黑区域-DFS

    最大黑区域 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practic ...

  9. 【详记MySql问题大全集】二、安装并破解Navicat

    Navicat for MySql 11.1.13 企业版 下载地址: 链接:https://pan.baidu.com/s/1N3ZQXNyx-W8D4AsuZdsMug 密码:x0rd 第二个是N ...

  10. Python开发网站目录扫描器

    有人问为什么要去扫描网站目录:懂的人自然懂 这个Python脚本的特点: 1.基本完善 2.界面美观(只是画了个图案) 3.可选参数增加了线程数 4.User Agent细节处理 5.多线程显示进度 ...