GO语言基础

环境的搭建

环境搭建

官网下载地址:https://golang.org/dl/
根据自身的系统下载对应的golang安装包

环境搭建详情:https://www.imooc.com/video/16844

安装完成尝试使用

1
go version

安装后的Go目录为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
├── AUTHORS
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── LICENSE
├── PATENTS
├── README.md
├── SECURITY.md
├── VERSION
├── api
├── bin
├── codereview.cfg
├── doc
├── lib
├── misc
├── pkg
├── src
└── test

命令行工具

  • go build 用于编译源码文件、代码包、依赖包
  • go run 可以编译并运行Go源码文件
  • go get 用于动态获取远程代码包

IDE的设置

GoLang->Preferences->Go

GOROOT 设置为Go的安装目录,比如:/usr/local/go
GOPATH 设备Go的包存放目录,比如:/Users/xiexiang/go

Go基础语法

关键字、标识符

Go中保留的关键字只有25个

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

Go中36个预定的标识符

appendboolbtytecapclosecomplex
complex64complex128uint16copyfalsefloat32
float64imagintint8int16uint32
int32int64iotalenmakenew
nilpanicuint64printprintlnreal
recoverstringTRUEuintuint8uintprt

基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 包名称 package只能出现在文件开头
package main

// 导入的包
import (
"fmt"
"golang_learn/pkg1"
"golang_learn/pkg2"
)

// 变量的定义
var name = "xiexiang"

// 常量的定义
const URL = "https://www.baidu.com"

// 初始化函数 相当于php中的构造方法
func init() {
fmt.Println("这里是main函数的init")
}

// 自定义函数
func test() {
// 函数主体
}

// main主入口方法
func main() {
pkg1.Show()
pkg2.Show()
fmt.Println("this is main!")
}

/**
* - 这种属于多行注释
* /

Package 的用法

注意点:

  • package 是最基本的分发单位和工程管理中依赖关系的提现;
  • 每个GO语言原代码文件开头都拥有一个package声明,表示源码文件所属代码包;
  • 要生成GO语言可执行文件,必须要有main的package包,且必须在该包下有main()函数;
  • 同一个路径下只能存在一个package,一个package可以拆成多个源文件组成;

import 概念

注意点:

  • import语句可以导入原代码文件所依赖的package包;
  • 不得导入原代码文件中没有用到的package,否则GO语言编译器会报错;

import两种写法:

1
2
import "pkg1"
import "pkg2"
1
2
3
4
import (
"pkg1"
"pkg2"
)

import 原理

注意点:

  • 如果一个main导入其他包,包将被顺序导入;
  • 如果导入的包中依赖其它包(包B),会首先导入B包,然后初始化B包中的常量和变量,最后如果B包中有init,会自动执行init();
  • 所有包导入完成后才会对main中常量和变量进行初始化,然后执行main中的init函数(如果存在),最后执行main函数体;
  • 如果一个包被导入多次则该包只会被导入一次; (不管如果多次继承,一个包导入了多次也只会导入一次)

2022

import 别名用法

  • 别名操作的含义:将导入的包命名为另一个容易记忆的别名;
  • 点(.)操作的含义是:点(.)标识的包导入后,调用该包中函数时可以省略前缀包名; (不建议使用)
  • 下划线()操作的含义是:导入该包,但不导入整个包,而是执行该包中的init函数,引入无法通过包名来调用包中的其他函数。使用下划线()操作往往是为了注册包里的引擎,让外部可以方便地使用;

别名用法:

1
2
3
4
5
6
7
8
9
package main

import (
test "fmt" // test为别名
)

func main () {
test.Print("this is test!")
}

点操作:

1
2
3
4
5
6
7
8
9
package main 

import (
. "fmt"
)

func main() {
Println("hello world!")
}

下划线操作:

1
2
3
4
5
6
7
8
9
10
11
package main 

import (
_ "pkg1"
)

func main() {
Println("hello world!")
}

// 执行过程中会加载pkg1中的init函数,且只会加载init函数

Go语言数据类型

数值类型(整型、浮点型、复数)、字符串类型、布尔型

  • 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存;
  • 布尔型的值只可以是常量true或者false;
  • 字符串类型string,编码统一为“UTF-8”

整型又分为有符号整型和无符号整型

序号类型和描述
1uint8 无符号8位整型 (0到255) (计算机里面占8位,为一个字符,2的8次方为256)
2uint16 无符号16位整型 (0到66536)
3uint32 无符号32位整型
4uint64 无符号64位整型
5int8 有符号8位整型 (-128 到 127)
6int16 有符号16位整型 (-32768 到 32767)
7int32 有符号32位整型
8int64 有符号64位整型

浮点和复数类型

序号类型和描述
1float32 IEEE-754 32位浮点类型
2float64 IEEE-754 64位浮点类型
3complex64 32位实数和虚数
4complex128 64位实数和虚数

其他数值类型

序号类型和描述
1byte 类似uint8
2rune 类似int32
3uint 32或者64位 (根据操作系统而定)
4int 与uint一样大小
5uintptr 无符号整型,用于存放一个指针
谢翔 wechat
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------
0%