一、结构
- go文件的后缀是 go
- pckage main
表示该hello.go 文件所在的包是main,在go中,每个文件必须归属于一个包。
import “fmt”
表示,引入一个包,包名fmt,引入该包后,就可以使用fmt包的函数,比如:fmt.Println
- func main
func 是一个关键字,表示一个函数
mian 是函数名,是一个主函数,即程序入口。 调试运行必须要有main
fmt.Println(“hello”)
表示调用fmt包的函数Println输出:“hello,world”
这里我采用的是Goland平台进行开发,所以调试起来很方便,一键run
二、语法
2.1 变量
变量表示没有固定值且可改变的数,计算机课中我们又了解到变量是一段或多段用来存储数据的内存。作为静态类型的Go语言来说,Go的变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们可以修改变量的变量值,但是无法更改变量的变量类型
2.2 类型
-
引用类型
引用类型特指slice、map、channel这三种预定义类型。
引用类型拥有更复杂的存储结构,除了分配内存以外,它们还须初始化一系列的属性,例如:指针、长度,甚至包含哈希分布、数据队列等。
内置函数new可以按照指定类型长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式。而引用类型必须使用make函数创建,编译器会将make转换为目标类型专用的创建函数(或指令),以确保完成全部内存分配和相关属性初始化。 -
整数类型
Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含int8、int16、int32、int64等,每种数值类型都决定了对应的大小范围和是否支持正负符号。
大多数情况下,我们只需要 int 一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。 -
浮点数类型
Go语言提供了两种精度的浮点数float32和float64,它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的 CPU 支持。
一个float32类型的浮点数可以提供大约 6 个十进制数的精度,而float64则可以提供约 15 个十进制数的精度,通常应该优先使用float64类型,因为float32类型的累计计算误差很容易扩散,并且float32能精确表示的正整数并不是很大。 -
复数类型
Go语言中复数的类型有两种,分别是complex128(64 位实数和虚数)和complex64(32 位实数和虚数),其中complex128为复数的默认类型。
复数的值由三部分组成RE + IMi,其中RE是实数部分,IM是虚数部分,RE和IM均为float类型,而最后的i是虚数单位。
对于一个复数z := complex(x, y),可以通过Go语言的内置函数real(z)来获得该复数的实部,也就是 x;通过imag(z)获得该复数的虚部,也就是 y。 -
布尔类型
一个布尔类型的值只有两种:true或false。if 和 for 语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型的值。
布尔型无法参与数值运算,也无法与其他类型进行转换。 -
字符串类型
字符串是一种值类型,且值不可变,即创建某个文本后将无法再次修改这个文本的内容,更深入地讲,字符串是字节的定长数组。
可以使用双引号""来定义字符串,字符串中可以使用转义字符来实现换行、缩进等效果,常用的转义字符包括: -
\n:换行符 -
\r:回车符 -
\t:tab 键 -
\u或\U:Unicode字符 -
\:反斜杠自身 -
字符类型
字符串中的每一个元素叫做“字符”,在遍历或者单个获取字符串元素时可以获得字符。
Go语言的字符有以下两种: -
一种是
uint8类型,或者叫byte型,代表了 ASCII 码的一个字符。 -
另一种是
rune类型,代表一个UTF-8字符,当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型等价于int32类型。 -
类型转换
Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明:valueOfTypeB = typeB(valueOfTypeA)。
只有相同底层类型的变量之间可以进行相互转换(如将int16类型转换成int32类型),不同底层类型的变量相互转换时会引发编译错误(如将bool类型转换为int类型)。