学好Go的注意事项
每个语言都有自己的一些强制规定,只有有些语言规定的少一些,有些语言规定的多一些。有些语言的规定并不会那么强硬,有些语言却非常强硬。比如Python就强制使用空格或者tab来框出代码段,而相反C语言虽然约定用{}来框出代码段,但是并不强制你是怎么写的:
f1(){int i=3;intj=5;}
f2()
{
int i=3;
intj=5;
}
f3(){
int i=3;
intj=5;
}
在C中以上三种写法都能够编译过去,但是在GO中只有第三种可以编译过去,这个就是GO语言的强制规定。C和java习惯了{另起一行的一定注意,要不然一开始写代码编译不过去就会不知所措。
Go语法规范点
- {必须在行尾,必须在行尾,必须在行尾(重要的事情说三遍)
- 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Run,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像java里面的public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像java中的 private )。
- import,如果你引入多个写成下面的形式
注意其中第三行,import{
"os"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
_
的作用是引入这个包只使用它的初始化函数,而不需要使用这个代码包中的任何其他部分。
如果你导入了一个包却没有使用它,则会在构建程序时引发错误,如 imported and not used: os,这正是遵循了 Go 的格言:”没有不必要的代码!”。
4.Go在不使用结构的情况下,可以一次返回多个值。多个返回值如果有error返回,这个返回值必须是最后一个。
5.变量定义。Go和很多语言都不同,它在声明变量时将变量的类型放在变量的名称之后。var i int
也可以使用:=来定义变量,比如:i:=1。Go的变量是属于强关系型的,一旦定义了类型就不能够变。
6.空标识符的使用。GO语言里面用_
表示空标识符。这个符号的作用是,把一个返回结果返回给一个变量,但是这个变量有不需要被使用的时候,我们往往使用`_
。
sessUsername, _ := this.GetSession("editor_username").(string)
这段代码就是返回的error,我们不做处理。
还有一种情况会使用,那就是我们在开发中京城碰到的情况,我们写了一个函数F1(),在测试的时候那个返回值可能还没有用到,这个时候写成
f:=F1()
编译的时候会返回,f为使用的错误,这个时候可以写成这样
_=F1()
7.主函数main必须属于package main
8.Go的时间处理,先看代码
// @Param beginDay string 起始日期
// @Return result int 返回日期差值
// 这个函数的作用是为了返回两个日期之间的差值。
// 比如: DaydiffNow("2015-11-01") 返回与当前日期的差值
func DaydiffNow(beginDay string) int {
begin, _ := time.Parse("2006-01-02 15:04:05", beginDay+" 00:00:00")
diff := time.Now().Unix() - begin.Unix()
return int(diff / (24 * 60 * 60))
}
2006-01-02 15:04:05这个绝对是个奇葩写法,据说是Go的诞生时间。
这个字符串的记忆方式是6-1-2-3(下午15点)-4-5 (也有种说法是:2006是go语言在google内部谋划的日子,后面依次是1、2、15(3)、4、5的顺序表示。)
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}
这个是格式化显示当前时间,”2016-05-30 16:14:48”
9.尽量不要在程序里面包含panic。
如何学好GO
- 经常浏览Go的官方网站http://golang.org,不过要看这个网站居然要翻墙。如果在墙内可以多上一下GO lang中国http://golangtc.com/
- 多浏览代码包文档网站http://godoc.org,可以找到更多的语言支持包。
- 有问题去http://stackoverflow.com/请教。请教问题是有技巧的,这个技巧请阅读这个文章-《提问的智慧》https://github.com/FredWe/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
- 也可以去关注我写的书《驾驭Go—语言基础与网络开发》https://github.com/sunnygocms/gobook