你的首个golang语言详细入门教程 | your first golang tutorial
本文首发于个人博客https://kezunlin.me/post/a0fb7f06/,欢迎阅读最新内容!
your first golang tutorial
go tutorial
versions:
- go: 1.13.1
 
install
wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.13.1.linux-amd64.tar.gz
ll /usr/local/go
vim ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc
zsh uses env profile
~/.zshrc, bash use env profile~/.bashrc.
check version
go version
go version go1.13.1 linux/amd64
uninstall
just delete  /usr/local/go
set GOPATH
Create your workspace directory, $HOME/go.
The
GOPATHenvironment variable specifies the location of your workspace. If noGOPATHis set, it is assumed to be$HOME/goon Unix systems.
Note that
GOPATHmust not be the same path as your Go installation.
issue the commands
vim .bashrc
# for golang
export GOPATH=$HOME/go
export PATH=/usr/local/go/bin:$GOPATH:$PATH
source .bashrc
#go env -w GOPATH=$HOME/go
$ echo $GOPATH
/home/kezunlin/go
$ go env GOPATH
/home/kezunlin/go
code organization
- Go programmers typically keep all their Go code in a single workspace.
 - A workspace contains many version control repositories (managed by Git, for example).
 - Each repository contains one or more packages.
 - Each package consists of one or more Go source files in a single directory.
 - The path to a package's directory determines its import path.
 
like this
bin/
    hello                          # command executable
    outyet                         # command executable
src/
    github.com/golang/example/
        .git/                      # Git repository metadata
    	hello/
        	hello.go               # command source
    	outyet/
        	main.go                # command source
        	main_test.go           # test source
    	stringutil/
        	reverse.go             # package source
        	reverse_test.go        # test source
    golang.org/x/image/
        .git/                      # Git repository metadata
    	bmp/
        	reader.go              # package source
        	writer.go              # package source
    ... (many more repositories and packages omitted) ...
Note that
symbolic linksshould not be used to link files or directories into your workspace.
An
import pathis a string that uniquely identifies a package.
go example
your first program
mkdir -p $GOPATH/src/github.com/kezunlin/hello
cd $GOPATH/src/github.com/kezunlin/hello
vim hello.go
with code
package main
import "fmt"
func main() {
	fmt.Printf("hello, world\n")
}
build and run
go build
./hello
hello, world
install and clean binary files
# install hello to $HOME/go/bin
go install  
# clean $HOME/go/bin/*
go clean -i
~/go/src$
go build github.com/kezunlin/hello/
~/go/src$go install github.com/kezunlin/hello/
your first library
stringutil library
mkdir -p $GOPATH/src/github.com/kezunlin/stringutil
cd $GOPATH/src/github.com/kezunlin/stringutil
vim reverse.go
code
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}
package name
where
nameis the package's default name for imports. (All files in a package must use the same name.)
executable commands must always usepackage main.
build library
go build github.com/kezunlin/stringutil
#This won't produce an output file. Instead it saves
#the compiled package in the local build cache.
use stringutil in hello.go
package main
import (
    "fmt"
    "github.com/kezunlin/stringutil"
)
func main() {
    fmt.Printf("hello, world\n")
    fmt.Println(stringutil.Reverse("!oG ,olleH"))
}
build and install
go build github.com/kezunlin/hello
go install github.com/kezunlin/hello
~/go/bin$ ./hello
hello, world
Hello, Go!
folder structure
 tree .
.
├── bin
│   └── hello
└── src
    └── github.com
        └── kezunlin
            ├── hello
            │   └── hello.go
            └── stringutil
                └── reverse.go
6 directories, 3 files
testing
You write a test by creating a file with a name ending in _test.go that contains functions named TestXXX with signature func (t *testing.T). The test framework runs each such function; if the function calls a failure function such as t.Error or t.Fail, the test is considered to have failed.
- file name: xxx_test.go
 - function name: TextXXX
 - error:  
t.Errorort.Fail 
package stringutil
import "testing"
func TestReverse(t *testing.T) {
	cases := []struct {
		in, want string
	}{
		{"Hello, world", "dlrow ,olleH"},
		{"Hello, 世界", "界世 ,olleH"},
		{"", ""},
	}
	for _, c := range cases {
		got := Reverse(c.in)
		if got != c.want {
			t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
		}
	}
}
test ok
 $ go test github.com/kezunlin/stringutil
 ok  	github.com/kezunlin/stringutil 0.165s
