• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

我的全栈之路-Go语言基础之Go语言概述与开发环境搭建

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我的全栈之路-Go语言基础之Go语言概述与开发环境搭建

1.1 信息技术发展趋势

目前信息技术主要经历了互联网、移动互联网以及以大数据、云计算、物联网、人工智能、区块链等为代表的新兴技术三个阶段。

  • 互联网
    互联网自从20世纪90年代逐渐兴起,主要是通过网络连接了世界各地的PC机,笔记本以及背后提供数据服务的大型服务器集群。
    其中绝大多数PC机都运行着Windows,macOS操作系统,而服务器主要是以类Unix(CentOS,Ubuntu)占据主要市场。
    依靠互联网成长起来的公司有Apple、Google、Amazon、Microsoft、Baidu、Alibaba、Tencent。

  • 移动互联网
    移动互联网主要从2010开始爆发式增长,主要是通过网络连接了世界各地的移动设备(最典型的就是手机),它们绝大多数都运行着Android,iOS操作系统。
    依靠移动互联网成长起来的公司有字节跳动、蚂蚁金服、小米、美团、滴滴。

  • 大数据、云计算
    随着用户的爆发式增长,以海量数据为基础的大数据、云计算技术在Google、Amazon、Apple、Baidu、Alibaba、Tencent等大型互联网公司有着广泛的商业应用场景。

  • 物联网
    物联网会以手机作为中枢,通过物联网连接所有的智能设备,包括智能家居、汽车、电视等嵌入式设备,目前国内的小米、华为等在智能家居、电视、汽车等领域广泛布局,2019年8月华为发布了鸿蒙系统。

  • 人工智能
    人工智能(AI)作为当前最火爆的技术,国内的Baidu、Tencent、Alibaba等互联网公司逐渐根据自身的核心业务开始布局,Alibaba最早将人工智能技术布局在电商和物流领域,而Baidu开发出了对话式人工智能操作系统Dueros和自动驾驶平台Apollo,Tencent则是在游戏领域应用人工智能。

  • 区块链
    区块链经历了数字货币、智能合约和超级账本三个阶段,区块链技术可以广泛使用在金融、供应链、物流、公共服务等领域,解决互联网的信任问题,目前蚂蚁金服、京东已经有大量的区块链应用落地。

1.2 浅谈计算机系统架构

1.2.1 计算机系统架构概述

计算机是一种用于高速计算的电子机器,可以进行数值运算、逻辑判断,还有存储记忆功能,且能够通过编写程序实现来自动、高速的处理数据。
计算机系统由硬件系统和软件系统组成,由软硬件共同协作完成人们日常生活和工作中的各种任务:

  • 微信聊天:微信监听键盘输入的数据,并放到内存,然后传给网卡,通过网络传递给另外一个网卡,再从网卡传递到内存,显示在显示器上。
  • QQ音乐:QQ音乐将音乐数据加载到内存上,然后写到声卡上。
  • 腾讯视频:应用程序将视频数据加载到内存,然后写到显卡上。
  • Office写文档:Office将内存中的数据写入到磁盘上。
  • Office读文档:Offcice将磁盘的数据加载到内存,然后显示在屏幕上。

1.2.2 计算机硬件系统

现在计算机是由运算器、控制器、存储器、输入设备和输出设备五大部分组成,它们各司其职,完成了数据的计算、存储、传输等常见任务。

  • CPU
    CPU也就是中央处理器,由运算器和控制器所组成,其作用是从内存中获取指令并执行后将结果返回给内存或写入磁盘和控制其他设备协同工作。

  • 内存
    内存是采用编址存储,其主要作用是作为程序的工作区,程序运行时会将指令和数据都加载到内存,内存中的数据断电后会丢失,用于临时存储小容量数据。

  • 硬盘
    硬盘是用于永久存储海量数据,按照读写性能不同分为机械硬盘和固态硬盘两大类。

  • IO设备
    IO设备用于数据的输入和输出,其中常见的输入设备包含鼠标、键盘,常见的输出设备包括声卡、显卡。
    网卡也是属于IO设备的一种,主要用于网络上的数据接收和发送。

在后期程序排查错误时除了要考虑程序本身的错误以外,还要考虑计算机硬件故障,例如内存不足,磁盘写满,网络不通等问题

