Go的研习笔记day-1

本大纲内容资料纯属自己学习书籍笔记和分享。

1、前言:

  • go语言演进过程
  • VS其他语言
  • go的特性
  • Go的用途
  • 安装和配置环境

1.1、go语言演进过程

Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的 IT 工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范。自 2008 年 1 月起,Ken Thompson 就开始研发一款以 C 语言为目标结果的编译器来拓展 Go 语言的设计思想。
这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非常深刻的见解

1.2、VS其他语言

能够以更快的速度开发软件
开发出的软件能够很好地在现代的多核计算机上工作
开发出的软件能够很好地在网络环境下工作
使人们能够享受软件开发的过程
Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。
Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提倡通过接口来针对面向对象编程,通过 goroutine 和 channel 来支持并发和并行编程。
在 Go 语言出现之前,开发者们总是面临非常艰难的抉择,究竟是使用执行速度快但是编译速度并不理想的语言(如:C++),还是使用编译速度较快但执行效率不佳的语言(如:.NET、Java),或者说开发难度较低但执行速度一般的动态语言呢?显然,Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发。
在这里插入图片描述

设计原则

关键字的数量(25 个)来简化编码过程中的混乱和复杂度。
Go语言编码规范

1.3、Go的特性

  • Go 语言从本质上(程序和结构方面)来实现并发编程。
  • 混合型的语言
    Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性但本身不支持变体类型。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。为了简化设计,不支持函数重载和操作符重载.Go 语言通过另一种途径实现面向对象设计来放弃类和类型的继承
  • 函数
    Go 语言在函数式编程方面非常灵活
  • 静态类型
    类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。不支持动态加载代码,不支持动态链接库,不支持泛型,通过 recover 和 panic 来替代异常机制
  • 强类型显式原则
    作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的。为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换
  • 动态语言的特性
    使用关键字 var,不支持静态变量
  • 交叉编译(易于部署)
    运行 Linux 系统的计算机上开发运行 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!
  • 文档全面,完全免费开源

1.4、Go的用途

Web服务器,存储集群或巨型中央服务器的系统编程语言。
谷歌系统的编译器(NaCI)

1.5、安装和配置环境

操作系统适配的编译器
Linux、FreeBSD、Mac OS X(Darwin)
目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix 系统下工作 。其中,gc 版本的编译器已经被移植到 Windows 平台上,并集成在主要发行版中,你也可以通过安装 MinGW 从而在 Windows 平台下使用 gcc 编译器。这两个编译器都是以单通道的形式工作。

  • Go 原生编译器 gc:
    主要基于 Ken Thompson 先前在 Plan 9 操作系统上使用的 C 工具链。
    Go 语言的编译器和链接器都是使用 C 语言编写并产生本地代码,Go 不存在自我引导之类的功能。因此如果使用一个有不同指令集的编译器来构建 Go 程序,就需要针对操作系统和处理器架构(32 位操作系统或 64 位操作系统)进行区别对待。Go从1.5版本开始已经实现自举。Go语言的编译器和链接器都是Go语言编写的
    这款编译器使用非分代、无压缩和并行的方式进行编译,它的编译速度要比 gccgo 更快,产生更好的本地代码,但编译后的程序不能够使用 gcc 进行链接。
    编译器目前支持以下基于 Intel 或 AMD 处理器架构的程序构建。
    在这里插入图片描述
  • gccgo 编译器:
    一款相对于 gc 而言更加传统的编译器,使用 GCC 作为后端。GCC 是一款非常流行的 GNU 编译器,它能够构建基于众多处理器架构的应用程序。编译速度相对 gc 较慢,但产生的本地代码运行要稍微快一点。它同时也提供一些与 C 语言之间的互操作性。
    从 Go 1 版本开始,gc 和 gccgo 在编译方面都有等价的功能
  • 文件扩展名与包(package):
    Go 语言源文件的扩展名很显然就是 .go。(当你在创建目录时,文件夹名称永远不应该包含空格,而应该使用下划线 “_” 或者其它一般符号代替。)

如何配置环境变量:
Go 将被默认安装在目录 c:/go 下:

  • $GOROOT 表示 Go 在你的电脑上的安装位置,它的值一般都是 $HOME/go,当然,你也可以安装在别的地方。
  • $GOARCH 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
  • $GOOS 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
  • $GOBIN 表示编译器和链接器的安装位置,默认是 $GOROOT/bin,如果你使用的是 Go 1.0.3 及以后的版本,一般情况下你可以将它的值设置为空,Go 将会使用前面提到的默认值。

