和其它主流语言的不同

* 本页面重点总结Go语言和其它主流编程语言的不同。

作为一门非常流行且受大家喜爱和欢迎的编程语言,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))
  • Map元素访问的key不存在时,仍会返回零值,不能通过返回的nil来判断元素是否存在,只能通过返回的布尔值判断
  • 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 &^ 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
    }
  • switch条件:条件表达式不限制为常量或者整数
  • switch条件:单个case中,可以出现多个结果选项,使用逗号分隔(代表命中其中任何一个都符合条件)
  • 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")
      }
  • switch条件:与C语言等规则相反,Go语言不需要用break来明确退出一个case
  • switch条件:可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if……else……的逻辑作用相同
  • 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节

凯冰科技 · 代码改变世界,技术改变生活
下一节:最新发行版Go1.16 →