Go使用详解
1.什么是Go
keep it simple stupid的编程语言
2.安装
以Ubuntu为例
# 下载安装包
wget https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz
# 解压到 /usr/local(或者也可以解压到自定义目录,就是需要对应配置一下路径)
sudo tar -C /usr/local -xzf go1.6.3.linux-amd64.tar.gz
# 更新 PATH 环境变量,在 ~/.bashrc 中添加下面这行
export PATH=$PATH:/usr/local/go/bin
# 启用更新
source ~/.bashrc
# 检测版本
go version
配置$GOPATH环境变量,指定go项目的工作空间workspace,package安装目录
3.常用命令
go build hello.go 就可以编译出最终执行文件,这样直接执行 ./hello 就可以看到结果
go clean 可以清理编译后的文件
go doc fmt 可以查看 fmt 包的文档
go env 显示 Go 相关的环境变量
go fmt 利用 gofmt 工具自动排版代码
go get 下载并安装 package
go install 编译并安装 package
go list 列出 package
go run hello.go 编译并运行 Go 程序
go test fmt 测试 fmt package
go tool 运行指定的 Go 工具,包括 addr2line, asm, cgo, compile, cover, dist, doc, fix, link, nm, objdump, pack, pprof, tour, trace, vet, yacc
4.go程序示例
package main
import "fmt"
func main() {
fmt.Printf("Hello World! This is wdxtub!\n")
}
运行结果:
dawang:~/Go$ go run hello.go
Hello World! This is wdxtub!
1)非注释的第一行定义包名,每个程序属于一个package,每个Go应用都包含一个名为main的包
2)import关键字引入包
5.指针
指针表示变量的内存地址
package main
import "fmt"
func main() {
i := 42
p := &i // point to i
fmt.Println(*p) // read i through the pointer
*p = 21 // set i through the pointer
fmt.Println(i) // see the new value of i
}
运行结果:
D:\Go_WorkSpace\go_orm>go run main.go
42
21
6.数组
package main
import "fmt"
func main() {
var a []int
a = append(a, 5)
a = append(a, 4)
a = append(a, 10)
for i := 0; i <len(a); i++{
fmt.Println(a[i])
}
p := []int{2, 3, 5, 7, 11, 13}
fmt.Println("p ==", p)
for i := 0; i < len(p); i++ {
fmt.Printf("p[%d] == %d\n", i, p[i])
}
}
运行结果:
D:\Go_WorkSpace\go_orm>go run main.go
5
4
10
p == [2 3 5 7 11 13]
p[0] == 2
p[1] == 3
p[2] == 5
p[3] == 7
p[4] == 11
p[5] == 13
7.字典
import "fmt"
func main() {
var a = make(map[string]int)
a["a"] = 1
a["b"] = 2
fmt.Print(a)
}
运行结果:
D:\Go_WorkSpace\go_orm>go run main.go
map[a:1 b:2]
8.分支语句
1)if
package main
import "fmt"
func main() {
if a := 1; a>0{
fmt.Println(">0")
}else{
fmt.Println("<=0")
}
}
运行结果:
>0
2)switch
package main
import "fmt"
func main() {
a := 1
switch {
case a == 0:
fmt.Println("is 0")
case a == 1:
fmt.Println("is 1")
case a == 2:
fmt.Println("is 2")
default:
fmt.Println("default")
}
}
运行结果:
is 1
package main
import "fmt"
func main() {
a := 1
switch a{
case 0:
fmt.Println("is 0")
case 1:
fmt.Println("is 1")
case 2:
fmt.Println("is 2")
default:
fmt.Println("default")
}
}
运行结果:
is 1
3)select
select是go中的一个控制结构,类似用于通信的switch语句,每个case必须是一个通信操作,要么是发送要么是接收,select随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。
9.并发与通信
待完善
10.其他
1)defer
函数中定义,但是在函数结束后才执行的表达式
2)panic
待定
3)recover
待定
4)iota
计数器,值会累加
Go使用详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- .NET应用和AEAI CAS集成详解
1 概述 数通畅联某综合SOA集成项目的统一身份认证工作,需要第三方系统配合进行单点登录的配置改造,在项目中有需要进行单点登录配置的.NET应用系统,本文专门记录.NET应用和AEAI CAS的集成过 ...
随机推荐
- Ubuntu安装软件时提示依赖项配置错误
在终端中使用dpkg安装软件时有时会出现依赖项配置错误的情况, 解决方法是使用指令 sudo apt-get install -f 安装Ubuntu 16.04新系统不再配有的缺失依赖项,之后再次输入 ...
- BZOJ4964 : 加长的咒语
把$($看作$-1$,$)$看作$1$,设$a$为前缀和,则相当于找两个位置$x,y$使得$a[x]=a[y]$,且$a[x]$是$[x,y]$的区间最大值. 求出询问区间的最大值$o$,然后找到$o ...
- python网络编程(五)
udp广播 #coding=utf-8 import socket, sys dest = ('<broadcast>', 7788) # 创建udp套接字 s = socket.sock ...
- JS 之 script标签
1.script标签 1.js代码的解析(包括下载js文件)会阻塞页面加载 2.当js文件放在头部,页面必须等所有js代码都被下载,解析和执行完成后才开始呈现页面内容(遇到body标签才呈现),对于那 ...
- Android requestcode resultcode的作用
requestcode 一个页面的不同事件,激发不同的函数,startActivityForResult中传入不同的请求码的值以调用下一个界面,在被调用界面结束返回第一个界面时,请求码会自动返回(自动 ...
- python之面向对象高级
一.__slots__ 1.__slots__的概念:是一个变量,变量值可以是列表,元组,或者可迭代对象,也可以是一个字符串. 2.使用点来访问属性本质就是在访问类或者对象的__dict__属性字典( ...
- Deepin 15.4 更改为 阿里云源
自带的 软件包源 不好用,卡顿严重,准备替换它: 方式一:deepin linux 如何更新或者更换软件源(注意:好像不起作用) 方式二:[推荐]利用 阿里云 提供的镜像快速更换本地的 yum 源 ( ...
- 唯美PS转手绘之SAI篇_百度经验
唯美PS转手绘之SAI篇 https://jingyan.baidu.com/article/fd8044fad3d5c05030137a5f.html
- unity加载ab后,场景shader不起效问题(物件表现黑色)
需要把unity自带的shader,加入到默认列表
- x264阅读记录-1
x264阅读记录-1 采用x264版本是x264-snapshot-20060316-2245. 1. main函数 x264的main函数位于x264.c中,下面是main函数调用情况: (1)_s ...