1. 安装说明

Ubuntu 下直接安装 Go 1.11 版本编译器时需要依赖 Go 1.4 版本。所以如果在使用 apt-get install go安装时参考以下链接安装:https://blog.csdn.net/y5492853/article/details/79932882

国外官网 https://golang.org/dl/

国内官网 https://golang.google.cn/dl/

2. 安装 Go 1.12

  1. 下载安装包
wget https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz
  1. 解压至 /usr/local目录
sudo tar -C /usr/local -xzf go1.12.4.linux-amd64.tar.gz
  1. 修改环境变量
vi ~/.profile

在文件后面增加

export GOROOT="/usr/local/go"    // Go 的安装目录。也就是刚才解压缩指定的路径
export GOPATH=$HOME/gocode      // 本机配置的 Go 代码目录
export GOBIN=$GOPATH/bin    // Go 代码编译后的可执行文件存放目录
export PATH=$PATH:$GOPATH:$GOBIN:$GOROOT/bin    // 将 Go 安装目录添加进操作系统 PATH 路径
  1. 保存并退出,并执行
source ~/.profile
  1. 重启系统
  2. 查看是否安装成功
wohu@wohu:~$ go version
go version go1.12.4 linux/amd64

3. 第一个 Go 程序

一个常见的 Go 工程的基本结构声明流程如下:

  1. 包引用声明。
  2. 标准库或第三方开源库引用。
  3. 常量声明。
  4. 变量声明。
  5. 结构体及其所属方法声明。
  6. 默认初始化方法声明。
  7. 主函数声明。
  8. 普通函数声明。

代码模板示例:

// 包引用
package main
// 库引用
import "fmt"
// 常量声明
const s1 = "wohu"
// 变量声明
var s2 string = "wohu"
// 结构体及其所属方法声明
type T struct {}
func (t T) Func1() {}
// 初始化方法声明
func init() {}
// 主函数声明
func main() {fmt.Println(s2)
}
// 普通函数声明
func Func2() {}

新建一个文本文件 hello,并编辑以下内容,文本文件以 .go 为后缀名

package main    import "fmt"func main() {/*  注释 */fmt.Println("Hello, World!")
}

执行以上代码输出

$ go run hello.go
Hello, World!

3.1 程序结构说明

  • package main

定义包名, 必须在源文件中非注释的第一行指明这个文件属于哪个包。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

  • import “fmt”

导入 fmt 包,fmt 包实现了格式化 IO(输入/输出)的函数。

  • function main

func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。

  • /_ _/ 注释

