Go语言入门2:基础语法
Table of Contents
Go 语言入门基础学习笔记之 Go 语言的基础语法与数据类型

基础语法
Go 标记
Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。
行分隔符
在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中并不鼓励这种做法。
注释
// 单行注释
/*
多行注释 / 块注释
*/
与 C 语言一致。
标识符
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母 (AZ 和 az) 数字 (0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
这与大多数编程语言的规范一样
比如,mahesh 、kumar、abc、move_name、a_123、myname50、_temp、j、a23b9、retVal 都是有效标识符。1ab 以数字开头、case 关键字、a+b 其他字符等都是无效字符。
字符串拼接
Go 语言的字符串连接可以通过 + 实现。
fmt.Println("Google" + "Runoob")
关键字
Go 语言一共有 25 个关键字。
| break | default | func | interface | select |
| case | defer | go | map | struct |
| chan | else | goto | package | switch |
| const | fallthrough | if | range | type |
| continue | for | import | return | var |
除此之外,Go 语言还有 36 个预定义标识符
| append | bool | byte | cap | close | complex |
| copy | false | float 32 | float 64 | imag | int |
| int 32 | int 64 | iota | len | make | new |
| println | real | recover | string | true | |
| complex 64 | complex 128 | uint 16 | int 16 | uint 32 | uintptr |
| panic | uint 8 | uint 64 | int 8 | uint | nil |
Go 语言中的空格
在 Go 语言中,空格通常用于分隔标识符、关键字、运算符和表达式,以提高代码的可读性。
变量的声明必须使用空格隔开
var x int
const Pi float64 = 3.14159265358979323846
变量与运算符之间推荐加入空格,程序看起来更加美观
var z int = x + y
关键字和表达式之间必须使用空格隔开
if x > 0 {
// do something
}
在函数调用时,函数名和左边等号之间要使用空格,参数之间也要使用空格
result := add(2, 3)
格式化字符串
Go 语言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串并赋值给新串:
Sprintf根据格式化参数生成格式化的字符串并返回该字符串。Printf根据格式化参数生成格式化的字符串并写入标准输出。
package main
import (
"fmt"
)
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2024-10-25"
var url="Code=%d&endDate=%s"
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
fmt.Printf(url,stockcode,enddate)
}
// 输出结果
Code=123&endDate=2024-10-25
Code=123&endDate=2024-10-25
补充:fmt 包中各种输出方法的区别
fmt.Print原样输出fmt.Printf格式化输出fmt.Println各个值之间加空格,末尾加换行
Go 语言中还有一些内建函数,如
println()和print(),不属于任何包,直接可以使用。只能简单地输出参数,不支持格式化,通常只用于简单的调试目的。
println()和print()与 fmt 中的fmt.Println和fmt.Print区别一样。
fmt.Print("go","python","php","javascript") // gopythonphpjavascript
fmt.Println("go","python","php","javascript") // go python php javascript
fmt.Printf("go %d", 1) // go 1
println("Hello Go!") // Hello Go!
数据类型
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go 语言按类别分为以下几种数据类型:
- 布尔类型:值只可以是常量 true 或者 false
- 数字类型:Go 语言支持整型和浮点型数字,并支持复数,其中位运算采用补码
- 字符串型:Go 语言字符串是由单个字节连接起来的,字符串的字节使用 UTF-8 或 Unicode 编码
- 派生类型:
- 指针 Pointer
- 数组
- 结构化
- 通道 Channel
- 函数 Function
- 切片 Slice
- 接口
- 集合 Map
引用类型: 切片 Slice、指针、集合 Map、通道 Channel、函数
数字类型:
整型:Go 也有基于架构的类型,例如:int、uint 和 uintptr
| 类型 | 描述 |
|---|---|
| uint 8 | 无符号 8 位整型 (0 到 255) |
| uint 16 | 无符号 16 位整型 (0 到 $2^{16}-1$) |
| uint 32 | 无符号 32 位整型 (0 到 $2^{32}-1$) |
| uint 64 | 无符号 64 位整型 (0 到 $2^{64}-1$) |
| int 8 | 有符号 8 位整型 (-128 到 127) |
| int 16 | 有符号 16 位整型 ($-2^{15}$ 到 $-2^{15}-1$) |
| int 32 | 有符号 32 位整型 ($-2^{31}$ 到 $2^{31}-1$) |
| int 64 | 有符号 64 位整型 ($-2^{63}$ 到 $2^{63}-1$) |
在 Go 中
int是一个不定长的类型,取决于当前计算机的机器字长。如果当前计算机为 64 位,则int类型也是 64 位,虽然你这与int64的长度是一样的,但是他们依旧是不同的两种数据类型。
浮点型:
| 类型 | 描述 |
|---|---|
| float 32 | IEEE-754 32 位浮点数 |
| float 64 | IEEE-754 64 位浮点数 |
| complex 64 | 32 位实数和虚数 |
| complex 128 | 64 位实数和虚数 |
其他数字类型:
| 类型 | 描述 |
|---|---|
| byte | 类似 uint 8 |
| rune | 类似 int 32 |
| uint | 32 或 64 位 |
| int | 与 uint 一样大小 |
| uintptr | 无符号整型, 用于存放一个指针 |
Go 语言可以通过格式化字符串
%T打印出数据类型
fmt.Printf("type: %T\n", a)
浮点精度问题
浮点数计算输出有一定的偏差,你也可以转整型来设置精度。
package main
import (
"fmt"
)
func main() {
a := 1.69
b := 1.7
c := a * b // 结果应该是2.873
fmt.Println(c) // 输出的是2.8729999999999998
}
设置精度
package main
import (
"fmt"
)
func main() {
a := 1690 // 表示1.69
b := 1700 // 表示1.70
c := a * b // 结果应该是2873000表示 2.873
fmt.Println(c) // 内部编码
fmt.Println(float64(c) / 1000000) // 显示
}
参考课程: