## 2-1 内建变量类型
>bool, string
u(int) u(int8) u(int16) u(int32) u(int64) uintptr
byte,rune rune是int32位的
float32,float64,complex64(实部和虚部都是32),complex128(实部和虚部都是64位)
## 2-2强制类型转换
>var a,b int=3,4
var c int =math.Sqrt(a*a+b*b) ❌
var c int=int(math.Sqrt(float64(a*a+b*b))) ✔
## 2-3常量和枚举
### const 定义常量
常量的数值可以做任何类型
>const a,b=3,4
const(
a,b=3,4
)
### 定义枚举
没有关键字来定义枚举类型
#### 普通枚举类型
>const(
CPP=iota
_
PHP
PYTHON
)
#### 自增值的枚举类型
const (
b=1<<(10*iota)
kb
mb
gb
tb
pb
)
## 2-4 条件语句
>switch 会自动break
如下例子会执行fallthrough下一条语句而不会判断条件:
~~~go
const file="f"
switch file {
case "f":
fmt.Println("ff\n")
fallthrough
case "g":
fmt.Println("fffdg\n")
default:
fmt.Println("default\n")
}
~~~
## 2-5 循环
for 省略初始条件相当于其他语言的while
整数转化为二进制
~~~go
func convertToBin(n int)string {
result:=""
for ;n>0 ;n/=2 {
lsb:=n%2
//fmt.Printf("%v\n",n)
result=strconv.Itoa(lsb)+result
//fmt.Printf("%v\n",result)
}
return result
}
~~~
## 2-6 函数定义
func eval(a,b int op string) int{
}
func apply(op func(int,int)int,a,b int) int{
fmt.printf("ff",runtime.FuncForPC(reflect.valueof(op).Pointer.Name(),a,b)
return op(a,b)
}
>匿名函数
func main(){
fmt.println(apply(func(a,b int)int{return int(math.Pow(float32(a),float32(b)))},3,4)
}
可变参数列表
func sumArgs(values ...int) int{
sum:=0
for i:=range values{
sum+=values[i]
}
return sum
}
>函数的语法要点总结
返回值类型可以写在最后面
可返回多个值
函数可以作为参数
没有默认参数,可选参数,只有一个可变参数列表
## 2-7
指针 指针不能运算
可用于交换两个数值