Go 编译器支持交叉编译,也就是说你可以在一台机器上构建运行在具有不同操作系统和处理器架构上运行的应用程序,也就是说编写源代码的机器可以和目标机器有完全不同的特性(操作系统与处理器架构)。
为了区分本地机器和目标机器,你可以使用 $ GOHOSTOS 和 $ GOHOSTARCH 设置本地机器的操作系统名称和编译体系结构,这两个变量只有在进行交叉编译的时候才会用到,如果你不进行显示设置,他们的值会和本地机器($GOOS 和 $GOARCH)一样。
$GOPATH 默认采用和 $GOROOT 一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个 Go 语言源码文件、包文件和可执行文件的路径,而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
$GOARM 专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。
$GOMAXPROCS 用于设置应用程序可使用的处理器个数与核数。

安装Linux环境:

  • 设置 Go 环境变量
    我们在 Linux 系统下一般通过文件 $HOME/.bashrc 配置自定义环境变量,根据不同的发行版也可能是文件 $HOME/.profile,然后使用 gedit 或 vi 来编辑文件内容。
    在这里插入图片描述
    为了确保相关文件在文件系统的任何地方都能被调用,你还需要添加以下内容:
    在这里插入图片描述
    在开发 Go 项目时,你还需要一个环境变量来保存你的工作目录
    在这里插入图片描述
    $GOPATH 可以包含多个工作目录,取决于你的个人情况。如果你设置了多个工作目录,那么当你在之后使用 go get(远程包安装命令)时远程包将会被安装在第一个目录下。
    在完成这些设置后,你需要在终端输入指令 source .bashrc 以使这些环境变量生效。然后重启终端,输入 go env 和 env 来检查环境变量是否设置正确。
  • 安装 C 工具
    Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。如果你使用的是 Ubuntu 的话,你可以在终端输入以下指令。由于网络环境的特殊性,可能需要将每个工具分开安装 。
    sudo apt-get install bison ed gawk gcc libc6-dev make
  • 获取 Go 源代码
    下载 Go 的源码包到你的计算机上,然后将解压后的目录 go 通过命令移动到 $GOROOT 所指向的位置。
    在这里插入图片描述
  • 构建 Go在终端使用以下指令来进行编译工作。
    在这里插入图片描述
  • 注意事项
  • 在测试 net/http 包时有一个测试会尝试连接 google.com,你可能会看到如下所示的一个无厘头的错误报告:
  • 在这里插入图片描述
  • 暂时关闭防火墙,以避免不必要的错误
  • 另一个办法是通过设置环境变量 $DISABLE_NET_TESTS 来告诉构建工具忽略 net/http 包的相关测试:
  • 在这里插入图片描述

测试安装

编辑器编辑文件并保存:hello1.go
内容如下:

package main

func main() {
	println("Hello", "world")
}

执行命令:切换相关目录到下,然后执行指令 go run hello1.go,将会打印信息:Hello, world。
在这里插入图片描述

验证安装:

终端输入指令 go version 来打印 Go 的版本信息。

Windows安装Go

下载链接:
https://pan.baidu.com/s/10uB43Z1lsW7N-LJuM3Motw
下载官网中文:
https://golang.google.cn/
在完成安装包的安装之后,你只需要配置 $GOPATH 这一个环境变量就可以开始使用 Go 语言进行开发了,其它的环境变量安装包均会进行自动设置。在默认情况下,Go 将会被安装在目录 c:\go 下,但如果你在安装过程中修改安装目录,则可能需要手动修改所有的环境变量的值。则可以使用指令 go run 运行 hello_world1.go。
如果发生错误 fatal error: can’t find import: fmt 则说明你的环境变量没有配置正确。
如果你想要在 Windows 下使用 cgo (调用 C 语言写的代码),则需要安装 MinGW,一般推荐安装 TDM-GCC。如果你使用的是 64 位操作系统,请务必安装 64 位版本的 MinGW。安装完成进行环境变量等相关配置即可使用.
版本1.12.7,环境win7
比如我这里更改安装目录:
1、安装完毕之后查看环境变量
在这里插入图片描述
在这里插入图片描述
打开CMD 输入go env查看go的配置信息是否安装成功
在这里插入图片描述

安装目录清单:
在这里插入图片描述

Mac环境下配置go的开发环境

先从官网下载安装包,安装完毕会在home目录下usr/local/go默认的安装目录。然后这个时候可以配置下环境变量

~/.bash_profile
export GOPATH=$HOME/go
保存退出,然后激活配置文件
source ~/.bash_profile
测试下是否安装成功
这里注意如果提示你权限不够的话需要使用sudo去执行
比如你现在创建个文件夹在go的安装目录s r c下面
sudo mkdir test
sudo vim hello.go
sudo build hello.go
sudo go run hello.go
然后可以看到输出了hello world。

发布了213 篇原创文章 · 获赞 258 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/wolf_love666/article/details/97630689