01.Go 语言相关介绍

1、Go 语言的诞生

Go语言是一门新型的静态类型的编译型语言。

每种语言都有其独特的应用领域,在某个领域使用某种语言能达到收益/投入的最大化。例如,在嵌入式领域,汇编语言和C语言是首选;在操作系统领域,C语言是首选;在系统级服务编程领域,C++是首选;在企业级应用程序和Web应用领域,Java是首选。

最近几年,由于C和C++在计算领域没有得到很好的发展,也没有出现新的、好用的系统编程语言,因此使得开发程度和系统效率等在很多情况下不能兼容。当执行效率较高时,就存在低效的开发和编译,如C++;当执行效率低时,但拥有有效的编译,如.NET、Java等。根据以上情况,就需要一种既有较高效的执行速度,又有高效的编译速度和开发速度的编程语言,因此Go语言就诞生了。

Go语言是由Google公司推出的一个开源项目(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。Go语言最早是在2007年9月由Robert Griesemer、Rob Pike和Ken Thompson联合开发的,2009年11月,Google正式发布Go语言,并将其开源在BSD许可证下发行。

Go语言不仅支持Linux和Mac OS平台,还支持Windows平台。Go语言就是为了解决当下编程语言对并发支持不友好、编译速度慢、编程复杂等问题而诞生的。

2、Go 语言的特性

Go语言是由Google公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。

Go语言与当前的传统开发语言(如Java、PHP)相比具备许多新特性。例如,Go语言拥有自动垃圾回收功能,同时也允许开发人员干预回收操作;Go语言有着更加丰富的内置类型,在错误处理方面语法更加精简高效。在Go语言中,函数支持多个返回值,而且函数也是一种值类型,可以作为参数传递。

a. 简单易学

Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅简化,去掉了不需要的表达式括号,循环也只有for一种表示方法,就可以实现数值、键值等各种遍历。因此,Go语言非常容易上手。

b. 系统类型和抽象

Go语言的类型定义参考了C语言中的结构(struct),但是Go语言并不像C++和Java那样设计一个庞大而又复杂的类型系统,而是仅支持最基本的类型组合,不支持继承和重载。虽然Go语言没有类和继承的概念,但是它可以通过接口(interface)的概念来实现多态性。

c. 工程结构简单

Go语言不像C语言那样需要头文件才能运行,Go语言编译的文件都来自扩展名为go的源码文件,Go语言还不需要解决方案、工程文件及Make File。由于Go语言遵循GOPATH规则,因此,只需要将Go语言的工程文件按照GOPATH的规则进行填充即可,最后使用go build或go install进行编译。

d. 快速编译

Go语言和其他语言一样,拥有一个健全的包管理机制,同时得益于包之间的树状依赖,Go语言的初次编译速度可以和C/C++相媲美,甚至二次编译的速度明显快于C/C++,同时又拥有接近Python等解释语言的简洁和开发效率。Go语言在执行速度、编译速度和开发效率之间做了权衡,尽量达到了快速编译、高效执行、易于开发的目标。

同时,Go语言还支持交叉编译,可以在运行Linux系统的计算机上开发Windows下的应用程序。Go语言源码文件格式默认都是使用UTF-8编码的。

e. 原生支持并发

Go语言最有特色的特性就是从语言层支持并发,不需要第三方库、开发者的编程技巧及开发经验就可以轻松地在Go语言运行时来帮助开发者决定如何使用CPU资源。Go语言在语言层可以通过goroutine对函数实现并发执行。goroutine类似于线程但是并非线程,goroutine会在Go语言运行时进行自动调度。因此,Go语言非常适合用于高并发网络服务的编写。

Go语言对多核处理器的编程进行了优化,Go语言从程序与结构方面来实现并发编程,这是Go语言最重要的特性之一。

f. 开源免费

由于Go语言是基于BSD协议完全开源的,因此能免费被任何人用于适合的商业目的。

3、Go 使用场景

使用Go语言,可以让Web服务器端的开发变得更高效,能够充分发挥多核计算机的性能,拥有更出色的网络环境兼容能力。自动垃圾回收、类型安全、依赖严格、编译快速等特点都是Go语言的魅力所在。很显然,Go语言的目标就是针对服务器端的Web开发领域。

Go语言凭借其出色的并发能力,在高性能分布式系统领域如鱼得水,像集群系统、游戏服务器端等场景都可以把Go语言作为首选开发语言。但是,Go语言并不适合开发强实时性的软件,垃圾回收和自动内存分配等因素导致Go语言在实时性上有些力不从心。

对于Go语言最初的构想是把它作为一个系统编程语言,但目前也被用于像Web Server、存储架构等这类分布式、高并发系统中;同时还可以用于一般的文字处理和作为脚本程序使用。

Go语言的编译器作为Native Client被内嵌到Chrome浏览器中,可以被Web应用程序用来执行本地代码;同时Go语言也可以运行在Intel和ARM处理器上。

目前,Go语言已被Google集成到Google APP Engine中,在基于Google App Engine基础设施的Web应用中也得到了很好的应用。

4、Go 环境部署

Go安装包的下载地址为All releases - The Go Programming Language

Go语言主要支持Windows、Linux及Mac OS操作系统:

环境变量:

与Java等编程语言一样,安装Go语言开发环境需要设置全局的操作系统环境变量(除非使用包管理工具直接安装)。

主要的系统级别的环境变量有以下两个:

  • GOROOT:表示Go语言环境在计算机上的安装位置,它的值可以是任意的位置,这个变量只有一个值,值的内容必须是绝对路径。
  • GOPATH:表示Go语言的工作目录,可以有多个,类似于工作空间。一般不建议将GOPATH和GOROOT设置为同一个目录。
5、Go 开发工具

Gogland

由于Gogland是Jebrains家族的一员,所以,要使Gogland能够正常工作,必须安装Java并配置JDK或JRE环境,同时还需要手动配置GOPATH。

Visual Studio Code

安装Go语言扩展:选择View|Extensions命令

6、GOROOT 目录结构

a. api文件夹

api文件夹中存放了Go API检查器的辅助文件,包括公开的变量、常量及函数等。其中,go1.1.txt、go1.2.txt、go1.3.txt和go1.txt文件分别存放了不同版本的Go语言的全部API特征;except.txt文件中存放了一些(在不破坏兼容性的前提下)可能会消失的API特性;next.txt文件则存放了可能在下一个版本中添加的新API特性。

b. bin文件夹

bin文件夹中存放了所有由官方提供的Go语言相关工具的可执行文件。默认情况下,该目录会包含go和gofmt这两个工具。

c. doc文件夹

doc文件夹中存放了Go语言几乎全部HTML格式的官方文档和说明,方便开发者在离线时查看。

d. lib文件夹

lib文件夹中存放引用的库文件,可以为程序的运行提供帮助。

e. misc文件夹

misc文件夹中存放各类编辑器或IDE(集成开发环境)软件的插件,辅助开发者查看和编写Go语言代码。

f. pkg文件夹

pkg文件夹用于在构建安装后,保存Go语言标准库的所有归档文件。pkg文件夹包含一个与Go语言安装平台相关的子目录,被称为“平台相关目录”。例如,Windows 64bit操作系统的安装包中,平台相关目录的名字则为windows_amd64。Go源码文件对应于以“.a”为结尾的归档文件,存储在pkg文件夹下的平台相关目录中。

pkg文件夹下还有一个名为tool的子文件夹,该子文件夹下也有一个平台相关目录,其中存放了很多可执行文件。

g. src文件夹

src文件夹中存放了所有的标准库、Go语言工具及相关底层库(C语言实现)的源码。通过查看src文件夹,可以了解Go语言的方方面面。

h. test文件夹

test文件夹中存放了测试Go语言自身代码的文件。通过阅读这些测试文件,可以了解Go语言的特性和使用方法。

7、GOPATH 目录结构
a. src 目录

src目录主要用于以代码包的形式组织并保存Go源码文件。代码包与src的子目录相对应。例如,若一个源码文件被声明为属于代码包logging,那么它就应当被保存在src目录下名为logging的子目录中。当然,也可以把Go源码文件直接放在src目录下,但这样的Go源码文件就只能被声明为属于main的代码包。一般建议把Go源码文件放入特定的代码包中。

注意:Go语言的源码文件分为3类,即Go库源码文件、Go命令源码文件和Go测试源码文件。Go语言的命令源码文件和库源码文件的区别如下:所谓命令源码文件,就是声明为属于main代码包,并且包含无参数声明和结果声明的main函数的源码文件。这类源码文件可以独立运行(使用go run命令),也可被go build或go install命令转换为可执行文件。库源码文件则是指存在于某个代码包中的普通源码文件。

b. pkg 目录

pkg目录主要用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。该目录与GOROOT目录下的pkg功能类似。区别在于,GOPATH结构中的pkg目录专门用来存放程序开发者代码的归档文件。构建和安装用户源码的过程一般会以代码包为单位进行,例如,logging包被编译安装后,将生成一个名为logging.a的归档文件,并存放在当前工作区的pkg目录下的平台相关目录中。

c. bin 目录

bin目录与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。在Linux操作系统下,这个可执行文件一般是一个与源码文件同名的文件。而在Windows操作系统下,这个可执行文件的名称是源码文件名称加.exe。

8、Go 第一个程序

package main

import "fmt"
func main() {
	fmt.Println("Hello world!") // shift+alt+down 复制当前行到下一行
}
  • 编译文件:go build hello.go编译后默认生成对应的 .exe文件。也可以指定文件名:go build -o filename
  • 运行文件:hello.exe 或者直接使用 go run hello.go

Go语言程序规则:

  • 源程序以.go为扩展名。
  • 源程序默认为UTF-8编码。
  • 标识符区分大小写。
  • 语句结尾的分号可以省略。
  • 函数以func开头,函数体开头的“{”必须在函数头所在的行尾部,不能单独起一行。
  • 字符串字面量使用“" "”(双引号)括起来。
  • 调用包中的方法通过“.”访问符,如fmt.Printf。
  • main函数所在的包名必须是main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值