软件安装

安装包下载地址为:https://golang.org/dl/

如果打不开可以:

https://golang.google.cn/dl/

https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz

wget https://dl.google.com/go/go1.10.3.src.tar.gz #源码包
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz #运行包

新版(2020-04-04)
wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz

新版(2020-05-24)

wget https://dl.google.com/go/go1.14.3.linux-amd64.tar.gz

tar -zxvf go1.10.3.linux-amd64.tar.gz
mv go /usr/local/

环境变量设置
GO语言有软件工程或项目的思想,
创建项目目录
mkdir -p goapp/{src,bin,pkg}
设置项目环境变量,GOROOT为go安装目录,GOPATH为项目所在目录

vim /etc/profile
export GOROOT=/usr/local/go
export GOPATH=/usr/local/automng/src/goapp
export PATH=$PATH:$GOROOT/bin

source /etc/profile
which go
/usr/local/go/bin/go

GOPATH允许有多个路径,以冒号分隔即可;第一个目录并不完全与后面的等价,在使用go get 下载go项目时,只会写入到GOPATH的第一分区

GO 包引用
一个项目通常只有一个入口,即一个main

mkdir -p src/{main,ch01,ch02}
mkdir src/ch02/ch0201 $ cat src/ch01/a.go
package ch01
var a = "鱼只有七分钟的记忆吗?"
var b uint16=
var c bool = true //供外部调用的方法一定要以大写字母开头
func Show(){
println(a,b,c)
} $ cat src/ch02/b.go
package ch02 var a int =
var b = func Show(){
//该声明方式必须写在方法内部
c :=
println(a,b,c)
} $ cat src/ch02/ch0201/bb.go
package ch0201
import "fmt" func Show() {
const LENGTH int =
const WIDTH int =
var area int
const a, b, c = , false, "str" //多重赋值 area = LENGTH * WIDTH
fmt.Printf("面积为 : %d", area)
println()
println(a, b, c)
} $ cat src/main/main.go
package main import (
"ch01"
"ch02"
"ch02/ch0201"
) func main(){
ch01.Show()
ch02.Show()
ch0201.Show()
}

GO语言的执行
可以使用 go run aa.go的运行脚本
$ go run src/main/main.go
鱼只有七分钟的记忆吗? 65534 true
10 10 10
面积为 : 50
1 false str

编译GO脚本为可执行文件
将以上程序打包编译为一个可执行文件,前提是要设置GOPATH目录,go build会自动去$GOPATH/src目录下寻找相关目录,一个脚本中只能有一个package main包,即只有一个入口

以下这个命令可以在系统的任何目录下执行,go会自动去$GOPATH/src目录下找main目录
$ go build -o testgo main
$ ll
total 1976
-rwxrwxr-x 1 tanpengfei tanpengfei 2020337 Sep 28 10:44 testgo
$ ./testgo
鱼只有七分钟的记忆吗? 65534 true
10 10 10
面积为 : 50
1 false str

当然了,一个main目录可以有多个main包的文件,程序本身不会报错,但你就不无法在该目录下使用go build了,只能使用go run aa.go,所以建议一个包下只有一个main入口

go build的目录

go build -o execname main 中的main是一个目录,可以修改为其他目录,比如build,但这个目录是GOPATH变量中的第一个分支下的目录,比如下面的变量定义

export GOPATH=/opt/code/gopath:/disk/git/goapp/goapp:$GOPATH

那么执行go build -o execname build 表示将/opt/code/gopath/src/build目录的程序打包为execname可执行文件

因此go build -o execname build这条命令可在系统上的任意位置执行

补充说明

使用IDE创建go项目时,会自动创建三个目录:src,bin,pkg
进入一个包含main方法的目录,执行 go install ,会在pkg下生成以一个以.a为后缀的文件(对我们没用,当文件存在时不会重复生成而是直接使用),然后在bin目录下生成一个可执行文件
进入一个包含main方法的目录,执行 go build,每次都会重新拉取所有涉及到的代码编辑并生成可执行文件

重点总结

GOPATH的作用:程序的运行、编译都是以GOPATH为基础的

