一、Go语言简介
Go 编程语言是一个开源项目,它使程序员更具生产力。Go 语言具有很强的表达能力,它简洁、清晰而高效。得益于其并发机制, 用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。 它是一个快速的、静态类型的编译型语言,感觉却像动态类型的解释型语言。(摘取自官网)
Go语言,作为编程语言的后生,站在巨人的肩膀上,吸收了其他一些编程语言的特点。Go 语言在2009年11月进行开源,2012年发布Go 1 稳定版本。从此之后社区日渐活跃。Go语言开发应对高并发的web服务程序,有着相对于其他语言而言更高的开发效率,所以两个至少有两个十分常见的场景适用。一个是商城的秒杀(12306的抢票),另一个是游戏服务器的开发。
二、从 hello world 开始
Go语言程序有着特定的结构,我们先从一个简单hello world 开始分析。请看下面代码
package main
import "fmt"
func main() {
/* hello world */
fmt.Println("Hello, World!")
}
package main
定义一个名为 main 的 包. 包中必须有个main函数,这是Go语言程序运行的唯一入口,也就是说,它是必要的,并且是唯一的。
import "fmt"
引入名为 fmt 的包,因为我们下面的代码使用了 fmt 包中的函数 PrintIn
,也就是说,要使用某个包中的函数,必须引用函数所属的包。
func main(){}
定义了一个main 函数,这是程序运行的入口,{}
花括号左右分别表示函数体的开始和结束
/* ... */
多行注释,用于增加代码可读性,方便维护。除此之外还有单行注释 //...
fmt.Println("...")
调用fmt 中的 Println
该函数将会把传进去的参数在控制台输出并且最后加上换行符 \n
。
三、Go的基础语法
1、行分隔符 — 以行断句
Go 语言与其他(大多数)语言不同的是,Go语言以行为单位区分语句的结束,不需要像C,C#,PHP等语言那样以;
结尾(加了也没关系)。但是如果你要把两个语句写在同一行内,那中间必须用;
加以分隔,如下面的例子
一行一句
fmt.Println("line 1")
fmt.Println("line 2")
多句一行,不推荐,降低了代码的可维护性
fmt.Println("line 1");fmt.Println("line 2");fmt.Println("line 3")
2、注释
注释分为单行注释和多行注释
//这是单行注释
/*
这是多行注释
这是多行注释
*/
3、标识符
Go 的变量命名与其他语言相同,首先要避免预留关键字(保留字),变量类型等,如 int float,具体请查看go文档。然后只能字母或下划线开头。命名尽量做到见名知意。如定义学生名字的字段, student_name := 'jack'
而不是 a := 'jack'
,函数命名也该如此。
Go 25个关键字
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
除此之外 Go 语言还有 36 个预定义标识符
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
---|---|---|---|---|---|---|---|---|
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
看到上面者这些,一句话送给刚入门编程的童鞋,IDE是个好东西,当你命名一个变量,发现颜色有所不同,那估计就是碰上上面那些了,避免之。就算我不说你迟早会发现的,所以这是句废话,看过就过吧。
4、可阅读性
关于可阅读性,建议规范一下。首先命名就是我上面所说的,宁愿变量长一点也要让变量的作用更清晰点(见名知意),然后缩进,缩进体现代码的层次结构,该缩进的给缩进了。最后是其他,如空格的使用,换行的使用。
缩进对比
//缩进的错误示范
func main() {
fmt.Println("Hello, World!")
}
//缩进的正确示范
func main() {
fmt.Println("Hello, World!")
}
空格的使用
//没使用空格
student_name:='jack'
//使用空格
student_name := 'jack'
命名
a := 'apple' //谁知道是水果还是手机还是其他自定义的东西
//见名知意-该变量是关于手机品牌的
phone_brand_name := 'apple'
换行
//不换行
fmt.Println("line 1");fmt.Println("line 2")
//换行
fmt.Println("line 1")
fmt.Println("line 2")