前言

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. [转发]CPU个数、CPU核心数、CPU线程数

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...

  2. 期初付年金(annuity-due)

    含义:在 n 个时期,每个时期初付款1元. ——期初付年金的现值因子 ——期初付年金的积累值因子 关系: 二.期初付年金和期末付年金的关系

  3. apt安装mysql

    使用 APT 安装 MySQL 参考官方文档 apt-get install mysql-server 这将安装MySQL服务器的包,以及客户端和数据库公共文件的包. 在安装过程中,系统会要求您为ro ...

  4. Html5 移动应用软件开发框架 JqueryMobile SenchaTouch 介绍

    一.JqueryMobile 介绍 jQuery Mobile 是 jQuery 在手机上和平板设备上的版本. jQuery Mobile 不仅会给主流移动平台带来 jQuery 核心库,而且会发布一 ...

  5. CyclicBarrier和CountDownLatch笔记

    一.CyclicBarrier的使用 Barrier是栅栏,障碍物的意思,这里将它理解为栅栏. Cyclic是重复利用的意思. CyclicBarrier:可重复利用的栅栏.这里附上官方文档的一句解释 ...

  6. [CTSC2018]假面

    题目 先来考虑一下第一问,血量有\(P\)的概率减\(1\) 由于我们最后需要求每一个人的期望血量,于是考虑维护出每个人处于不同血量时候的概率 一个简单\(dp\)即可 \[dp_{i,j}=dp_{ ...

  7. Kali-linux免杀Payload生成工具Veil

    Veil是一款利用Metasploit框架生成相兼容的Payload工具,并且在大多数网络环境中能绕过常见的杀毒软件.本节将介绍Veil工具的安装及使用. 在Kali Linux中,默认没有安装Vei ...

  8. Kali-linux使用Nessus

    Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Nessus可同时在 ...

  9. js中this应用

    this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 1.纯粹函数调用. function test() { this. ...

  10. 【noip 模拟赛curse,light,maze】 题解

    2018.10.16 总结:考的不好 原因: 1.考的时候没状态,读题读不进去 2.考的时候不仔细,该得分没得到 T1:curse 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到 ...