整备¶
如果真心没有学习过 Go ,抄过了 Hollo World 也许没法儿继续了,,,
- 不过,其实, Go 真心好学习,最多两小时,就可以完成各种常见任务了,,,
- 但是...
前题!¶
有前题的吼!
- 至少有过 C/C++/C# 什么的任何一种编译型语言的体验
- 又或是,至少有任何一种开发语言的经验,明白计算机程序的基本元素
- 这样才好快速复用起以往的经验
See also
教程推荐
三天包会 Go 由创始人 Rob Pike 主持的课程:
《学习Go语言》中文版 ~ 刚刚在120428 释放的最新版本!
Go 中国达人 Fango 的精彩翻译
- 胡文 Go.ogle ~ 最快乐的 Go 体验小说
- Go导读/效率手册/规范 三合一
Go 精粹¶
/*
多行
注释
*/
package main // 每个文件,必须声明为包
import ( // 统一在头部邮件 各种包的加载
"os"
"flag" // 单行注释
)
var omitNewline = flag.Bool("n", false, "don't print final newline")
/* 变量的声明,以下都是合法的 ;-)
var s string = ""
var s = ""
s := ""
常量可以是:
var a uint64 = 0 // a的类型为uint64,值为0
a := uint64(0) // 与以上相同;使用了一次“转换”
i := 0x1234 // i获得了默认的类型:int
var j int = 1e6 // 合法的 - 1000000是一个int
x := 1.5 // float64类型,这是浮点常量的默认类型
i3div2 := 3/2 // 整数除法 - 结果是1
f3div2 := 3./2. // 浮点数除法 - 结果是1.5
*/
const ( // 容器 ;-)
Space = " "
Newline = "\n"
)
func main() { // { 必须跟在行尾,单起一行,将编译不过!-)
flag.Parse() // Scans the arg list and sets up flags
var s string = ""
for i := 0; i < flag.NArg(); i++ {
// for 是唯一的循环形式,也是唯一可能出现 ; 的语句
if i > 0 {
s += Space
}
s += flag.Arg(i)
}
if !*omitNewline {
s += Newline
}
os.Stdout.WriteString(s)
}
另外, 参考 QCon2012北京的講演: go,互联网时代的c语言 许式伟 可以了解各种 Go 的核心特性;
就笔者的体验,最爽直的有一点就是 Go 的形式非常人性!
- 参考: 螺旋形(C/C++)和顺序(Go)的声明语法 « Yi Wang’s Tech Notes
- C/C++ 的代码形式,进行各种声明时,词的顺序和意义是大幅度扭曲的:
+--------------------+
| +---+ |
| |+-+| |
| |^ || |
char *(*fp)( int, float *);
^ ^ ^ || |
| | +--+| |
| +-----+ |
+------------------------+
- 读作:
- fp是一个指针,
- 指向一个函数(螺旋路径被fp右边的括号封死,绕到左边的`*`)
- 有一个整形和一个浮点指针参数(两个参数一起读因为他们被一个括号括起来了)
- 并返回一个指针,指向一个字符
何其蛋痛!!! ~ 这才回想起当年,为毛使用 Turbo C++ 时,永远的挫败感了...
对等的 Go 声明就有爱的多...
f func(func(int,int) int, int) func(int, int) int
- 读作:
- f是一个函数
- 他的参数包括一个函数(有两个整数参数并返回一个整数),和一个整数,
- 并且返回一个函数,他有两个整数参数并返回一个整数
这样,思想和书写统一,少了很多转化,舒服很多 ;-)