每个计算机组件的IO性能也各不相同,CPU、内存、磁盘都遵循容量越大、IO性能越差的特点。

在后期优化程序时需要考虑程序时间复杂度空间复杂度的问题。

1.2.3 计算机软件系统

软件的出现实现了人和计算机更好的交互,它是由开发人员采用某种编程语言(C/C++/Java等等)编写的一系列指令以及不同业务场景产生的数据组成。

通常将软件分为系统软件和应用软件

系统软件:驱动程序、操作系统、语言处理程序等都是属于系统软件。
驱动程序是硬件厂商使用编程语言(C/C++)编写的程序,在使用硬件(例如打印机、显卡等等)前必须安装对应的驱动程序。
操作系统是负责通过驱动程序管理硬件资源,同时给应用软件提供运行平台,目前主流的操作系统有Windows,Linux,macOS,Android,iOS。
语言处理程序是用于将编程语言编写的源程序编译或者解释成对应平台的机器语言。

应用软件:微信、支付宝、淘宝、Office都是属于应用软件,它们都是运行在操作系统之上的。

运行在不同操作系统之上的软件交互方式也不一样,Linux上的软件通常是使用字符界面的交互方式,运行在Windows,macOS上的软件通常是以鼠标、键盘操作的交互方式,运行在Android,iOS上的软件通常是以手势触控、语音等交互方式。

1.3 程序和指令

程序是为了完成某项任务(例如聊天、听音乐)而使用某种编程语言(例如C/C++)编写的一组指令序列。
而指令是计算机程序控制的最小单位,由操作码和操作数组成,操作码是计算机要执行什么操作,例如加减乘除操作,而操作数具体执行的对象,具体的数据以及数据的位置。
所有指令的集合称为指令系统,常见的PC机指令系统有Intel X86指令集,常见的手机指令系统有ARM,因此手机上的程序不加修改是不能直接在PC机上运行,因为不同的指令集是不兼容的。

那么计算机是如何处理程序的?
根据冯诺依曼计算机结构的原理,计算机的工作流程大致如下

  1. 当用户从计算机中打开程序时(鼠标点击桌面的快捷方式图标),程序开始执行。
  2. 操作系统将程序的内容和相关的数据传送到内存中。
  3. CPU根据程序内容从内存中读取指令。
  4. CPU分析、处理指令,并为下一条指令做准备
  5. 取下一条指令并分析、处理,如此重复操作,直到执行完程序中的全部指令,最后将计算的结果放到指令指定的存储器地址中。

以网易云音乐播放音乐为例子

  1. 用户双击网易云应用程序播放音乐
  2. 网易云应用程序的指令和数据加载到内存
  3. CPU从内存中读取并分析指令然后通过操作系统调用驱动程序
  4. 驱动程序调用声卡播放音乐

1.4 计算机编程语言发展史

任何事物都是从无到有,逐步发展壮大起来的,编程语言也是一样。

计算机程序设计语言经历了机器语言到汇编语言和高级程序设计语言三个阶段,其特点是使得程序员用编程语言开发、测试、部署应用程序越来越方便、高效。但是是以牺牲效率为代价,但是随着计算机硬件的发展,绝大多数应用场景的效率损失可以忽略不计。

  • 机器语言
    计算机发展的最早期,程序员编写程序采用二进制的指令(010010101)来实现的,而每种CPU都有各自不同的指令系统(Ultra SPARC/Intel X86/ARM),因此在不同的机器上使用不同的机器语言实现。其特点是性能特别高效,而面向机器编程也就意味着不能移植,需要手动处理底层硬件的差异性,而且二进制的指令难以理解和维护。
  • 汇编语言
    随着时代和计算机技术的发展,汇编语言和编译器的出现解决了机器语言需要记住非常多的二进制机器指令的难题,但是还是没有从根本上解决移植性的问题,只是将机器指令转换为易懂的英文单词,然后由编译器编译成机器指令,因为计算机终归揭底只能识别二进制的0001110100110机器指令,而且汇编语言是面向机器的,不同机器(SPARC/Intel X86/ARM)的汇编指令是不相同的。
  • 高级程序设计语言
    高级程序设计语言的高级之处体现在开发人员在编写程序时无需关心计算机底层硬件差异而只需要专注于业务模块实现即可。甚至是可以实现 一次编译,到处运行,这里以Java为例子:通过实现不同平台的JVM,编译生成的字节码文件可以在任意的JVM上运行。

