前言

Go(Golang)是Google开发的一种强静态类型、编译型、并发型,并具有垃圾回收功能的编程语言,所以使用Go编写的程序相比nodejs之类的弱类型语言,可以提前在编译阶段发现错误,而且由于没有类似JVM运行时,所以编译后的程序不是中间语言而是机器代码。总之,它类似c/c++拥有接近它们的性能,但又没有它们烦人的内存管理,重要的是在并发多线程方面处理的非常优雅,特别适合高并发和对性能有要求的场景下开发。好了,闲话少说,接下来看看如何安装Go。

1. Go的安装:Linux 和 Mac

Go的开发环境支持主流的操作系统,如:FreeBSD 10.3 or later(amd64, 386),Linux 2.6.23 or later with glibc(amd64, 386, arm, arm64,s390x, ppc64le),macOS 10.10 or later(amd64),Windows 7, Server 2008R2 or later(amd64,386)。如果你的开发环境就在这些系统中,那么你就可以在官网下载安装包了,假如不是也没事,可以直接获取源码自己编译安装,不过本文不回介绍相关的内容。由于windows上的安装很简单,这里就先略过了,那么重点说说Linux和Mac下如何安装。

Mac环境安装

其实Mac环境下安装也很简单,有几种方式:直接下载安装包,使用Homebrew(包管理)安装。我推荐使用Homebrew,用它就几个简单命令就可以安装了。如果你没有安装Homebrew,请自行Google。在终端下敲入以下命令:

~ brew install go
installing...

Homebrew的安装操作执行完成后,你就可以在终端上敲入以下命令验证是否成功:

~ go version
go version go1.10.3 darwin/amd64

哈,是不是很简单,之所以推荐使用Homebrew安装,方便更新管理Go的开发版本。

Linux安装

Linux下安装就麻烦些,首先你需要确认系统的版本:

uname -a
Linux SSS-LA 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) x86_64 GNU/Linux

那么,根据终端显示的系统版本相关信息,在找到对应的下载链接,点击下载或使用wget命令下载,如下所示:

wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz
--2018-09-01 06:39:53-- https://dl.google.com/go/go1.11.linux-amd64.tar.gz
Resolving dl.google.com (dl.google.com)... 2607:f8b0:4000:801::200e, 172.217.9.174
Connecting to dl.google.com (dl.google.com)|2607:f8b0:4000:801::200e|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 127163815 (121M) [application/octet-stream]
Saving to: ‘go1.11.linux-amd64.tar.gz’ go1.11.linux-amd64.tar.gz 100%[============================================================================>] 121.27M 98.5MB/s in 1.2s 2018-09-01 06:39:55 (98.5 MB/s) - ‘go1.11.linux-amd64.tar.gz’ saved [127163815/127163815]

OK,接着找到下载好的目录,使用tar命令进行解压安装

tar -C /usr/local -xzf go1.11.linux-amd64.tar.gz

一切顺利的话,go就已经安装好了,那么来验证下吧,请输入以下命令:

go version
go version go1.11 linux/amd64

在你的终端上显示如上的类似信息,那么 Go 就已经正确安装到你的机器上了。那是不是可以写个 Hello world 了,take esay,还需要简单的配置几个路径。

2. GOROOT,GOPATH,PATH设置

GOROOT、GOPATH、PATH这三个环境变量需要在profile中设置下,可以在.profile 或 /etc/profile 下添加这几个环境变量

export GOROOT=/usr/local/go
export GOPATH=$HOME/golib
export GOBIN=$HOME/.gobin
export PATH=$PATH:$GOROOT/bin:$GOBIN

GOROOT 表示的是 Go的安装目录

GOPATHGo 代表了工作区,它是 Go 程序源码的存放目录,每一个工作区的目录相同,必须包含三个子目录:src、bin、pkg。

src是存放了源码文件,源码文件是以代码包组织的。pkg是存放的归档文件(名称以.a为后缀的文件),注意归档文件是存放在平台相关的目录下的,平台相关指的是与系统和CPU架构有关。bin用于存放当前工作区中的 Go 程序的可执行文件,但是 GOBIN 设置了,执行 go install 命令后,可执行文件会存放在 GOBIN 对应的目录下

GOBINgo install 命令命令安装执行的目录

PATH 是为了方便 Go 语言命令和 Go 程序的可执行文件进行设置

3.包的导入方式

