go语言入门知识点

初步学习go语言,为GopherChina大会作准备

GO入门指南
GO语言圣经

day 1

  • 大神开发
  • google线上使用
  • C过时,早晚淘汰
  • C编译太慢,需要一门低级语言代替它
  • GO吸收了包括C和JAVA等在内的语言的优势
  • 自行解决内存问题
  • 统一自动格式化gofmt
  • 运行前编译
  • 效率比脚本需要高的多
  • 可以调用c语言中的方法
  • 关键字少,代码简洁
  • 语句不用分号结束,多个语句放在一行才要用分号
  • 其实编译时自行加上分号
  • 包的引入
  • 包的后缀pkg
  • go文件的后缀go
  • 编译后可执行文件的后缀a
  • 在第一行申明文件的pkg
  • 一个go文件只能属于一个pkg,一个pkg可以包含多个go文件
  • 有且必须要有有一个main包
  • 包的依赖关系影响编译的顺序
  • import 多个包时可以将多个包名放在数组中
  • 以大写字母打头的标识符类似public,以小写字母打头的标识符类似private
  • import 一个包不使用它会报错
  • go中没有不必要的代码
  • 和C一样有个main函数,入口执行函数
  • main包中没有main函数会报错
  • main函数没有参数和返回值,有就报错
  • 函数的开始花括号必须和函数申明在同一行,否则报错
  • 而函数的结束化括号必须紧接函数体
  • 上面两句总结成一句话:跟psr一样
  • 返回值列表在参数列表后面
  • 大写字母开头的方法名遵循Pascal命名法
  • 输出方法print,println
  • 程序正常结束返回0,程序异常终止返回1
  • 注释有通用的单行注释和多行注释
  • 注释可以通过godoc文档化
  • 方法的注释应该以方法名开头
  • 结构化类型的默认值是nil,跟Object-C一致
  • go没有类型继承
  • type关键字自定义类型
  • 函数可以有多个返回值,类似js,lua
  • 类型可以强制转换
  • const定义常量
  • 变量的类型可以不指定,会自动判断

day 2

  • $GOROOT是安装目录,$GOPATH是项目目录
  • iota用于常量定义,初始值为0,可以自增
  • go特有的:申明变量时将变量的类型放在变量名的右边
  • 可以根据变量的值推断变量的类型

day 3

  • 格式化输出时%v使用类型的默认输出格式
  • 与Printf相比,Sprintf会将格式化后的变量作为返回值
  • 变量初始化的三种形式

    1
    2
    3
    var a int = 30;//int 可省略,可自动识别
    var a = 30;
    a := 30;
  • :=的初始化方式只能用于方法体内