go基础知识
Go Mac默认安装目录 /usr/local/go/
Go是一个高效、静态类型, 但是又具有解释语言的动态类型特征的系统级语法。
Go是一个开源项目,采用BSD授权协议。
mark-and-sweep 垃圾内存自动回收
需要安装Mercurial版本管理系统(可以输出hg名字检测是否安装)
sudo easy_install mercurial
以下命令会创建一个go目录。切换到相应目录,并且确保当前位置不存在go目录,运行命令:
$ hg clone -r release https://go.googlecode.com/hg/ go
Go 语言最主要的特性:
- go可以快速编译, 同时具有垃圾内存自动回收功能,并且还支持运行时反射。
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
Print 和 Println 打印输出 跟C 类似
需要指定包名 package main
导入函数 import “fmt”
开始写函数 func main(){ fmt.PrintIn(‘输出:自动添加\n 换行符’); }
func main(){ fmt.Print(‘输出:手动添加\n 换行符\n’); } //与上面的形式一样
$ go run hello.go 执行go脚本
$ go build hello.go 命令来生成二进制文件
注意
需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:
下面的例子是Unix系统中"echo"命令的简单实现:
s := ""; 操作符":="将在Go中声明同时进行初始化一个变量时会经常使用。下面的代码是在"for"中声明并 初始化变量:
22 for i := 0; i < flag.NArg(); i++ {
"flag"包会解析命令行参数,并将不是flag选项的参数保存到一个列表中。可以通过flag的参数列表 访问普通的命令行参数。
Go语言的"for"语句和C语言中有几个不同的地方:第一,for是Go中唯一的循环语句,Go中没有while或 do语句;第二,for的条件语句并不需要用小括号包起来,但是循环体却必须要花括弧,这个规则同样适用于 if和switch。后面我们会看到for的一些例子。
在循环体中,通过"+="操作符向字符串"s"添加要命令行参数和空白。在循环结束后,根据命令行是否有"-n"选项, 判断末尾是否要添加换行符。最后输出结果。
值得注意的地方是"main.main"函数并没有返回值(函数被定义为没有返回值的类型)。如果"main.main" 运行到了末尾,就表示“成功”。如果想返回一个出错信息,可用系统调用强制退出:
os.Exit(1)
"os"包还包含了其它的许多启动相关的功能,例如"os.Args"是"flag"包的一部分(用来获取命令行输入)。
Go语言中有一些通用的类型,例如"int"和"float",它们对应的内存大小和处理器类型相关。同时, 也包含了许多固定大小的类型,例如"int8"和"float64",还有无符号类型"uint"和"uint32"等。 需要注意的是,即使"int"和"int32"占有同样的内存大小,但并不是同一种数据类型。不过 "byte"和"uint8"对应是相同的数据类型,它们是字符串中字符类型。