代码包的导入形式有以下四种:

  1. import "strings",这是最常见的,其使用方式为 strings.HasPrefix("Gopher","Go")

  2. import str "strings",这是给导入的代码包重新命名,防止与已有的冲突,其实用方式跟上面类似 str.HasPrefix("Gopher","Go")

  3. import . "strings",这种方式是将 strings 包可访问的方法、类型等导入到当前的包中,所以就要求当前包内不能有与 strings 内的方法或类型有冲突,其使用方式跟上面完全不同 *HasPrefix("Gopher","Go")

  4. import _ "strings",这种方式也是导入,但当前包内不会直接使用该包

4. 代码包初始化

代码包的初始化函数 init ,是在 package block variables 之后才会执行。当一个包有多个 init 函数时,执行顺序是按照文件名的ascii码的加载执行,被导入 packageinit 会先执行,当引入了多个 package 时,执行顺序是按照文件名的ascii码顺序执行,先执行被导入包的全局变量声明表达式,接着执行 init 函数,当执行完所有被导入包的初始化后,最后再执行当前包的初始化过程。

Go学习笔记01的更多相关文章

  1. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  2. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

  3. SaToken学习笔记-01

    SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...

  4. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  5. PHP 学习笔记 01

    例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...

  6. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  7. xml基础学习笔记01

    注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...

  8. Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net

    Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...

  9. FPGA-VHDL课堂学习笔记*01

    FPGA-VHDL课堂学习笔记 记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记. 代码语言:VHDL 编程软件:MAX+plus II FPGA硬件:FLE-843 03月05日  理论课 ...

  10. [Golang学习笔记] 01 工作区和GOPATH

    Go语言3个环境变量: GOROOT:GO语言按照根路径,也就是GO语言的安装路径. GOPATH:若干工作区目录的路径.是我自己定义的工作空间. GOBIN:GO程序生成的可执行文件(executa ...

随机推荐

  1. Java代码实现对Azkaban的Flow进行设置定时

    代码如下: public class CurlToAzkaban{ public static void scheduleExecute(String flow, String cronExpress ...

  2. December 17th 2016 Week 51st Saturday

    Great minds have purpose, others only have wishes. 杰出的人有着目标,其他人只拥有愿望. Are you clear about the differ ...

  3. MySQL提权之user.MYD中hash破解方法

    经常在服务器提权的时候,尤其是windows环境下,我们发现权限不高,却可以读取mysql的datadir目录,并且能够成功下载user.MYD这个文件.但是在读取内容的时候,经常会遇到root密码h ...

  4. 基础知识:Promise(整理)

    基础知识:Promise(整理) (来自牛客网)下面关于promise的说法中,错误的是(D) A. resolve和reject都是直接生成一个进入相应状态的promise对象,其参数就是进入相应状 ...

  5. 5、Node.js 回调函数

    内容:回调函数:阻塞/同步.非阻塞.和异步区别:阻塞和非阻塞代码实例 Node.js 回调函数Node.js 异步编程的直接体现就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. ...

  6. Java中this关键字使用小结

    当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this. 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this ...

  7. cogs [HZOI 2015]有标号的二分图计数

    题目分析 n个点的二分染色图计数 很显然的一个式子 \[ \sum_{i=0}^n\binom{n}{i}2^{i(n-i)} \] 很容易把\(2^{i(n-i)}\)拆成卷积形式,前面讲过,不再赘 ...

  8. 3504. [CQOI2014]危桥【最大流】

    Description Alice和Bob居住在一个由N座岛屿组成的国家,岛屿被编号为0到N-1.某些岛屿之间有桥相连,桥上的道路是双 向的,但一次只能供一人通行.其中一些桥由于年久失修成为危桥,最多 ...

  9. bzoj 3339 Rmq Problem / mex

    题目 我的树状数组怎么那么慢啊 就是一道水题,我们考虑一下对于一个区间\([l,r]\)什么样的数能被计算 显然需要对于一个\(j\),需要满足\(j<l\)且\(nxt_{j}>r\), ...

  10. 【[IOI2005]Riv 河流】

    趁魏佬去英语演讲了,赶快%%%%%%%%%%%%%%魏佬 基本上是照着魏佬的代码写的 这其实还是一个树上背包 我们用\(dp[i][j][k]\)表示在以\(i\)为根的子树里,我们修建\(k\)个伐 ...