素材巴巴 > 程序开发 >

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

程序开发 2023-09-17 15:19:04

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

我的全栈之路

1.1 信息技术发展趋势

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

1.2 浅谈计算机系统架构

1.2.1 计算机系统架构概述

计算机是一种用于高速计算的电子机器,可以进行数值运算、逻辑运算,还有存储记忆功能,且能够通过编写程序实现来自动、高速的处理数据。
计算机系统由硬件系统和软件系统组成,由软硬件协作完成人们日常生活和工作中的各种任务,例如听歌、看电影、购物、写博客等等。
微信聊天:微信监听键盘输入的数据,并放到内存,然后传给网卡,通过网络传递给另外一个网卡,再从网卡传递到内存,显示在显示器上。
QQ音乐:QQ音乐将音乐数据加载到内存上,然后写到声卡上。
腾讯视频:应用程序将视频数据加载到内存,然后写到显卡上。
Office写文档:Office将内存中的数据写入到磁盘上。
Office读文档:Offcice将磁盘的数据加载到内存,然后显示在屏幕上。

1.2.2 计算机硬件系统

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

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

每个计算机组件的IO性能也各不相同,CPU、内存、磁盘都遵循容量越大、IO性能越差的特点。
计算机IO性能汇总
在后期优化程序时需要考虑程序时间复杂度和空间复杂度的问题。

1.2.2 计算机软件系统

