一、结构
一个Go工程中主要包含以下三个目录:
src:源代码文件
pkg:包文件
bin:相关bin文件
1: 建立工程文件夹 goproject
2: 在工程文件夹中建立src,pkg,bin文件夹
3: 在GOPATH中添加projiect路径 例 e:/goproject
4: 如工程中有自己的包examplepackage,那在src文件夹下建立以包名命名的文件夹 例 examplepackage
5:在src文件夹下编写主程序代码代码 goproject.go
6:在examplepackage文件夹中编写 examplepackage.go 和 包测试文件 examplepackage_test.go
7:编译调试包
go build examplepackage
go test examplepackage
go install examplepackage
这时在pkg文件夹中可以发现会有一个相应的操作系统文件夹如windows_386z, 在这个文件夹中会有examplepackage文件夹,在该文件中有examplepackage.a文件
8:编译主程序
go build goproject.go
成功后会生成goproject.exe文件
至此一个Go工程编辑成功。
- go文件的后缀名是 .go
- package main
表示该hello.go 文件所在的包是main,在go中,每个文件必须归属于一个包。
import "fmt"
表示,引入一个包,包名fmt,引入该包后,就可以使用fmt包的函数,比如:fmt.Println
- func main
func 是一个关键字,表示定义一个函数
mian 是函数名,是一个主函数,即程序入口。 调试运行必须要有main
fmt.Println(“hello”)
此时输出:“hello,world”
我用的是全家桶里的GoLand,就跟java配置个jdk一样,在环境变量里配置一下就可以实现Go语言的运行,非常方便,便捷。
二、语法
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类型)。
三、Go语言声明:
有四种主要声明方式:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。
Go的程序是保存在多个.go文件中,文件的第一行就是package XXX声明,用来说明该文件属于哪个包(package),package声明下来就是import声明,再下来是类型,变量,常量,函数的声明。