作为一门非常流行且受大家喜爱和欢迎的编程语言,Go语言和其它主流编程语言的不同,应该是初次接触这门语言的我和你最该了解的点!相信如果你已经熟练掌握了一门其他编程语言,比如C、PHP、Java等,之所以要学习Go语言,你也一定想知道它到底有“哪些不同的地方”,才来学习,如果一样,那还学它干什么呢?
这一篇,就为大家总结一下Go语言和其他主流编程语言的异同之处!
一、变量和常量相关
- 赋值可以进行自动类型推断
- 在一个赋值语句中可以对多个变量进行赋值 a,b = b ,a(其他语言需要借助中间临时变量)
- 常量可以使用iota 简洁写法,如1 << itoa(位运算)
- 不允许隐式类型转换(无论从大到小还是从小到大都不支持),只能够进行显式的类型转换
- 别名和原有类型也不能进行隐式类型转换,只能够进行显式的类型转换
- 类型的预定义值 math包中有
- 不支持指针运算
- string是值类型,其默认的初始化值是空字符串,而不是nil
var t string
//len of t is :0
fmt.Print("len of t is :", len(t))
if v, ok := m["three"]; ok {
t.Log("three value is:", v)
} else {
t.Log("Key not existing")
}
二、运算符相关
- Go语言没有前置的++,--(++a就是错误的写法)
- 用 == 比较数组时:如果是维数相同,比较每一个元素都相等,两个数组才相等
a := [...]int{1,2,3,4}
b := [...]{1,3,4,5}
c := [...]{1,2,3,4,5}
d := [...]{1,2,3,4}
fmt.Print("compare array result:", a == b , b == c, a == d)
//下面的比较会编译报错,因为a和c长度不同
fmt.Print("compare array result:", a == c)
1 &^ 0 -- 1
1 &^ 1 -- 0
0 &^ 1 -- 0
0 &^ 0 -- 0
const (
Readable = 1 << iota
Writable
Executable
)
//把可读为置为0
func main() {
//0111
a := 7
//change to not readable:false
fmt.Print("change to not readable:", a&^Readable == Readable)
}
三、条件控制相关
- Go语言仅支持循环关键字for,且不需要括号
- if条件表达式结果必须为布尔值,表达式中支持变量赋值
if a:= 1==1 ; a {
fmt.Println("1==1")
}
if v, err := someFunc() ; err == nil {
fmt.Println("1==1")
}else {
//some code else
}
for i:=0 ; i < 5; i++ {
switch i {
case 0, 2:
fmt.Println("Even")
case 1, 3:
fmt.Println("Odd")
default:
fmt.Println("it is not 0~3")
}
for i:=0 ; i < 5; i++ {
switch {
case i%2 == 0 :
fmt.Println("Even")
case i%2 == 1:
fmt.Println("Odd")
default:
fmt.Println("it is not 0~3")
}
* 本页内容参考以下数据源:
- 《Go语言从入门到实战:简明高效的Go语言实战指南》蔡超老师 05、06节