你的首个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详细入门教程系列(一)
一.什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下 ...
随机推荐
- 《Java基础知识》Java Lambda表达式
接触Lambda表达式的时候,第一感觉就是,这个是啥?我居然看不懂,于是开始寻找资料,必须弄懂它. 先来看一个案例: @FunctionalInterface public interface MyL ...
- Spire.Cloud 在线编辑
简介 Spire.Cloud在线编辑器是一款基于网页的 Office 文件编辑工具,支持在网页中打开.编辑.打印 Word.Excel.PPT 文件,支持将文档保存到私有云盘.支持 IE.Chrome ...
- python多线程编程-queue模块和生产者-消费者问题
摘录python核心编程 本例中演示生产者-消费者模型:商品或服务的生产者生产商品,然后将其放到类似队列的数据结构中.生产商品中的时间是不确定的,同样消费者消费商品的时间也是不确定的. 使用queue ...
- TP5 try{}catch{}异常捕获不到 解决办法
问题:TP5用下面的方法, 想要获取抛出的异常捕获不到…… 错误的写法: try{ …… } catch (Exception $e) { echo $e->getMessage(); } 正确 ...
- 拥抱微服务,CODING 即将上线单项目多仓库功能
随着数字化时代的全面到来,越来越多的企业开始尝试物联网.人工智能等新兴技术,用以加快自身的转型速度并积极开拓新的市场.互联网的兴起让各个行业的业务场景.用户行为.交互方式等都发生了巨大的变化.线上业务 ...
- Android Battery 架构【转】
Android Battery 架构 Android电源 android中和电源相关的服务有两个他们在/frameworks/base/services/core/java/com/android/s ...
- 什么是spring框架?spring特点与好处,使用spring框架的好处是什么?
转载:https://blog.csdn.net/hht006158/article/details/80181207. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Ja ...
- LINUX OS 正常关机失败
描述:LINUX OS运行命令shutdown now显示:Telling INIT to go to single user mode.... 解决方法:运行命令exit重新登录,再运行 hal ...
- 【重学Node.js 第5篇】部署项目到腾讯云服务器
课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://github.com/hellozhangran ...
- CSS 利用 `padding-bottom` 实现固定比例的容器
复用 padding-bottom 可实现一块区域在窗口尺寸变化使始终保持自适应.对于响应式布局中的图片或视频来说比较有用. <div style="width: 100%; posi ...