Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,他们最终的目标是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”。Go语言继承了C语言语法表达,参数传递,数据类型的特点,同时在细微之处重新优化设计,形成了更新颖,更高效的语言体系。
1. Go语言的基础语法
1. 编辑说明
package main
import "fmt"
func main() {
// 终端输出hello world
fmt.Println("Hello world!")
}
Go语言编辑时更加简便省略,语法上和C语言差别不大,在换行时可直接回车跳转,无需添加分号。
2.包声明
package main
import "fmt"
func main() {
// 终端输出hello world
fmt.Println("Hello world!")
}
如上编写的程序,在编写Go程序都必须包含一个package声明,用于指定当前文件所属的包,如 package main。同时也可引入包,如 import "fmt"其实就是引入了fmt包,功能是输出最终运行结果。实现何种功能就应在程序头部引入相应的包。
3. 函数定义
func main(){
var a = []int{1, 2, 3}
Print(a...) // 解包
Print(a) // 未解包
}
func Print(a ...int{}) {
fmt.Println(a...)
}
使用func关键字定义函数,可以指定参数和返回值,每一个可执行程序中必须拥有一个main函数。
4、标识符:
Go语言标识符与其它语言类似,第一个字符必须是字母、下划线,不能是数字。
5、关键字
Go语言的25个关键字: 主要应用的有var, type, switch, struct, select, return, range, package等 Go语言的36个预定义标识符: 主要包括append, bool, byte, cap, close, complex, complex64, complex128, uint16, copy, false等
Go 语言常用特性解析
Go语言有多种特性,主要有并发编程,垃圾回收,错误处理,语言交互等。这里挑选最具有代表性的特性进行分析。
1.并发编程
package main
import (
"fmt"
"time"
)
func running() {
var times int
// 构建一个无限循环
for {
times++
fmt.Println("tick", times)
// 延时1秒
time.Sleep(time.Second)
}
}
func main() {
// 并发执行程序
go running()
// 接受命令行输入, 不做任何事情
var input string
fmt.Scanln(&input)
}
Go语言开发时设计了轻量级的协程(goroutine)和通道(channel)机制,方便编写并发程序。goroutine 其实就是线程,但是它比线程更小,因为 goroutine 在多核 cpu 环境下是并行的,如果代码块在多个 goroutine 中执行,那么我们就实现了代码的并行。
2. 错误处理
package main
import (
"fmt"
)
//结构体 fileError
type fileError struct {
}
//在结构体 fileError 上实现 Error() 方法,相当于实现了 error 接口
func (fe *fileError) Error() string {
return "文件错误"
}
//经过以上两步已经实现了error这一接口数据类型!
func main() {
conent, err := openFile()
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(conent))
}
}
//只是模拟一个错误
func openFile() ([]byte, error) { //返回一个error类型的值
return nil, &fileError{}
}
最终输出为:文件错误
Go语言可使用多返回值来处理函数调用可能出现的错误。Go 语言通过内置的错误接口提供了非常简单的错误处理机制。