软件的出现实现了人和计算机更好的交互,它是由开发人员采用某种编程语言(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 编程语言发展史

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

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

1.5 计算机语言应用场景

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

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

根据Tiobe排行榜得知,Java/C/Python分别排在前三名, 随后紧跟着C++,C#等等。

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

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

而不出意外的话,我的全栈之路系列会覆盖上述的十种编程语言,实现全平台开发。

1.6 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.7 Go语言开发环境搭建

1.7.1 Go语言编译器下载

在开发Go语言的程序之前,首先去官网 golang.google.cn下载Go语言的编译器,编译器的作用就是将开发人员使用Go语言针对Go编译器编写的Go程序编译成对应平台的机器指令。因为计算机无法识别开发人员编写的程序,需要借助Go编译器来将源程序编译成计算机识别的二进制机器指令。
golang官网提供了Windows,Linux,macOS版本的Go语言编译下载
golang官网
当点击Download Go后,会跳转到各个版本的Go语言编译器下载,同学们可以针对自己的操作系统选择对应的Go语言编译器版本
各个版本的Go编译器
如果是macOS可以选择下载go1.12.9.darwin-amd64.pkg文件
macOS版本Go编译器
当点击下载链接后Chrome会自动下载go编译器
go1.12.9.darwin-amd64.pkg
当下载完成以后Chrome会提示这种类型的文件可能会损害您的计算机,这里选择保留和仍然保留下载的文件
保留
任然保留

1.7.2 Go语言编译器安装

Go语言编译器下载完成之后便可以进行安装了,这里直接在Chrome浏览器中打开之前下载的安装文件go1.12.9.darwin-amd64.pkg
欢迎使用Go安装器
选择安装类型后,系统会提示输入密码,如果有TouchID,直接使用TouchID即可
安装类型
安装进行中
安装中
安装成功
安装成功
当点击关闭窗口时,系统会提示"您要将Go安装器移除到废纸篓吗?"
如果你想保留点击保留即可,否则移除到废纸篓,下次安装时去官网下载即可。

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

如果想要查看Go语言所有相关的环境变量,可以使用go env命令查看
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用户下
su 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配置
GOPATH配置

 

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

1.7.3 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
LaunchPad
Visual Studio Code启动界面
Visual Studio Code启动界面

1.7.4 Go语言HelloWorld

在启动Visual Studio Code之后,首先打开之前的GOPATH对应的目录
Open Folder
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
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
go build

 

1.7.5 Visual Studio Code 集成Go插件

使用Visual Studio Code编写Go程序未安装插件时,源文件中编写代码没有智能提示,而且还需要通过外部的终端程序(例如iTerm)来编译运行Go程序。

首先切换到Visual Studio Code的扩展插件视图(快捷键Command+Shift+x),然后在搜索栏中搜索go插件安装即可。
搜索安装Go插件
插件安装完成之后,编写Go代码就会有智能提示了。
安装完成

而且visual studio code自带了终端,可以直接在自带的终端来编译运行Go程序。
使用插件编写Go程序,并使用自带的终端编译运行

1.8 GoLand开发Go程序

1.8.1 GoLand介绍

GoLand是Jetbrains公司推出专为Go开发人员构建的跨平台IDE,可以运行在Windows,Linux,macOS系统之上,除了核心Go开发之外,它还支持JavaScript,TypeScript,NodeJS,SQL,数据库,Docker,Kubernetes和Terraform。总而言之,这些功能使其完美地适用于任何任务,无论是现代Web应用程序还是DevOps工具。

GoLand为Git,GitHub和Mercurial提供开箱即用的支持。用户可安装的插件支持Perforce,ClearCase和其他插件。

GoLand丰富的生态系统包括1000多个插件,可用于根据您的特定需求定制IDE。根据您的喜好自定义,扩展和更改所有内容:从添加对Angular和Vue.js项目的支持,或获取Nyan Cat进度条,到设置完全不同的IDE主题。

1.8.2 GoLand安装

首先去官网下载GoLand
GoLand
当点击下载之后,网站会检测当前浏览器用户对应的操作系统版本,然后下载对应操作系统版本的GoLand,目前最新版本的GoLand是2019.2.1。
下载GoLand

下载完成之后便可以进行安装了,点击下载的goland-2019.2.1.dmg文件
下载完成
然后将GoLand拖放到Applications文件夹即可。
将GoLand拖放到Applications文件夹

如果想要完全卸载GoLand,可以删除如下的目录

~/Library/Preferences/
 ~/Library/Caches/
 ~/Library/Application Support/
 ~/Library/Logs/

1.8.3 GoLand首次启动设置

首先从启动台中启动GoLand
启动GoLand

导入GoLand设置从其他来源
如果之前安装过其他版本的GoLand,可以选择Config or installation folder,选择其他版本的GoLand配置。
我这里已经把之前安装的GoLand完全删除了,所以选择Do not import settings
Import GoLand Settings From...

因为GoLand是收费的IDE,同时也提供了30天免费试用的方式。如果经济能力允许的话,可以从指定渠道购买正版GoLand.
GoLand提供了Jetbrains Account,Activition Code和License Server三种激活方式,使用前必须激活或者选择免费试用
激活GoLand

当激活或者选择免费试用之后便会启动GoLand
GoLand激活

1.8.4 GoLand开发Go程序

当GoLand启动后,便可以使用它来编写Go程序了。

首先选择New Project创建一个项目
New Project

设置项目路径和GOROOT
设置项目路径和GOROOT

GoLand会自动创建项目
go-core-programming

然后创建一个多级目录
多级目录
net/ittimeline/go/foundational/syntax

创建Go File
创建Go File
创建helloworld.go,选择Simple Applciaiton
创建Simple Application

编写helloworld.go

package mainimport "fmt"func main() {fmt.Println("mac0S10.14.6 & Go1.12.9 & GoLand 2019.2.1 Hello World")}
 

程序说明

Go源程序特征

运行Go程序
首次运行可以点击main方法的运行图标运行,或者鼠标右键Run运行。
后续可以点击右上角的运行图标运行。
运行Go程序

如果你喜欢黑色的主题,可以通过Command+,进入设置,然后在Apperance选项上设置Theme为Darcula即可。
设置主题

1.9 注释

1.9.1 注释概述

注释(Comment)是用于描述程序的文字信息,Go中的注释分为单行注释和多行注释两种

在日常开发中应该多写注释,便于程序后期维护,而在程序调试的过程中,也可以通过注释部分代码来调试程序,注释的内容在编译时都会删除,不会影响程序的运行结果。

加上单行注释和多行注释后,再次运行helloworld程序不会影响程序的运行结果。

package main // 表示定义一个包,main是可执行程序的包名,所有的Go源文件头部必须要要有一个包声明语句,Go通过包来管理命名空间import "fmt" //- import "fmt"表示引用一个外部的包fmt,import可以是标准库的包,也可以使第三方或者自定义的包,fmt是标准输入输出包/*func关键字定义一个函数,函数名为main,main代表Go程序的入口*/
 func main() {//fmt.Println()是fmt包中的Println函数,函数的实参是一个字符串字面量,在标准输出(即控制台终端)上输出mac0S10.14.6 & Go1.12.9 & GoLand 2019.2.1 Hello Worldfmt.Println("mac0S10.14.6 & Go1.12.9 & GoLand 2019.2.1 Hello World")}
 

转载于:https://www.cnblogs.com/ittimeline/p/11444079.html


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。