Go语言特性
- 高性能,高并发
- 语法简洁,学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
Go语言的HelloWorld
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
Go程序是由包组成的,可以使用关键字package指定包名。每个Go程序都必须包含一个名为main的包,它是程序的入口。
导入其他包使用关键字import,可以导入一个或多个包,也可以使用_来省略导入的包,但是它们的初始化函数仍然会被执行。
变量和常量
Go语言中的变量和常量需要先声明后使用,可以使用关键字var来声明变量,声明的时候会自动判断变量的数据类型,使用关键字const来声明常量。
切片
在Go语言中,切片(Slice)是对数组一个连续片段的引用,所以切片是一个引用类型。切片的特点是长度可以变化,可以利用append内置方法,向切片追加新的元素。切片的基本语法如下:
var name []T //声明一个元素类型为T的切片
s := make([]T, len) //创建一个长度为len的切片s
s := arr[startIndex:endIndex] //从数组arr创建切片,从startIndex到endIndex-1
s := arr[:] //从数组arr创建切片,包含arr的所有元素
切片长度可以通过内置的len()函数获取,容量可以通过cap()函数获取。切片支持各种操作,如copy, delete, append等。切片之间可以相互赋值。切片是Go语言区别于其他语言特有的灵活、高效的特性之一。正确理解和使用切片可以提高Go语言编程的效率。
切片与C++中的vector容器的区别
Go语言的切片与C++中的vector有以下几点主要区别:
- 切片是引用类型,对切片的修改会影响底层数组,但vector是值类型,修改不会影响其他vector。
- 切片的长度可以动态变化,并且内置append方法可以高效地进行扩容。但vector的容量需提前指定或手动调整。
- 切片可以直接从一个存在的数组或切片创建,语法简单。但vector需要显式构造。
- 切片的容量可以通过cap()获取,但vector需要通过capacity()获取。
- 切片不能直接比较,vector可以直接通过==进行比较。
- 切片的存储仅由一个指向底层数组的指针和相关属性组成,内存占用小。但vector有更复杂的内存布局。
- 切片可以同时引用相同底层数组的不同部分,但vector只能代表连续的存储。
总体来说,切片更加灵活,语法简单,内存占用小,适合Go语言的设计理念。但vector提供了更丰富的方法,语义更传统,适合C++语言风格。
函数声明
函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。
func name(parameter-list) (result-list) {
body
}