1.1 Go安装与项目结构初始化的更多相关文章

  1. Ionic3学习笔记(一)安装、项目结构与常用命令

    本文为原创文章,转载请标明出处 目录 安装 项目结构 常用命令 1. 安装 安装Cordova.Ionic npm install -g cordova ionic 创建一个新项目,有blank.ta ...

  2. Scrapy学习(二)、安装及项目结构

    一.安装 1.安装pywin32,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/ 我选择的是Build 221,点进去,根据自 ...

  3. 第五篇 scrapy安装及目录结构,启动spider项目

    实际上安装scrapy框架时,需要安装很多依赖包,因此建议用pip安装,这里我就直接使用pycharm的安装功能直接搜索scrapy安装好了. 然后进入虚拟环境创建一个scrapy工程: (third ...

  4. linux go环境安装和基本项目结构

    最近项目中要用到Go语言,所以简单总结一下安装和配置,Go这个语言本身就限定了很多规范,比如项目设置,编程风格等,开发中就不需要再因为各种规范问题纠结了,直接用官方规定的能避免很多坑,下面直接切正题, ...

  5. Angular4.x 安装|创建项目|目录结构|创建组件

    Angular4.x 安装|创建项目|目录结构|创建组件 安装最新版本的 nodejs node.js 官网:https://nodejs.org/zh-cn/ 去官网下载 node.js,下一步下一 ...

  6. Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、

    0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resou ...

  7. Webpack探索【2】--- 安装、项目初始化、webpack.config.js配置文件

    本文主要讲安装.项目初始化.webpack.config.js配置文件方面的内容.

  8. Ionic学习记录(一):ionic及cordova安装、创建第一个应用、项目结构

    目录: 一.ionic的安装 二.创建第一个应用程序 三.浏览器中预览应用 四.项目结构 五.添加页面 一.ionic的安装 使用Ionic创建和开发应用程序主要通过Ionic命令行实用程序(“CLI ...

  9. day1(初始化项目结构)

    1.初始化项目结构  └─shiyanlou_project    │  .gitignore    │  README.en.md           # 英文    │  README.md    ...

随机推荐

  1. OpenGL超级宝典完整源码(第五版)

    链接:https://pan.baidu.com/s/1dGQkk4T 密码:wu44 Visual Studio 2017配置OpenGL https://blog.csdn.net/qiangbi ...

  2. 后台执行UNIX/Linux命令和脚本的五种方法

    hiveserver 后台启动 nohup "${HIVE_HOME}"/bin/hive --service hiveserver2 & 1. 使用&符号在后台执 ...

  3. js的学习

    对于 ff的 relatedTarget    及IE的toElement  fromElement DOM通过event对象的relatedTarget属性提供了相关元素的信息.这个属性只对于mou ...

  4. Proxool Provider unable to load JAXP configurator file: proxoolconf.xml

    Proxool Provider unable to load JAXP configurator file: proxoolconf.xml log4j:WARN No appenders coul ...

  5. getline()函数的两种用法

    getline()函数的输入流对象可以是标准输入流对象cin,也可以是一个文件输入流对象fin; (1)输入流对象的成员函数(有三个参数,一般除非需要自己选定停止符,并不推荐使用): basic_is ...

  6. c#桌面应用程序开发--登陆窗口

    一.显示登陆窗口 应用程序入口点为Main方法,因此在Main方法中创建登陆窗体. 1)创建登陆窗体(登陆窗体UI已提前创建好); 2)显示窗体,以模式对话框的形式显示,并赋值给result; 3)判 ...

  7. Android源码树中C代码的编译

    侯 Sir说:“源码之下,了无秘密.” 但有些秘密还是要搞起来了看得更真切,仅从静态代码的体位很难体会到运动时的妙处.因此环境搭好了,下一步就是调试.gdbserver搭配gdb的调试环境走得很顺利, ...

  8. 【沽泡学院07】基于ElasticSearch搜索附近的人

    1. 为什么要选择ElasticSearch 1)ElasticSearch 优点: 分布式.实时的.Push replication 完全支持Apache Lucene的接近实时的搜索 处理多租户( ...

  9. Linux配置国内的Yum源

    因为Linux默认的yum源是国外的源,所以会有卡顿,缓慢的情况.而国内的Yum源相对速度较快,现在也比较成熟,所以给Linux更换国内Yum源是一个很好的选择. 1.  备份(备份之前需要yum i ...

  10. html二

    超链接 超链接有三种形式: 1.外部链接:链接到外部文件.举例: <a href="new.html">点击进入到新网页</a> a是英语anchor“锚” ...