这是我参与「第五届青训营 」伴学笔记创作活动的第 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 语言的并发编程与其它语言完全不同。