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的集成过 ...
随机推荐
- 关于@RestController注解(转发)
知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1) 如果只是使用@RestController注解Controller,则Co ...
- BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
BZOJ 洛谷 \(Description\) 给定\(n\)个区间\([L_i,R_i]\),要选出尽量多的区间,并满足它们互不相交.求最多能选出多少个的区间以及字典序最小的方案. \(n\leq2 ...
- NEO学习笔记,从WIF到地址
2018开年,先给大家拜个年,Happy Neo Year. 开年总得写点什么,就打算继续开学习笔记系列,一点一点仔细的去分析NEO. 今天说一说从WIF到地址的这一串关系. 简单说就一张图: 或 ...
- pip安装django失败
pip install django时提示 Cannot fetch index base URL https://mirrors.tuna.tsinghua.edu.cn/pypi/simple/, ...
- 【DWM1000】 code 解密4一 ANCHOR 二进宫testapprun_s
上面我们的代码分析到ANCHOR 调用了一次testapprun_s,但是后面退出后发现还是满足while 条件,逼不得已还得再次调用testapprun_s.testapprun_s 也就是这样一点 ...
- 潭州课堂25班:Ph201805201 django框架 第三课 模板路径,变量,过滤器,静态文件的引用 (课堂笔记)
第二种方法 首先 'APP_DIRS': True, 将 app 的名字在 INSTALLED_APPS 进行注册 模板变量 传的各种数据类型,和取值 过渡器: 静态文件: 在项目文件目录 中创建 ...
- python 数据类型元组与字典内置方法
1.元组 (1)元组是不可变的列表,能存多个值:如果多个值只有取得需求,没有改的需求,用元组最合理 (2)定义:在()内用逗号隔开,可以存任意类型的值 注意:当元组只有一个元素时,要在后面加逗号 # ...
- C#中#region和#endregion的用法
一.用法说明 #region 说明 Program1 #endregion 二.作用 (1)注释其中间的代码段 (2)折叠中间的代码块(折叠后的说明文字为#region后面的说明)
- 关于git的使用记录总结
1.解决Windows下git换行符报警问题 git config --global core.autocrlf false 2.撤销add的文件退出暂存区 git reset --mixed 3.g ...
- python网络编程(五)
udp广播 #coding=utf-8 import socket, sys dest = ('<broadcast>', 7788) # 创建udp套接字 s = socket.sock ...