## 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
指針 指針不能運算
可用于交換兩個數值