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的集成过 ...
随机推荐
- the secrets
prime time productions: my life had collepes arround me? i have worked myselft into exhaustion. my f ...
- 虚幻开放日2017ppt
虚幻开放日2017ppthttp://pan.baidu.com/s/1c1SbcKK 如果挂了QQ+378100977 call我
- BZOJ.4453.cys就是要拿英魂!(后缀数组 单调栈)
BZOJ 求字典序最大,容易想到对原串建后缀数组求\(rk\). 假设当前区间是\([l,r]\),对于在\([l,r]\)中的两个后缀\(i,j\)(\(i<j\)),显然我们不能直接比较\( ...
- Shell脚本笔记(五)Shell函数
Shell函数 1.定义语法 标准写法: funciton funName () { order....... return n } 简化写法1: funciton funName { order.. ...
- 【开源GPS追踪】 之 服务器端opengts安装
国内大多数GPS追踪/定位 平台都是基于opengts 二次开发的,opengts 是一款开源的gps 跟踪软件. 下面摘自百度百科: OpenGTS ™(“GPS跟踪系统”)是第一个可用的开源项目, ...
- C++程序设计方法3:移动构造函数
移动拷贝构造函数 语法: ClassName(ClassName&&); 目的: 用来偷“临时变量”中的资源(比如内存) 临时变量被编译器设置为常量形式,使用拷贝构造函数无法将资源偷出 ...
- 3. Spring 核心之 IOC(控制反转) & DI(依赖注入)
注:此文摘自 http://blog.csdn.net/it_man/article/details/4402245 IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述 ...
- 向json对象中添加数组
// JSONArray jsonArray = new JSONArray();// for (int i = 0; i < list.size(); i++) {// JSONObject ...
- Yii2 数组助手类arrayHelper
数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $na ...
- Java 调用 shell 脚本详解
这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...