高级语言主要分为面向过程和面向对象两种,其中典型的面向过程编程语言就是C,面向对象的编程语言有Java,C++等等。
高级语言通常都需要编译器或者是解释器将源码编译或者解释后执行。

1.5 程序的编译和解释

由于高级编程语言和计算机底层语言是互不相通的,计算机最底层只能识别01010这种二进制的机器指令,因此需要使用工具进行语言之间的转换。这个就是程序编译或者解释的由来。

为了理解程序编译和程序解释,这里引入两种语言,分别是高级计算机语言L1,以及低级计算机语言L0。

  • 程序编译
    开发人员使用高级编程语言L1编写的应用程序通过编译器生成成计算机底层能够识别的低级语言L0,L0就是计算机实际执行的语言,而编译器生成的计算机底层识别的二进制机器指令过程就是程序编译。常见的编译型语言有C/C++/Objective-C/Go

  • 程序解释
    首先使用L0语言实现另外一个程序,也就是解释器,然后将开发人员使用高级语言L1编写的应用程序作为输入,每一句L1编写的程序都会在L0中作为等价的转换然后执行,解释的过程就是由L0编写的解释器去解释L1程序。常见的解释型语言有PHP,Python,JavaScript。

而Java和C#属于编译+解释型语言,以Java为例子,Java程序在运行之前首先被编译成Java字节码,然后在JVM虚拟机上解释运行。

1.6 计算机语言应用场景

如果想知道目前主流的编程语言有哪些,可以访问tiobe 首页获取编程语言排行榜。

2019年9月编程语言排行榜Top20

根据Tiobe排行榜得知,Java/C/Python分别排在前三名, 随后紧跟着C++,C#,JavaScript等等。
每种编程语言都有自己擅长的应用场景。

编程语言 应用场景
C 硬件驱动、操作系统、系统软件
C++ 系统软件、网络通讯、科学计算 、游戏
C# Windows应用,Web应用、游戏
Java 大型互联网应用(淘宝、天猫),Android,大数据
Go 高并发、区块链、微服务
Kotlin Android应用开发
Swift macOS,iPhone,iPad应用开发
Python 人工智能、机器学习、自动化运维、数据分析 、图形处理
JavaScript 浏览器端、服务端、PC桌面
Scala 大数据开发

那么如果你作为初学者,面对如此之多的编程语言,到底应该先从哪门语言上车呢?如果你想深入的学习其他语言和架构相关的知识之前建议熟练掌握C语言。因为C++/Java/C#等编程语言都模仿了C语言。无论哪种语言,都是实现目标的工具,而不是目标本身。

而不出意外的话,我的全栈之路系列会覆盖上述的十种编程语言,目的是实现全平台开发,带领大家一起学习,逐步成长为开发工程师。

1.7 Go语言概述

