Golang的优势和常见使用误区|青训营笔记

165 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

Golang是近年来非常火热的编程语言。许多科技大厂如字节跳动,谷歌,IBM等均有以Golang为基础的项目开发。可以说近期是挑战了Python,Java,C++三巨头的地位。相较之下它有什么优势呢?

Golang的优势:

  1. 执行效率。很多人将Golang和C++放在一起做比较,是因为他们都是编译型语言,据说本身Google的工作人员设计它也是为了替代C++的工作。由此可知,它的执行效率肯定不低,与C++相近。相比之下,同样语法简洁的Python由于效率较低,很多项目被字节跳动换成了Golang。
  2. 语法简单。C++本身开发效率比较低,因为语法相对复杂,Python一行能解决的问题,C++需要十行甚至一百行。个人感觉Golang的很多语法近似Python,除了大括号要加上以外,代码的清晰整洁程度看起来区别不大。
  3. 标准库丰富,工具链完善。作为2009年出现的编程语言,经过Google以及一众大厂长时间的维护和开发,Golang有很多包能满足各种各样的要求。
  4. 高并发。这是Golang特别bug的一点,它可以很轻易完成高并发的请求,这也是它如此适合作为服务端代码的原因之一。
  5. Golang存在指针操作,自由度更高。

Golang常见使用误区:

  1. 不是字段表示属性的可见性,而是通过属性首字母大小写来定义该属性可见性。以下代码块中,Firstname是public的,age是protected的。
type Student struct {
    Firstname string
    age       int
}
  1. Golang中的多态效果不明显。子类继承父类之后,不能作为父类类型的参数传入函数。但是继承接口后,可以作为父接口类型的参数传入。
type A struct {
    value int
}
type B struct {
    A
}

type C interface {
    Method string
}
type D struct {}
func (c C) Method() string {
    return "This is D"
}

func runA(A a) {} // 不可以将B对象作为参数传入
func runC(C c) {} // 可以将D对象作为参数传入
  1. 左打括号无法单独作为一行,必须在函数体/结构名后面 (待补充)