单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /*_ 开头,并以 *_/ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

  • fmt.Println(…)

可以将字符串输出到控制台,并在最后自动增加换行字符 \n

  • 行分隔符

在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
如果你打算将多个语句写在同一行,它们则必须使用;人为区分,但在实际开发中我们并不鼓励这种做法。

  • 标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A-Z和a-z)数字(0-9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public)。

标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

  • 空格

Go 语言中变量的声明必须使用空格隔开,如: var age int

3.2 Go 源代码特点

  • 源程序以 .go 为后缀
  • 源程序默认为 UTF-8编码
  • 标识符区分大小写
  • 语句结尾的分号可以省略
  • 函数以 func 开头,函数体开头的 { 必须在函数头所在行的尾部,不能单独起一行
  • 字符串字面量使用 " "双引号括起来;字符字面量 rune 使用 ' ' 单引号括起来
  • 调用包里面的方法使用 . 点翻个访问符,这一点和 Python 一样
  • main 函数所在的包名必须为 main
  • 强类型静态编译型语言

4. VS Code 配置 Go 语言开发环境

在使用 VS Code 配置 Go 开发环境安装 Go 的相关插件时,会有类似如下的错误:

Error: Command failed: /usr/local/go/bin/go get -v github.com/ramya-rao-a/go-outline

由于种种原因,我们无法使用 VS Code 一键安装对应的插件,所以需要手动的下载插件源码包进行安装。

4.1 创建 golang.org 目录

创建 golang.org 目录,并进入该目录。

wohu@wohu:~$ mkdir -p $GOPATH/src/golang.org/x/
wohu@wohu:~$ cd $GOPATH/src/golang.org/x/
wohu@wohu:~/gocode/src/golang.org/x$

4.2 下载 golang.org 源码

下载 golang.org工具源码

wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/tools.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/lint.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/sys.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/net.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/text.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/crypto.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/mod.git;
wohu@wohu:~/gocode/src/golang.org/x$ git clone https://github.com/golang/xerrors.git

4.3 创建 github.com 目录

wohu@wohu:/$ cd $GOPATH/src
wohu@wohu:~/gocode/src$
wohu@wohu:~/gocode/src$ mkdir github.com
wohu@wohu:~/gocode/src$ ls
github.com  golang.org
wohu@wohu:~/gocode/src$ cd github.com/
wohu@wohu:~/gocode/src/github.com$

4.4 下载 github.com 源码

创建一个 download.sh 的脚本, 然后将以下内容拷贝进去。

#!/bin/bash
cd $GOPATH/src;
mkdir github.com;
cd $GOPATH/src/github.com;
mkdir acroca cweill derekparker go-delve josharian karrick mdempsky pkg ramya-rao-a rogpeppe sqs uudashr ;
cd $GOPATH/src/github.com/acroca;
git clone https://github.com/acroca/go-symbols.git;
cd $GOPATH/src/github.com/cweill;
git clone https://github.com/cweill/gotests.git;
cd $GOPATH/src/github.com/derekparker;
git clone https://github.com/derekparker/delve.git;
cd $GOPATH/src/github.com/go-delve;
git clone https://github.com/go-delve/delve.git;
cd $GOPATH/src/github.com/josharian;
git clone https://github.com/josharian/impl.git;
cd $GOPATH/src/github.com/karrick;
git clone https://github.com/karrick/godirwalk.git;
cd $GOPATH/src/github.com/mdempsky;
git clone https://github.com/mdempsky/gocode.git;
cd $GOPATH/src/github.com/pkg;
git clone https://github.com/pkg/errors.git;
cd $GOPATH/src/github.com/ramya-rao-a;
git clone https://github.com/ramya-rao-a/go-outline.git;
cd $GOPATH/src/github.com/rogpeppe;
git clone https://github.com/rogpeppe/godef.git;
cd $GOPATH/src/github.com/sqs;
git clone https://github.com/sqs/goreturns.git;
cd $GOPATH/src/github.com/uudashr;
git clone https://github.com/uudashr/gopkgs.git;

执行该脚本。

wohu@wohu:~/gocode/src/github.com$ sh download.sh

4.5 创建安装脚本并执行

创建安装脚本 install.sh,并拷贝以下内容。

#!/bin/bash
cd $GOPATH/src
go install github.com/mdempsky/gocode
go install github.com/uudashr/gopkgs/cmd/gopkgs
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install github.com/rogpeppe/godef
go install github.com/sqs/goreturns
go install github.com/derekparker/delve/cmd/dlv
go install github.com/cweill/gotests
go install github.com/josharian/impl
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install golang.org/x/lint/golint

4.6 安装插件脚本合集

也可以忽略步骤 1-5,直接用下面的脚本进行安装,简单快捷。

#!/bin/bash
cd $GOPATH/src;
mkdir github.com;
cd $GOPATH/src/github.com;
mkdir acroca cweill derekparker go-delve josharian karrick mdempsky pkg ramya-rao-a rogpeppe sqs uudashr ;
cd $GOPATH/src/github.com/acroca;
git clone https://github.com/acroca/go-symbols.git;
cd $GOPATH/src/github.com/cweill;
git clone https://github.com/cweill/gotests.git;
cd $GOPATH/src/github.com/derekparker;
git clone https://github.com/derekparker/delve.git;
cd $GOPATH/src/github.com/go-delve;
git clone https://github.com/go-delve/delve.git;
cd $GOPATH/src/github.com/josharian;
git clone https://github.com/josharian/impl.git;
cd $GOPATH/src/github.com/karrick;
git clone https://github.com/karrick/godirwalk.git;
cd $GOPATH/src/github.com/mdempsky;
git clone https://github.com/mdempsky/gocode.git;
cd $GOPATH/src/github.com/pkg;
git clone https://github.com/pkg/errors.git;
cd $GOPATH/src/github.com/ramya-rao-a;
git clone https://github.com/ramya-rao-a/go-outline.git;
cd $GOPATH/src/github.com/rogpeppe;
git clone https://github.com/rogpeppe/godef.git;
cd $GOPATH/src/github.com/sqs;
git clone https://github.com/sqs/goreturns.git;
cd $GOPATH/src/github.com/uudashr;
git clone https://github.com/uudashr/gopkgs.git;cd $GOPATH/src;
mkdir -p golang.org/x;
cd golang.org/x;
git clone https://github.com/golang/tools.git;
git clone https://github.com/golang/lint.git;
git clone https://github.com/golang/sys.git;
git clone https://github.com/golang/net.git;
git clone https://github.com/golang/mod.git;
git clone https://github.com/golang/xerrors.git;
git clone https://github.com/golang/text.git;
git clone https://github.com/golang/crypto.git;cd $GOPATH/src;
go install github.com/mdempsky/gocode;
go install github.com/uudashr/gopkgs/cmd/gopkgs;
go install github.com/ramya-rao-a/go-outline;
go install github.com/acroca/go-symbols;
go install github.com/rogpeppe/godef;
go install github.com/sqs/goreturns;
go install github.com/derekparker/delve/cmd/dlv;
go install github.com/cweill/gotests;
go install github.com/josharian/impl;
go install golang.org/x/tools/cmd/guru;
go install golang.org/x/tools/cmd/gorename;
go install golang.org/x/lint/golint;
go install golang.org/x/tools/gopls;

总结:

  • gocode 用于代码只能提示
  • delve 用于调试源码
  • gopkgs 用于对当前文件实现智能的包导入
  • golint 用于在保存文件时检查语法
  • godef 用于跳转到定义包
  • gopls 是官方的语言服务器 Go Language Server,也可以实现 Go 语言的代码智能提示和跳转到定义包等功能

5. VS Code 远程开发配置

如果要使用 VS Code 进行远程连接服务器进行开发时,请参考以下链接进行相应的配置:

Win10环境下配置VScode远程开发ssh-remote(免密登录)
VSCode 配置阿里云CentOS 7.6 远程开发
VSCode安装GO语言依赖工具
Windows64 Visual Studio Code 安装go插件失败分析及解决方案
windows下 go vscode编译运行方法
vsCode保存时代码自动格式化

Go 学习笔记(1)— Ubuntu 系统 Go 环境搭建、VS Code 配置 Go 开发环境、VS Code 远程开发配置相关推荐

  1. PhysX学习笔记2 -cloth系统3d模型的导入

    PhysX学习笔记2 -cloth系统3d模型的导入 PhysX的cloth的demo中,3d模型是用.obj格式. 环境:win2000, PhysX安装包: PhysX_6.11.01_Syste ...

  2. Linux学习笔记之——Linux系统内部相关介绍

    Linux学习笔记之--Linux系统内部相关介绍 摘要:主要记录一些比较有用的能够帮助理解和使用Linux的知识.比如一些相关概念.没兴趣的看看就好.知道有这么个东西.注意事项.和一些常用目录的作用 ...

  3. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  4. oracle如何往dg加盘_学习笔记:Oracle DG系统 主备库中表空间和数据文件增加删除等管...

    天萃荷净 Oracle Data Guard表空间和数据文件管理汇总 汇总日常工作中操作,在Oracle DG结构系统中,如何删除备库表空间和数据文件,如何管理主库与备库之间的文件系统,详见文章内容. ...

  5. Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

    Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  6. 「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析

    「Vue 学习笔记 1」Vue 项目快速搭建,初始项目各个文件夹作用介绍和启动代码执行流程分析 前言 一.我的开发环境 二.使用 Vue CLI (Vue 脚手架)快速搭建项目 三.初始项目的目录结构 ...

  7. 在Ubuntu系统使用Nginx搭建RTMP服务器

    在Ubuntu系统使用Nginx搭建RTMP服务器 参考链接:nginx搭建rtmp服务器 简介 本文简单记录了在Ubuntu18.04系统上使用nginx搭建RTMP服务器的方法. 安装 下载ngi ...

  8. OpenStack环境搭建(三:Computer与Controller节点的安装及配置)

    实验要求: 完成Virtual box平台安装,会应用相关操作: 在virtual box虚拟平台上部署Fuel Master节点: 在virtual box虚拟平台上部署计算节点Computer: ...

  9. 【学习笔记】Ubuntu双系统+搭建个人服务器

    Ubuntu双系统+搭建个人服务器 前言 1. Ubuntu+Win双系统 1.1 制作U盘启动盘 1.2 系统分盘 1.3 安装Ubuntu系统 2. 搭建个人服务器 2.1 设置root 2.2 ...

  10. 『Python学习笔记』Mac系统汇总:终端文件显示不同颜色Pycharm代码模板JAVA环境变量

    Mac系统:终端文件显示不同颜色&Pycharm代码模板&JAVA环境变量! 文章目录 一. 显示不同颜色 二. mac电脑怎么设置触控板拖动 三. mac系统中termius终端中文 ...

最新文章

  1. iBATIS.NET DataMapper V1.3 Beta and DataAccess V1.7 Beta发布了
  2. 浅议数据中心规划设计阶段暖通系统节能措施
  3. 【机器学习基础】机器学习距离与相似度计算
  4. Java中发送结构体
  5. 练习三十七:对获取数据进行排序
  6. Ocelot简易教程(三)之主要特性及路由详解
  7. jzoj3464-秀姿势【hash】
  8. java equ,Java equals方法详解
  9. Mybatis的案例和接口代理开发和模板配置
  10. 哈工大计算机报深圳还是本部,哈工大本部和哈工大深圳哪个比较好?
  11. 陆振波的svm的matlab代码的解释,陆振波SVM的MATLAB代码解释
  12. matlab2014b下载 32位,matlab 2014b 32位
  13. json转换为对象 java对象数组对象_将json数组转换为java列表对象
  14. 论文绘图-教你如何绘制响应面
  15. deepin,windows10双系统安装教程
  16. C在mac上用不了malloc.h头文件的解决方法
  17. 安卓手机有坏点测试软件,手机屏幕坏点怎么检测
  18. 数学建模Latex简易模板
  19. 怎么压缩解压打包文件???
  20. oracle中的INTERVAL函数用法

热门文章

  1. weblogic项目java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配 at oracle.jdbc.....错误解决
  2. libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
  3. 难忘的一天——装操系统(五)
  4. pytorch系列 -- 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization...
  5. ESLint问题记录
  6. PyTorch 神经网络
  7. CodeGen编写自定义表达式标记
  8. 部署通用基础设施, 满足顶级 SLA 要求
  9. 服务器技术综述(四)
  10. TensorRT-安装-使用