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的集成过 ...
随机推荐
- Left join on where 区别
on 后面 直接加条件的话,不会对左边的表产生影响,on条件是在左关联时候的条件,不管如何都会返回左边表中的记录 where 加条件 才会对左边的表 生效.where条件是关联查询之后的条件
- linux 学习笔记六 tail 命令
#tail -f -n100 catalina.out 含义 从文件尾部监视catalina.out 文件 要看文件尾部100行 #tail -f -n100 catalina,out > ...
- SpringBoot应用War包形式部署到外部Tomcat
这一篇文章介绍SpringBoot应用修改默认打jar形式部署为打war包形式,部署到外部Tomcat. SpringBoot应用默认打包成为可执行jar模式让我们感觉到部署的便捷,接下来给大家介绍一 ...
- 简单分析Java中审批业务流程业务原理
- BZOJ.4572.[SCOI2016]围棋(轮廓线DP)
BZOJ 洛谷 \(Description\) 给定\(n,m,c\).\(Q\)次询问,每次询问给定\(2*c\)的模板串,求它在多少个\(n*m\)的棋盘中出现过.棋盘的每个格子有三种状态. \( ...
- RFC-RTSP
Network Working Group H. Schulzrinne Request for Comments: 2326 Columbia U. Category: Standards Trac ...
- Vue(二十)项目初始化步骤
提:需要安装 node.js / npm淘宝镜像 / webpack / vue-cli脚手架构建工具 1.创建项目 - vue init webpack framework https://gith ...
- SharePoint PowerShell 启动工作流
前言 最近,有个需求,就是需要批量更新列表内容,平时这些操作,都用powershell去完成,但是,powershell需要在服务器上操作,而服务器权限需要通过客户的层层把关,所以,这次就考虑不用命令 ...
- MAC 开启与关闭SIP
1. 查看SIP状态 在终端中输入csrutil status,就可以看到是enabled还是disabled. 2. 关闭SIP S1 重启MAC,按住cmd+R直到屏幕上出现苹果的标志和进度条, ...
- 深度残差网络(DRN)ResNet网络原理
一说起“深度学习”,自然就联想到它非常显著的特点“深.深.深”(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很容易就想到:深的网络一般会比浅的网络效果 ...