test error
--- FAIL: TestReverse (0.00s)
    reverse_test.go:16: Reverse("Hello, 世界2") == "2界世 ,olleH", want "界世 ,olleH"
FAIL
exit status 1
FAIL    github.com/kezunlin/stringutil  0.003s
remote packages
$ go get github.com/golang/example/hello
$ $GOPATH/bin/hello
Hello, Go examples!
go commands
go help gopath
go help importpath
go help test
go build
go install
go clean
go get # fetch,build and install
Reference
History
- 20191011: created.
 
Copyright
- Post author: kezunlin
 - Post link: https://kezunlin.me/post/a0fb7f06/
 - Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
 
你的首个golang语言详细入门教程 | your first golang tutorial的更多相关文章
- ant使用指南详细入门教程
		
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
 - <转载>ant使用指南详细入门教程 http://www.jb51.net/article/67041.htm
		
这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...
 - gulp详细入门教程
		
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
 - gulp详细入门教程(转载)
		
本文转载自: gulp详细入门教程
 - Docker最详细入门教程
		
Docker原理.详细入门教程 https://blog.csdn.net/deng624796905/article/details/86493330 阮一峰Docker入门讲解 http://ww ...
 - Kibana详细入门教程
		
Kibana详细入门教程 目录 一.Kibana是什么 二.如何安装 三.如何加载自定义索引 四.如何搜索数据 五.如何切换中文 六.如何使用控制台 七.如何使用可视化 八.如何使用仪表盘 一.K ...
 - Golang语言的入门开始
		
一.golang介绍与安装 二.golang-hello world 三.golang的变量 四.golang的类型 五.golang的常量 六.golang的函数(func) 七.golang的包 ...
 - go语言快速入门教程
		
go快速入门指南 by 小强,2019-06-13 go语言是目前非常火热的语言,广泛应用于服务器端,云计算,kubernetes容器编排等领域.它是一种开源的编译型程序设计语言,支持并发.垃圾回收机 ...
 - ActiveMQ详细入门教程系列(一)
		
一.什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下 ...
 
随机推荐
- GHOST CMS - Package.json
			
Package.json The package.json file is a set of meta data about a theme. package.json 文件是一组关于主题的元数据. ...
 - [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
			
由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...
 - Bash脚本编程之脚本基础和bash配置文件
			
脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成 ...
 - IT兄弟连 HTML5教程 在移动设备上设置原始大小显示
			
在iPhone系列和iPod Touch中使用的是Safari浏览器,它支持前面介绍的媒体查询表达式.例如,使用iPhone 320px×480px的分辨率去访问我们前面的布局示例,却无法得到我们想看 ...
 - 持续集成(CI):Jmeter+Ant+Jenkins定时构建
			
这里Jenkins的安装部署以及工程项目的整体配置不做赘述,其它博文已经说明,这里主要是赘述Ant的相关配置,build.xml文件配置以及项目中的部分配置 一.build.xml 在Ant的安装目录 ...
 - Centos7部署mysql
			
安装mysql yum install mysql mysql-server 会出现以下错误: [root@yl-web yl]# yum install mysql-server Loaded pl ...
 - 极客时间-vue开发实战学习(ant-design vue作者)
			
vue基础 属性 事件 插槽 指令(Directives) 生命周期 底层原理 vue生态 路由管理器vue Router 状态管理器vuex 同构Nuxt vue实战 实战项目-ant-desing ...
 - TensorFlow实现图像卷积并可视化示例
			
图片尺寸要自己修改. 看起来好像没啥意思,不知道下一步能干什么,先卷了再说.由于weights是随机生成的(tf.random_normal作用:用于从服从指定正太分布的数值中取出随机数),所以每次卷 ...
 - Hive数据类型和DDL操作
			
hive命令 在Linux下的命令行中直接输入如下命令,可以查看帮助信息: # hive -help 常用的如-e.-f参数. 使用-e参数,可以直接在命令行传递SQL语句进行hive表数据的查询: ...
 - 通过pipeline实现jenkins的ci/cd功能
			
pipeline是基于groove进行实现的,不过从jenkins官方的说明中,pipeline分为脚本式和声明式,参见链接.经过对两种的比较,个人比较偏向脚本式的方法.也就是 Jenkinsfile ...