后端Go语言入门指南 | 青训营

93 阅读5分钟

一、结构

一个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工程编辑成功。

  1. go文件的后缀名是 .go
  2. package main

表示该hello.go 文件所在的包是main,在go中,每个文件必须归属于一个包。

import "fmt"

表示,引入一个包,包名fmt,引入该包后,就可以使用fmt包的函数,比如:fmt.Println

  1. func main

func 是一个关键字,表示定义一个函数

mian 是函数名,是一个主函数,即程序入口。 调试运行必须要有main

fmt.Println(“hello”)

此时输出:“hello,world”

我用的是全家桶里的GoLand,就跟java配置个jdk一样,在环境变量里配置一下就可以实现Go语言的运行,非常方便,便捷。

二、语法

2.1 变量

变量表示没有固定值且可改变的数。作为静态类型的Go语言来说,Go的变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们可以修改变量的变量值,但是无法更改变量的变量类型

2.2 类型

  • 引用类型
    引用类型特指slicemapchannel这三种预定义类型。
    引用类型拥有更复杂的存储结构,除了分配内存以外,它们还须初始化一系列的属性,例如:指针、长度,甚至包含哈希分布、数据队列等。
    内置函数new可以按照指定类型长度分配零值内存,返回指针,并不关心类型内部构造和初始化方式。而引用类型必须使用make函数创建,编译器会将make转换为目标类型专用的创建函数(或指令),以确保完成全部内存分配和相关属性初始化。
  • 整数类型
    Go语言的数值类型分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8int16int32int64 等,每种数值类型都决定了对应的大小范围和是否支持正负符号。
    大多数情况下,我们只需要 int 一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。
  • 浮点数类型
    Go语言提供了两种精度的浮点数 float32float64,它们的算术规范由 IEEE754 浮点数国际标准定义,该浮点数规范被所有现代的 CPU 支持。
    一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度,通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大。
  • 复数类型
    Go语言中复数的类型有两种,分别是 complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型。
    复数的值由三部分组成 RE + IMi,其中 RE 是实数部分,IM是虚数部分,REIM 均为 float 类型,而最后的 i 是虚数单位。
    对于一个复数z := complex(x, y),可以通过Go语言的内置函数real(z)来获得该复数的实部,也就是 x;通过imag(z)获得该复数的虚部,也就是 y。
  • 布尔类型
    一个布尔类型的值只有两种:truefalse。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声明,再下来是类型,变量,常量,函数的声明。