go 学习
命名规范
- 对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头。
- 包命名尽量与目录保持一致,且应全部为小写
- 文件命名应为小写,并用下划线分割
包引入
待完善
import ( |
使用import引入包,处于gomodule下时包可以放在非GOPATH路径下,而处于gopath模式下时项目包必须放到GOPATH路径下。
详细可参考浅谈GoPath和Go Modules包管理
GO类型说明
与其他类C语言不同,Go语言的类型声明符号放到名字的后面了:
如以下C语法:
int a; |
在Go语言中是这样的:
var a int |
官方解释称放到后面是为了在复杂情况时更易读:Go’s Declaration Syntax
多值返回
go语言支持类似Python的函数多值返回如下:
package main |
返回值命名
go语言可给返回值命名,这样就可以隐式的返回变量:
|
变量声明
go 使用var
关键字来声明关键词,如var c=2 int
相同类型变量可以简写如var a,b,c=1,2,"hello"
上面的代码会自动识别abc的类型。
在函数体内部
可用k := 3
替换类型明确的var声明
GO类型
Go 内置了以下基本类型:
- 布尔
- bool
- 字符串
- string
- 整数
- int
- int8
- int16
- int32
- int64
- uint
- uint8
- uint16
- uint32
- uint64
- 字节
- byte ,uint8 的别名
- Unicode
- rune ,int32 的别名
- 浮点
- float32
- float64
- 复数
- complex64
- complex128
零值
- 数值类型为 0
- 布尔类型为 false
- 字符串为 “”(空字符串)
类型转化
var f float64 = math.Sqrt(float64(x*x + y*y)) |
与C不同的是,go不能自动转换,如删除上面的uint,会导致报错
类型推导
当右值声明了类型时,新变量的类型与其相同:
var i int |
不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int, float64 或 complex128 了,这取决于常量的精度:
i := 42 // int |
常量
使用const关键字声明如const Pi=3.14
也可以同时声明多个:
const ( |
循环
go仅有for一种循环,与C语言类似,没有小括号,初始语句与后置语句是可省略的(这样就当做while循环来使用了甚至可以省略掉前后的分号
)
for i := 0; i < 10; i++ { |
选择结构
if语句
if语句同样不需要加括号,但相比c语言,go支持在条件表达式执行前执行一个简单的语句如下:
if v := math.Pow(x, n); v < lim { |
注意else if
和else
必须放到}
的同一行
case语句
switch os := runtime.GOOS; os { |
还可以使用没有条件的case语句可以使得多条件更简洁清晰:
switch { |
defer 语句
defer语句可以让函数调用推迟到整个函数返回后再执行
如:
package main |
所以推迟的函数调用会被放入一个栈中,当函数返回时,按照后进先出顺序依次调用。
package main |