学好Go的注意事项

每个语言都有自己的一些强制规定,只有有些语言规定的少一些,有些语言规定的多一些。有些语言的规定并不会那么强硬,有些语言却非常强硬。比如Python就强制使用空格或者tab来框出代码段,而相反C语言虽然约定用{}来框出代码段,但是并不强制你是怎么写的:

  1. f1(){int i=3;intj=5;}
  2. f2()
  3. {
  4. int i=3;
  5. intj=5;
  6. }
  7. f3(){
  8. int i=3;
  9. intj=5;
  10. }

在C中以上三种写法都能够编译过去,但是在GO中只有第三种可以编译过去,这个就是GO语言的强制规定。C和java习惯了{另起一行的一定注意,要不然一开始写代码编译不过去就会不知所措。

Go语法规范点

  1. {必须在行尾,必须在行尾,必须在行尾(重要的事情说三遍)
  2. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Run,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像java里面的public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像java中的 private )。
  3. import,如果你引入多个写成下面的形式
    1. import{
    2. "os"
    3. "fmt"
    4. _ "github.com/go-sql-driver/mysql"
    5. )
    注意其中第三行,_的作用是引入这个包只使用它的初始化函数,而不需要使用这个代码包中的任何其他部分。

    如果你导入了一个包却没有使用它,则会在构建程序时引发错误,如 imported and not used: os,这正是遵循了 Go 的格言:”没有不必要的代码!”。

4.Go在不使用结构的情况下,可以一次返回多个值。多个返回值如果有error返回,这个返回值必须是最后一个

5.变量定义。Go和很多语言都不同,它在声明变量时将变量的类型放在变量的名称之后。var i int
也可以使用:=来定义变量,比如:i:=1。Go的变量是属于强关系型的,一旦定义了类型就不能够变。

6.空标识符的使用。GO语言里面用_表示空标识符。这个符号的作用是,把一个返回结果返回给一个变量,但是这个变量有不需要被使用的时候,我们往往使用`_

  1. sessUsername, _ := this.GetSession("editor_username").(string)

这段代码就是返回的error,我们不做处理。
还有一种情况会使用,那就是我们在开发中京城碰到的情况,我们写了一个函数F1(),在测试的时候那个返回值可能还没有用到,这个时候写成

  1. f:=F1()

编译的时候会返回,f为使用的错误,这个时候可以写成这样

  1. _=F1()

7.主函数main必须属于package main

8.Go的时间处理,先看代码

  1. // @Param beginDay string 起始日期
  2. // @Return result int 返回日期差值
  3. // 这个函数的作用是为了返回两个日期之间的差值。
  4. // 比如: DaydiffNow("2015-11-01") 返回与当前日期的差值
  5. func DaydiffNow(beginDay string) int {
  6. begin, _ := time.Parse("2006-01-02 15:04:05", beginDay+" 00:00:00")
  7. diff := time.Now().Unix() - begin.Unix()
  8. return int(diff / (24 * 60 * 60))
  9. }

2006-01-02 15:04:05这个绝对是个奇葩写法,据说是Go的诞生时间。

这个字符串的记忆方式是6-1-2-3(下午15点)-4-5 (也有种说法是:2006是go语言在google内部谋划的日子,后面依次是1、2、15(3)、4、5的顺序表示。)

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func main() {
  7. fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
  8. }

这个是格式化显示当前时间,”2016-05-30 16:14:48”

9.尽量不要在程序里面包含panic。

如何学好GO

  1. 经常浏览Go的官方网站http://golang.org,不过要看这个网站居然要翻墙。如果在墙内可以多上一下GO lang中国http://golangtc.com/
  2. 多浏览代码包文档网站http://godoc.org,可以找到更多的语言支持包。
  3. 有问题去http://stackoverflow.com/请教。请教问题是有技巧的,这个技巧请阅读这个文章-《提问的智慧》https://github.com/FredWe/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
  4. 也可以去关注我写的书《驾驭Go—语言基础与网络开发》https://github.com/sunnygocms/gobook