Go入门教程之Go是否值得学习

235 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

前言

看完本篇,我们将学习到

  1. Go是否值得学习
  2. Go有哪些特性
  3. Go有哪应用场景
  4. 如何安装Go

为什么是Go?

在有了如C、C++、Java、Python等众多语言,为什么还需要Go呢?我们知道每个语言的出现都是为了解决某些痛点,那Go是为了解决什么呢?我们都知道摩尔定律,这些年 多核计算机的普遍化,我们也能感受到计算机性能的快速提升。而我们现在使用的大多数语言都是在单核时代中设计的,无法很好的适应多核时代。多核时代主要需要解决的并发问题,所以语言的好坏就是看如何解决下面两个问题:

  1. 如何提供多线程,以便更好的扩展到多核处理器
  2. 如何解决多线程的通信

Go通过支持语言级别的用户空间线程,即协程(轻量级线程)来解决第一个问题,然后通过消息传递模型来解决第二个问题,防止对数据的争用,也能让数据进行并发处理,更好的利用多核处理器,提高CPU的使用率。

Go的核心特性

  • 自动垃圾回收
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型系统
  • 并发编程
  • 反射

自动垃圾回收

垃圾收集器会在适当的时候对之前分配的不再使用的内存进行回收。我们无需过多的考虑内存管理问题

函数多返回值

Go支持函数有多个返回值,比如我们想同时计算两个数的和和乘积,可以这么写

func SumAndProduct(a, b int)(int, int) {
  return a + b, a * b
}

错误处理

未采用传统的try-catch异常捕获机制来进行异常处理,而使用defer关键字用于错误处理流程,并通过内置函数panic、recover完成对异常的抛出和捕获

匿名函数和闭包

在Go中函数作为一等公民,函数可以作为值类型,可以作为变量值和参数传递,支持常规的匿名函数和闭包

f := func(a, b int) int {
  return a + b
}

类型系统

没有非常复杂的类型系统,不支持继承和重载,只支持最基本的类型组合功能,并且采用"非侵入式"的接口概念,即接口和类型没有紧密的绑定在一起,修改接口并不会影响实现该接口的类型。

并发编程

引入协程,并通过消息传递进行通信,使得并发编程更加简单和安全,并且能更好适应的多核处理器。

反射

支持大部分的反射功能,可以在运行时获取对象类型的详细信息,动态操作对象,但不支持通过类型字符串创建对象实例。

Go的应用场景

  • 云和网络服务
  • 命令行工具
  • Web开发
  • DevOps

安装Go

Windows平台安装

  1. 前往官网下载安装包(*.MSI)

  2. 打开MSI文件并根据提示安装

  3. 打开终端, 输入下面命令

    $ go version
    
  4. 成功输出Go版本信息则安装成功

Mac 平台

  1. 可以预先安装Homebrew工具

  2. 在终端输入下面命令安装

    $ brew install go
    
  3. 输入下面命令

    $ go version
    
  4. 成功输出Go版本信息则安装成功

总结

  1. 设计一门语言需要在开发效率和性能方面进行考虑,Go也是在这两方面进行了平衡,将语言设计得相对简单,并且使用协程和消息传递,使得更好的适应多核处理器,提高CPU性能。
  2. Go很适合现在这个云时代,现在很多场景都采用Go。