Go语言(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

2007年9月罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。

Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。并在2012年推出1.0版本,自那时候起大量的开源项目使用Go语言进行开发,例如容器领域的Docker,Kubernetes,区块链领域的Ethereum和Fabric都是使用GO语言构建的等等。

在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。

Go语言被称为21世纪的C语言,有着开源、跨平台、运行速度快(相对于Java,Python),简单易学(相对于C/C++),功能强大(可嵌套C语言),语言层面支持并发等特点被广泛用于区块链开发、大数据开发、云计算开发、服务器开发、Web开发等领域。

1.8 Go语言开发环境搭建(macOS版)

1.8.1 Go语言编译器下载

在开发Go语言的程序之前,首先去官网 golang.google.cn下载Go语言的编译器,编译器的作用就是将开发人员使用Go语言针对Go编译器编写的Go程序编译成对应平台的机器指令。因为计算机无法识别开发人员编写的程序,需要借助Go编译器来将源程序编译成计算机识别的二进制机器指令。
golang官网提供了Windows,Linux,macOS版本的Go语言编译下载

当点击Download Go后,会跳转到各个版本的Go语言编译器下载,同学们可以针对自己的操作系统选择对应的Go语言编译器版本

如果是macOS可以选择下载go1.12.9.darwin-amd64.pkg文件

当点击下载链接后Chrome会自动下载go编译器

当下载完成以后Chrome会提示这种类型的文件可能会损害您的计算机,这里选择保留和仍然保留下载的文件

1.8.2 Go语言编译器安装

Go语言编译器下载完成之后便可以进行安装了,这里直接在Chrome浏览器中打开之前下载的安装文件go1.12.9.darwin-amd64.pkg

选择安装类型后,系统会提示输入密码,如果有TouchID,直接使用TouchID即可

安装进行中

安装成功

当点击关闭窗口时,系统会提示"您要将Go安装器移除到废纸篓吗?"
如果你想保留点击保留即可,否则移除到废纸篓,下次安装时去官网下载即可。

安装完成以后可以使用终端软件(例如iTerm)中输入go version查看Go编译器的版本信息

1.8.3 配置GOPATH

如果想要查看Go语言所有相关的环境变量,可以使用go env命令查看

其中我们需要关注的是GOPATH和GOROOT,其中GOROOT是go语言编译器的安装路径,GOPATH是开发人员编写Go程序的工作空间,也就是存放Go代码的地方,普通用户(例如liuguanglei)登录默认的值是/Users/liuguanglei/go,如果是root用户登录,默认的GOPATH是/var/root/go,这也就意味着Go编译器编译时默认会在该路径下查找Go源程序,这里通过修改/etc/profile文件实现自定义GOPATH。

首先使用su root 命令并输入密码切换到root用户下

然后使用vim命令编译/etc目录下的profile文件

sh-3.2# vim /etc/profile

此时vim处于阅读模式,如果想要修改profile文件的内容,按键 "i"便可进入编辑模式
然后添加GOPATH的环境变量配置

export GOPATH=/Users/liuguanglei/Documents/workspace/go
export PATH=$PATH:$GOPATH

添加完成以后,按esc退出编辑模式,然后输入wq!保存之前的修改,此时添加的GOPATH环境变量实际上还没有生效,使用source命令让之前的修改生效即可

sh-3.2# source /etc/profile


GOPATH配置

然后无论是普通用户登录还是root用户登录,使用go env GOPATH查看环境变量都是在/Users/liuguanglei/Documents/workspace/go目录下

1.9 使用Visual Studio Code开发Go程序

1.9.1 macOS安装Visual Studio Code

在安装Go编译器并配置好GOPATH之后,便可以进行Go程序的开发了。
Go源程序可以使用任意的文本编辑器开发,我这里采用Visual Studio Code来开发Go程序

首先去Visual Studio Code的官网下载并安装,官网提供了各个操作系统的版本下载。

下载之后将VSCode-darwin-stable.zip包解压后将Visual Studio Code拖放到“应用程序”文件夹即可使用了。

下载VisualStudio Code,macOS默认的路径为"下载"

解压VSCode-darwin-stable.zip

拖放Visual Studio Code到应用程序文件夹

安装完成以后便可以从LaunchPad启动Visual Studio Code

Visual Studio Code启动界面

1.9.2 Go语言HelloWorld

在启动Visual Studio Code之后,首先打开之前的GOPATH对应的目录


然后在该目录下编写第一个Go程序:helloworld.go

package main
import "fmt"

func main(){
    fmt.Println("macOS & Go 1.12.9 & Visual Studo Code")
}

编写完成以后可以在终端上使用go build编译该程序

liuguangleideMacBook-Pro:~ liuguanglei$ cd Documents/workspace/go/
liuguangleideMacBook-Pro:go liuguanglei$ go build helloworld.go
liuguangleideMacBook-Pro:go liuguanglei$ ./helloworld
macOS & Go 1.12.9 & Visual Studo Code


go build

helloworld.go编译默认生成和源文件同名的可执行文件helloworld,然后使用./helloworld就可以运行编译

也可以直接使用go run命令直接运行源文件,该命令不会生成可以执行文件helloworld

liuguangleideMacBook-Pro:go liuguanglei$ go run helloworld.go
macOS & Go 1.12.9 & Visual Studo Code


go build

1.9.3 Visual Studio Code 集成Go插件

使用Visual Studio Code编写Go程序未安装插件时,源文件中编写代码没有智能提示,而且还需要通


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言简介和开发环境搭建发布时间:2022-07-10
下一篇:
Windows 安装 Go语言开发环境以及使用发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap