一文熟悉 Go 的基础语法和基本数据类型
- 前言
- Hello,World!
- 有关 main 函数的一些要点
- 关键字
- package
- 声明
- 引入
- 基本数据类型
- 整形数据类型
- 有符号整数类型
- 无符号整数类型
- 其他整数类型
- 浮点数据类型
- 字符类型
- 布尔类型
- 字符串类型
- 基本数据类型的默认值
- 常量和变量声明
- 结尾
耐心和持久胜过激烈和狂热。
前言
快速上手一门新的语言,首先要做的就是熟悉新语言的基本语法和基本数据类型,本文将对 Go 语言的基础语法和基本数据类型进行介绍。
Hello,World!
记得当初学习 C 语言的时候,第一个演示程序是输出 Hello World!
,Go 官网的第一个案例也是输出 Hello,World!
。
package main // 包声明
import "fmt" // 包导入
// func 函数关键字
func main() {
fmt.Println("Hello,World!")
}
从 Hello,World!
输出案例可知:
- 声明包的关键字是
package
。 - 导包的关键字是
import
。 - 使用包里面的函数以
包名.函数
这种格式进行。 - 函数的声明关键字是
func
。
有关 main 函数的一些要点
main
函数必须在main
包里。- 当
main
函数所在的文件被命名为main.go
时,可以直接使用go run ./main.go
命令直接运行程序。 - 当
main
函数所在的文件名字不为main.go
,需要分以下两种情况,假设所在文件的名字为a.go
。- 1、当
a.go
文件里没有引用其他文件的变量等元素时,可以直接使用go run ./a.go
运行。package main // 包声明 import "fmt" // 包导入 // func 函数关键字 func main() { fmt.Println("Hello,World!") }
D:\go_projects\src\go_basic> go run .\main.go Hello,World!
- 2、当
a.go
文件里有引用其他文件的变量等元素时,需要先使用go build ./a.go ./b.go
生成可执行文件,再运行exe
可执行文件。package main // a.go 文件 import "fmt" func main() { fmt.Println(name) }
package main // b.go 文件 var name string = "cmy"
D:\go_projects\src\go_basic> go run .\a.go # command-line-arguments .\a.go:6:14: undefined: name
D:\go_projects\src\go_basic> go build .\a.go .\b.go D:\go_projects\src\go_basic> ls 目录: D:\go_projects\src\go_basic Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022-11-23 1:39 .idea -a---- 2022-11-23 2:03 1950720 a.exe -a---- 2022-11-23 1:50 63 a.go -a---- 2022-11-23 1:52 38 b.go -a---- 2022-11-23 1:57 127 main.go D:\go_projects\src\go_basic> .\a.exe cmy
- 1、当
关键字
除了上面提到的几个关键字以外,Go 语言还有其他关键字,一共 25 个关键字。
package
声明
- 语法格式:
package xxx
。package main
- 包名字由英文或英文与下划线组合组成。
- 注意点:
- 包声明时名字可以和文件夹的命名不一样。
- 同一个文件夹内,每个 Go 文件的包声明必须一致,否则会报错。
package hello // a.go 文件
package hello // b.go 文件
- 包声明时名字可以和文件夹的命名不一样。
引入
- 包的引入方式:import [alias] xxx,alice 是一个可选值,为包起别名。
import "fmt" import f "fmt" // 起别名
- 注意点:
- 引入包而没有使用,会报错。
- 匿名引入:
一般匿名引入,是为了使用包里面的import _ "fmt" // 起别名
init
函数,它先于main
函数之前执行func init() { }
基本数据类型
Go 语言中的数据类型有很多,除了本文介绍的基本数据类型以外,还有指针、数组、结构体 struct
、管道 channel
、函数 func
、切片 slice
、接口 interface
、map 等。
整形数据类型
有符号整数类型
类型 | 占用存储空间 | 表数范围 |
---|---|---|
int8 | 1字节 | − 2 7 -2^{7} −27 ~ 2 7 2^{7} 27-1 (-128-127) |
int16 | 2字节 | − 2 15 -2^{15} −215 ~ 2 15 2^{15} 215-1 (-32768-32767) |
int32 | 4字节 | − 2 31 -2^{31} −231 ~ 2 31 2^{31} 231-1 (-2147483648-2147483647) |
int64 | 8字节 | − 2 63 -2^{63} −263 ~ 2 63 2^{63} 263-1 |
无符号整数类型
类型 | 占用存储空间 | 表数范围 |
---|---|---|
uint8 | 1字节 | 0~255 |
uint16 | 2字节 | 0~ 2 16 2^{16} 216-1 |
uint32 | 4字节 | 0~ 2 31 2^{31} 231-1 |
uint64 | 8字节 | 0~ 2 63 2^{63} 263-1 |
其他整数类型
类型 | 有无符号 | 占用存储空间 | 表数范围 |
---|---|---|---|
int | 有 | 32位系统-4字节, 64位系统-8字节 | − 2 31 -2^{31} −231 ~ 2 31 2^{31} 231-1, − 2 63 -2^{63} −263 ~ 2 63 2^{63} 263-1 |
uint | 无 | 32位系统-4字节, 4位系统-8字节 | 0 ~ 2 31 2^{31} 231-1, 0~ 2 64 2^{64} 264-1 |
rune | 有 | 等价 int32 | − 2 31 -2^{31} −231 ~ 2 31 2^{31} 231-1 |
byte | 无 | 等价 unint8 | 0~255 |
浮点数据类型
类型 | 占用存储空间 | 表数范围 |
---|---|---|
float32 | 4字节 | -3.403E38~3.403E38 |
float64 | 8字节 | -1.798E308~1.798E308 |
字符类型
- Go 没有字符类型,如果要存单个字符(字母),可使用
byte
类型代替。 - Go 中字符使用
UTF-8
编码。
布尔类型
- 布尔类型在 Go 中对应
bool
类型,它只允许取值为true
和false
。 - 布尔类型占 1 个字节。
- 布尔类型适用于逻辑运算,一般用于程序流程控制。
字符串类型
- 字符串不可变(指的是其中字符的值不能变,例如
var name string = "cmy"
,然后操作name[0]='a'
是不行的)。 - 如果字符串中需要换行或者字符串较复杂,可以使用反引号 ``。
基本数据类型的默认值
数据类型 | 默认值 |
---|---|
整数类型 | 0 |
浮点类型 | 0 |
布尔类型 | false |
字符串类型 | “” |
常量和变量声明
- 常量声明:
const xxx type = value
const realName string = "chenmingyong" const Age int = 18
- 变量声明:
var xxx type = value
在定义局部变量(方法或函数内部的变量)时,还可以使用var realName string = "chenmingyong" var Age int = 18
:=
去声明,切记是局部变量,全局变量不能使用:=
,否则会报错。
Go 会使用类型推断来判断类型,数字会被理解为realName := "chenmingyong" Age := 18
int
或者float64
,字符串会被理解为string
。 - 注意点:
- Go 推荐使用驼峰命名的方式。
- 常量被声明后,后续的值不能被修改。
- 常量和变量的名字,首字母是否大写,决定着它是否能够被包外文件访问,大写则可以被包外的 Go 文件访问,小写则认为是私有的,只能被包内的 Go 文件访问。
- 变量声明之后,没有使用,编译时会报错。
- 类型不匹配不能被赋值。
- 同一个作用域下,变量只能声明一次。
结尾
如果本文对你有帮助,欢迎点赞收藏加关注,如果本文有错误的地方,欢迎指出!