Keyword

交叉编译:在一个平台上编译其他平台的可执行文件 静态编译:运行速度快,编译速度慢,可执行文件大 测试驱动 语法强调少即是多 天然支持并发 Duck模型的非侵入式接口:事实上实现了接口的功能,不必声明,便可以认为是接口的实现。Duck模型的非侵入式接口,具体类型不需要显示声明自己实现某个接口,判断类型是否实现接口完全交给编译器处理,侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的结合,可读性更好。非侵入式的代码则没有过多的依赖,更灵活,可以很方便的迁移到其他地方。代码可读性比较差

常用命令

  • help :显示所有的 go 命令以及相应命令功能简介
  • build: 编译包和依赖 (提交阶段,打包)
  • run: 编译并运行go程序 (开发阶段,调试)
  • get: 下载并安装第三方包和依赖
  • test: 运行测试(测试驱动)
  • fmt: 格式化代码
  • doc: 显示包或者符号的文档
  • version:查看当前go语言版本号

    基本测试

  • 测试用例需要在一个名为 xxx_test.go 的文件中编写(与被测试文件同一个包)
  • 测试用例文件不会参与正常源码编译,不会被包含到可执行文件中
  • 测试函数的命名必须以单词 Test 开始
  • 测试函数只接受一个参数 t *testing.T
  • 测试用例使用go test指令来执行,无须main() 函数入口。以Test开头的函数会自动被执行。
  • go test   
  • go test -v  //显示测试的详细信息

基准测试

  • 获得代码内存占用和运行效率的性能数据
  • 测试函数的命名必须以单词 Benchmark 开始
  • go test -bench=.
  • go test -bench=.   -benchmem //查看内存

    Problems

    1.入口文件与入口函数

可执行程序的入口文件必须是package main,并且有入口函数main

2.命名法

  • 大写开头的函数被认为是可导出的,只有这些函数可以被其他文件使用
  • Getter方法的名称不要用Getter。而是用字段的首字母大写,比如说owner字段的Getter就叫Owner()

    3.分号

go在词法分析器里加入了分号的优化,不用手动写优化,事实上只有在循环或判断结构的子句中使用分号,并且,这些控制语句中大括号不能另起一行

4.空值

http://c.biancheng.net/view/4776.html

5.类型判断小技巧

fmt.printf("%T",temp)