go想解决的问题
- 多核硬件架构
- 超大规模分布式集群
- web模式导致的开发规模和更新速度
go的特点
- 简单
- 高效
- 高生产力
- 云计算语言
- 区块链语言
go与其它语言的区别
- 可以自动类型推断
a := 1
- 在一个赋值语句中,可以对多个变量同时赋值
a := 1
b := 2
a, b = b, a
- 不允许隐式类型转换
var a int32 = 3
var b int64 = int64(a)
- 别名和原有类型也不能进行隐式类型转换
type MathF int32
var a int32 = 3
var b MathF = MathF(a)
- 不支持指针运算
var a int = 2
var ptr = &a
//ptr = ptr+1 是非法运算
- string是值类型,默认值是空字符串,不是nil
var s string //s 为 “”
- 没有前置的++,- -
a := 1
a++
//++a 非法运算
- 相同维数,相同元素个数的数组才可以比较。每个元素都相同时才相等
a := [...]int{1, 2, 3}
b := [...]int{1, 2, 3}
c := [...]int{9}
res := (a == b) //res = true
// res:= (a == c) 非法运算
- 按位清零
1 &^ 0 // 1
1 &^ 1 // 0
0 &^ 1 // 0
0 &^ 0 // 0
- 仅支持循环关键字for
i := 0
for i < 5 {
fmt.Println(i)
i++
}
- if条件语句的条件表达式必须为布尔值,支持变量赋值
if i := rand.Intn(100); i > 60 {
fmt.Println("pass")
}
- switch语句条件表达式不限制为常量或整数;单个case中,可以出现多个结果选项,用逗号分隔;不需要用break退出case;
i := rand.Intn(4)
switch i {
case 0, 2:
fmt.Println("even")
case 1, 3:
fmt.Println("odd")
default:
fmt.Println("invalid")
}
可以不设定switch的条件表达式,此时相当于多个if…else…语句
i := rand.Intn(4)
switch {
case i%2 == 0:
fmt.Println("even")
case i%2 == 1:
fmt.Println("odd")
default:
fmt.Println("invalid")
}