Watermoe

1. 定义变量
var 尽量能不用就不用 用 := 定义
:= 只能在函数内使用,包外面不能使用
在函数体内的变量是有作用域的
在函数外定义的变量为包的变量
多个定义变量可用

var (a=1,b=true,c="2")

2. 内建类型

* bool, string (布尔类型,字符串类型)
* (u)int, (u)int8, (u)int16,(u)int32,(u)int64, uintptr(指针) 带面表示无符号类型
* byte , rune (字节 8位, 字符型 rune 32字节)
* float32, float64, complex64, complex128 (complex -> 复数类型?)
3 类型转换

a,b := 3,4
    var c int
    c = int(math.Sqrt(float64(a*a+b*b)))
4 .常量与枚举

常量使用const关键字定义,也可以定义在包内,括号包括,指定类型
枚举类型常量
iota 自增枚举关键字
<< 每一次移动都表示“乘以 2” 。
>> 每一次移动都表示“除以 2”。
const (
cpp = 0
java=1
php=2
python=3
golang=4
)
5.条件语句
>>
if v > 100 {
return 0
}else{
return 1
}

if a,b=1,2; a>2{
return 0
}else{
return 1
}
if判断不需要括号
>>
switch 可以不用条件直接在case里判断
switch op {
    case "+":
        result = a + b
    case "-":
        result = a - b
    case "*":
        result = a * b
    case "/":
        result = a / b
    default:
        panic(fmt.Sprintf("Wraning op : %d", op))

    }
*panic 会中断程序的执行
6 循环

for 循环
sum :=0
for i:=0; i<100; i++ {
sum+=i
}
同理 也不用括号,但条件结束用分号
什么都不加就是死循环


7. 函数
跟定义变量一样 名称在前,类型在后 参数括号外是的类型是返回类型
func eval (a int, b int, op string) int{

}
不能定义命名重复的方法
go也可以返回多个值,如下代码 推荐使用此方法

func div(a, b int) (int, int){
    return a/b , a % b
}

返回的值可以命名 如: 结构体一长很难分清楚
func div(a, b int) (q, r int){
    q = a / b
r = a % b
return
}

在另一方法接收需要用变量接收如上面的div函数和switch的函数
//接收
q, r := div(13, 3)
但是switch函数只返回一个值,需要用 _ 方法接收没用到的变量
q, _ := div(13, 3)
return q
多返回值不要多用,仅用于非常简单的函数,一般用于返回错误
nil 代表空
函数可作为参数