一 应用场景描述
聽为什么想着要学习一下Go语言?现在越来越多有名的开源项目都是使用Go语言开发的,所以了解一下Go语言的基础知识还是很有必要的。平时的工作中主要使用Shell和Python来编写运维脚本。之前已经看过无数次关于Go语言的介绍和分享帖子了。对于Go语言这种性能仅次于C和C++的后起之秀,同时又比Python这种胶水语言性能提高不少。如果以后工作中如果有需要处理性能方面的问题就可以使用Go来编写。
二 使用Go语言编写的项目
聽目前比较出名的使用Go语言编写的项目有:
聽Docker 聽 聽开源容器
聽Open Falcon 小米的开源监控工具
聽Codis 聽 聽 豌豆荚的Redis解决方案,Codis的好几个组件都是用Go语言编写的
聽Ected 聽 聽 和ZooKeeper同类工具
聽Kubernetes 谷歌开源的容器调度工具
三 Go语言基础学习
测试Go语言程序之前先安装Go语言。
CentOS 使用yum -y install go安装
1.打印Hello World!
package聽main import聽"fmt" func聽main(){ 聽聽聽聽fmt.Println("hello聽world!") 聽聽聽聽聽聽聽聽聽聽聽}
#聽go聽run聽hello-world.go聽 hello聽world! #聽go聽build聽hello-world.go聽 #聽ls hello-world聽聽hello-world.go #聽./hello-world聽 hello聽world!
2.赋值类型
package聽main import聽"fmt" func聽main()聽{ 聽聽聽聽聽fmt.Println("go"聽+聽"lang") 聽聽聽聽聽fmt.Println("1+1聽=",1+1) 聽聽聽聽聽fmt.Println("7.0/3.0聽=",7.0/3.0) 聽聽聽聽聽fmt.Println(true&&false) 聽聽聽聽聽fmt.Println(true||false) 聽聽聽聽聽fmt.Println(!true) 聽聽聽聽聽聽聽聽聽聽聽聽聽}
#聽go聽run聽values.go聽 golang 1+1聽=聽2 7.0/3.0聽=聽2.3333333333333335 false true false
3.变量
package聽main import聽"fmt" func聽main()聽{ 聽聽聽聽var聽a聽string聽=聽"initial" 聽聽聽聽fmt.Println(a) 聽聽聽聽 聽聽聽聽var聽b,c聽int聽=聽1,2 聽聽聽聽fmt.Println(b,c) 聽聽聽聽var聽d=true 聽聽聽聽fmt.Println(d) 聽聽聽聽var聽e聽int 聽聽聽聽fmt.Println(e) 聽聽聽聽f聽:=聽"short" 聽聽聽聽fmt.Println(f) }
#聽go聽run聽variable.go聽 initial 1聽2 true 0 short
4.常量
package聽main import聽"fmt" import聽"math" const聽s聽string聽=聽"constant" func聽main()聽{ 聽聽聽聽fmt.Println(s) 聽聽聽聽 聽聽聽聽const聽n聽=聽500000000 聽聽聽聽 聽聽聽聽const聽d聽=聽3e20聽/n 聽聽聽聽fmt.Println(d) 聽聽聽聽fmt.Println(int64(d)) 聽聽聽聽 聽聽聽聽fmt.Println(math.Sin(n)) }
聽go聽run聽constant.go聽 constant 6e+11 600000000000 -0.2847040732381611
5.for循环
for语句是Go语言唯一的循环语句
package聽main import聽"fmt" func聽main()聽{ 聽聽聽i聽:=1 聽聽聽for聽i聽<=聽3聽{ 聽聽聽聽聽聽fmt.Println(i) 聽聽聽聽聽聽i聽=聽i+1 聽聽聽} 聽聽聽for聽j聽:=7;j聽<=聽9;聽j++聽{ 聽聽聽聽聽聽聽fmt.Println(j) 聽聽聽} 聽聽聽for聽{ 聽聽聽聽聽聽聽聽fmt.Println("loop") 聽聽聽聽聽聽聽聽break 聽聽聽} }
#聽go聽run聽for.go聽 1 2 3 7 8 9 loop
6.if/else语句
package聽main import聽"fmt" func聽main()聽{ 聽聽聽 聽聽聽聽if聽7%2聽==聽0聽{ 聽聽聽聽聽聽聽fmt.Println("7聽is聽even") 聽聽聽聽}else{ 聽聽聽聽聽聽聽fmt.Println("7聽is聽odd") 聽聽聽聽} 聽聽聽聽if聽8%4聽==聽0聽{ 聽聽聽聽聽聽聽fmt.Println("8聽is聽divisible聽by聽4") 聽聽聽聽} 聽聽聽聽if聽num聽:=聽9;num聽<聽0聽{ 聽聽聽聽聽聽聽fmt.Println(num,"is聽negative") 聽聽聽聽}else聽if聽num聽<聽10聽{ 聽聽聽聽聽聽聽fmt.Println(num,"has聽1聽digit") 聽聽聽聽}else聽{ 聽聽聽聽聽聽聽fmt.Println(num,"has聽multiple聽digits") 聽聽聽聽} }
这里注意else语句的语句不能写成
}
else {
一定要写成 }else { 这种形式
#聽go聽run聽if.go聽 7聽is聽odd 8聽is聽divisible聽by聽4 9聽has聽1聽digit
7.switch语句
package聽main import聽"fmt" import聽"time" func聽main()聽{ 聽聽聽聽i聽:=2 聽聽聽聽fmt.Print("write",i,"聽as聽") 聽聽聽聽switch聽i聽{ 聽聽聽聽case聽聽1: 聽聽聽聽聽聽聽聽fmt.Println("one") 聽聽聽聽case聽聽2: 聽聽聽聽聽聽聽聽fmt.Println("two") 聽聽聽聽case聽聽3: 聽聽聽聽聽聽聽聽fmt.Println("three") 聽聽聽聽} 聽聽聽聽switch聽time.Now().Weekday()聽{ 聽聽聽聽case聽time.Saturday,聽time.Sunday: 聽聽聽聽聽聽聽聽聽fmt.Println("it's聽the聽weekend") 聽聽聽聽default: 聽聽聽聽聽聽聽聽聽fmt.Println("it's聽a聽weekday") 聽聽聽聽} 聽聽聽聽t聽:=聽time.Now() 聽聽聽聽switch{ 聽聽聽聽case聽t.Hour()聽<聽12: 聽聽聽聽聽聽聽聽fmt.Println("it's聽before聽noon") 聽聽聽聽default: 聽聽聽聽聽聽聽聽聽fmt.Println("it's聽after聽noon") 聽聽聽聽} }
#聽go聽run聽switch.go聽 write2聽as聽two it's聽a聽weekday it's聽after聽noon
8.数组
package聽main import聽"fmt" func聽main()聽{ 聽聽聽聽 聽聽聽聽var聽a聽[5]int 聽聽聽聽fmt.Println("emp:",a) 聽聽聽聽a[4]聽=聽100 聽聽聽聽fmt.Println("set:",a) 聽聽聽聽fmt.Println("get:",a[4]) 聽聽聽聽b聽:=聽[5]int{1,2,3,4,5} 聽聽聽聽fmt.Println("dc1:",b) 聽聽聽聽var聽twoD聽[2][3]int 聽聽聽聽for聽i聽:=0;i聽<聽2;i++聽{ 聽聽聽聽聽聽聽聽for聽j聽:=聽0;聽j聽<聽3;聽j++聽{ 聽聽聽聽聽聽聽聽聽聽聽聽twoD[i][j]聽=聽i聽+聽j 聽聽聽聽聽聽聽聽} 聽聽聽聽} 聽聽聽聽fmt.Println("2d:聽",twoD) }
#聽go聽run聽arrays.go聽 emp:聽[0聽0聽0聽0聽0] set:聽[0聽0聽0聽0聽100] get:聽100 dc1:聽[1聽2聽3聽4聽5] 2d:聽聽[[0聽1聽2]聽[1聽2聽3]]
9.切片
参考资料:
本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1783291
有疑问加站长微信联系(非本文作者)