走进Go语言 Day1学习笔记|青训营

89 阅读3分钟

Go语言特性

  1. 高性能,高并发
  2. 语法简洁,学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

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有以下几点主要区别:

  1. 切片是引用类型,对切片的修改会影响底层数组,但vector是值类型,修改不会影响其他vector。
  2. 切片的长度可以动态变化,并且内置append方法可以高效地进行扩容。但vector的容量需提前指定或手动调整。
  3. 切片可以直接从一个存在的数组或切片创建,语法简单。但vector需要显式构造。
  4. 切片的容量可以通过cap()获取,但vector需要通过capacity()获取。
  5. 切片不能直接比较,vector可以直接通过==进行比较。
  6. 切片的存储仅由一个指向底层数组的指针和相关属性组成,内存占用小。但vector有更复杂的内存布局。
  7. 切片可以同时引用相同底层数组的不同部分,但vector只能代表连续的存储。

总体来说,切片更加灵活,语法简单,内存占用小,适合Go语言的设计理念。但vector提供了更丰富的方法,语义更传统,适合C++语言风格。

函数声明

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

func name(parameter-list) (result-list) {
    body
}