Go语言学习札记——第三章 Go基本的程序设计结构(1)

第三章    Go基本的程序设计结构

Go是一个新的语言。虽然它从其他语言中借鉴了一些特性,但是Go语言的编程方式和其他是有本质却别的。如果只是简单的将C++Java等代码翻译为Go代码是不可能得到最优的Go代码的。java程序员用java的思维方式编程,并不是Go的思维方式。如果采用go的思维方式,一个问题可能有完全不同的解决方法。因此,如果要真正的用好Go语言,理解它的语言特性和设计思想是 很重要的。另外,还要知道Go语言的变成风格,例如命名方式、格式化、程序结构等等,采用通用的方式也便于和其他的Go程序员交流。

接下来我们将逐步地学习Go语言,这一章先介绍Go语言基本的程序设计知识包括:语法、变量的声明、注释、控制流程等相关知识。

3.1一个简单的Go应用程序

下面看一个最简单的Go应用程序,它对一个含有5个数字的数组进行求和:

程序虽然很小,但是包含了go语言的更多特性。每个Go源文件开头都有一个"package"声明语句,指明源文件所在的包。同时,我们也可以根据具体的需要来选择导入(import语句)特定功能的包。在这个例子中,我们通过导入“fmt”包来使用我们熟悉的printf函数。 不过在Go语言中,Printf函数的是大写字母开头,并且以fmt包名作为前缀:fmt.Printf

关键字“func”用于定义函数。关键字“var用于声明变量。“len函数是内置函数,用于求数组或字符串的长度。在所有初始化完成后,程序从main包中的main函数开始执行。

常量字符串可以包含Unicode字符,采用UTF-8编码。实际上,所有的Go语言源文件都采用UTF-8编码。

变量声明语法如下:

        var s string = "";

这里有一个"var"关键字,后面跟着变量名字和变量的数据类型,再后面可以用符号来进行赋初值。

简洁是Go的一个目标,变量的定义也有更简略的语法。Go可以根据初始值来判断变量的类型, 没有必要显式写出数据类型。也可以这样定义变量:

        var s = "";

还有更短的写法:

        s := "";

操作符":="将在Go中声明同时进行初始化一个变量时会经常使用。下面的代码是在"for"中声明并初始化变量:

for i := 0; i < len(a); i++ {

Go语言的"for"语句和C语言中有几个不同的地方:第一,forGo中唯一的循环语句,Go中没有while do语句;第二,for的条件语句并不需要用小括号包起来,但是循环体却必须要花括弧,这个规则同样适用于 ifswitch。后面我们会看到for的一些例子。

在循环体中,通过"+="操作符向字符串"s"添加要命令行参数和空白。在循环结束后,根据命令行是否有"-n"选项,判断末尾是否要添加换行符。最后输出结果。

值得注意的地方是"main.main"函数并没有返回值(函数被定义为没有返回值的类型)。如果"main.main" 运行到了末尾,就表示成功。如果想返回一个出错信息,可用系统调用强制退出:

        os.Exit(1)

"os"包还包含了其它的许多启动相关的功能,例如"os.Args""flag"包的一部分(用来获取命令行输入)

代码注释的方式和C++类似:

    /* ... */  块注释
        // ...    
行注释

3.2分号

比较细心的读者可能发现前面的代码中行结尾处基本没有出现分号“;”。其实在Go语言中,只有在分隔 for循环的初始化语句时才经常用到;但是代码段末尾的分号一般都是省略的。

当然,你也可以像CJAVA中那样使用分号。不过在大多数情况下,一个完整语句末尾的分号 都是有go编译器自动添加的——用户不需要输入每个分号。

Go是采用语法解析器自动在每行末增加分号,所有你在写代码的 时候可以把分号缩略。

这个规则是: 如果一个标记(token)的前一行是标识符(identifier)(就像"int" "float64"), 比如: 数字,一个字符串或一个标记.

break continue fallthrough return ++ -- ) }

那么语法解析器就会在标记的后面插入分号,也就是说"在标记的后面是个换行,这说明可能是语句的结束,就增加一个分号"

在右括号之前可以省略分号,比如:

go func() { for { dst <- <-src } }()

关于分号的详细描述,可以查看Go语言说明文档。不过在实际写代码时,只需要记得一行末尾的分号 可以省略就可以了(对于一行写多个语句的,可以用分号隔开)。还有一个额外的好处是:在退出 大括号包围的子区域时,分号也是可以省略的。

在一些特殊情况下,甚至可以写出没有任何分号的代码。不过有一个重要的地方:对于"if" 后面有大括弧的语句,需要将左大括弧放在"if"语句的同一行,如果不这样的话可能出现编译错误。 Go语言强制使用将开始大括弧放在同一行末尾的编码风格。

例如:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值