Go 语言与其它语言的比较 | 青训营笔记

125 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

虽然没有多少称得上精通,但我学过的编程语言确实不少。其实在学过一定的编程语言后,新的语言就很容易掌握了,因为新的语言总有一些概念是之前的语言就有的,总有一些写法和之前的相似(实际上大多数语言都和 C 语言非常相似)。当然也有一些不同,这些相同和不同的组合,正是编程语言诞生的意义。

总结编程语言之间的共通点与差异,尤其是记住语言独特的地方,能够让学的知识难以忘记,同时也能让对编程语言应用场景的理解加深,经过一段时间的使用,我对 Go 语言也相当的熟悉,下面来总结 Go 语法上的特点。

控制流

控制流基本上是不同语言之间差别最小的地方,不过 Go 也体现了它的一些独特设计。

if 与 for

Go 语言控制流最大的区别是对应的关键字后面不像 C/C++、Java 等一样接着小括号,除此以外if、for 两个经典的语句在 Go 语言中没有什么不同。for 同时支持一般的 for 循环和 range for,不过要注意的是 Go 语言中简化去除了 while 语句。简单的例子如下。

if true {
    // true
} else {
    // false
}
for true  {  
    fmt.Println("Infinity Loop");  
}

switch

Go 语言的 swich 语句最大的特点是默认不会跳转到下一个标签,也就是说我们可以不用写 break ,如果想要跳转到下一个标签,则需要写上 fallthrough

switch {  
    case true:  
            fmt.Println("True")  
    case false:  
            fmt.Println("False")  
            fallthrough  
    default:  
            fmt.Println("Default")  
    }

面向对象

Go 语言并没有很推崇面向对象风格的写法。不过面向对象的编程方式仍在标准库中得到大量应用。强调面向对象编程的语言的“类”,在 Go 语言中可以使用结构体来替代。除此以外 Go 还支持了方法和接口两种常见的面向对象操作。

结构体

结构体并不支持继承之类的操作,它基本上只相当于几个已有数据结构的结合。Go 语言通过别名的方式为用户自定义的结构体命名。

type User struct {
   username string
   password string
}

方法

有了结构体,用户就可以为其创建方法——本质上来说方法就是第一个参数为方法对应类型的对象的特殊函数。

func (c User) getPassword() string {  
    return u.password
}

接口

Go 语言的接口的定义相当简单,只要一个类型实现了某个方法的相同函数,那么就视为它实现了这个接口。也就是说方法的实现是隐式的。

interface Stringer {
    String string
}

func (c User) String() string {
    return u.username
}

并发编程

并发编程相关的内容在我前面的文章 Go 语言中的并发 中已经有了详细介绍,这里不再赘述。基本上可以说 Go 语言的并发编程与其它语言完全不同。