耐心和持久胜过激烈和狂热。
快速上手一门新的语言,首先要做的就是熟悉新语言的基本语法和基本数据类型,本文将对 Go 语言的基础语法和基本数据类型进行介绍。
记得当初学习 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.go 时,可以直接使用 go run ./main.go 命令直接运行程序。main 函数所在的文件名字不为 main.go,需要分以下两种情况,假设所在文件的名字为 a.go。
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!
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
除了上面提到的几个关键字以外,Go 语言还有其他关键字,一共 25 个关键字。

package xxx。package main

package hello // a.go 文件
package hello // b.go 文件
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 |
byte 类型代替。UTF-8 编码。bool 类型,它只允许取值为 true 和 false。var name string = "cmy",然后操作 name[0]='a' 是不行的)。| 数据类型 | 默认值 |
|---|---|
| 整数类型 | 0 |
| 浮点类型 | 0 |
| 布尔类型 | false |
| 字符串类型 | “” |
const xxx type = valueconst realName string = "chenmingyong"
const Age int = 18
var xxx type = valuevar realName string = "chenmingyong"
var Age int = 18
:= 去声明,切记是局部变量,全局变量不能使用 :=,否则会报错。realName := "chenmingyong"
Age := 18
int 或者 float64,字符串会被理解为 string。如果本文对你有帮助,欢迎点赞收藏加关注,如果本文有错误的地方,欢迎指出!