# 语法
# 行分隔符
先看一下 c++ 的 hello world:
#include <iostream> | |
using namespace std; | |
int main(){ | |
cout << "hello world" << endl; | |
} |
然后再看一下 go 的:
package main | |
import "fmt" | |
func main() { | |
fmt.Println("hello world") | |
} |
可以看出以下几点差异:
- C++ 使用 main 函数定位项目入口,go 使用 main 包定位项目入口
- C++ 使用分号作为行尾分隔符,go 无需分隔符
- C++ 使用
include
,go 使用import
go 也可以使用分号,适用于一行多语句
# 变量
# 创建变量
package main | |
import "fmt" | |
func main() { | |
var a int | |
a = 10 | |
fmt.Println(a) | |
} |
go 中的变量创建格式为: var name type
,type 会在下文提到
也可以省略 type, 代码如下:
package main | |
import "fmt" | |
func main() { | |
var a = 10 | |
fmt.Println(a) | |
} |
go 编译器就会自动推断类型为 int
, 无需额外指定 type
后两种方法都需要初始赋值
再把 var 也省略掉:
package main | |
import "fmt" | |
func main() { | |
a := 10 | |
fmt.Println(a) | |
} |
这里赋值格式为: name := value
这种赋值方法仅适用于未声明变量
# 数据类型
# 整数类型
名称 | 描述 | 范围 |
---|---|---|
uint8 | 无符号 8 位整型 | 0-255 |
uint16 | 无符号 16 位整型 | 0-65535 |
uint32 | 无符号 32 位整型 | 0-4294967295 |
uint64 | 无符号 64 位整型 | 0-18446744073709551615 |
int8 | 有符号 8 位整形 | -128-127 |
int16 | 有符号 16 位整形 | -32768-32767 |
int32 | 有符号 32 位整形 | -2147483648-2147483647 |
int64 | 有符号 64 位整形 | -9223372036854775808-9223372036854775807 |
有或无符号指是否有一位符号位,无符号正数范围更大但不能储存负数
# 小数类型
名称 | 描述 |
---|---|
float32 | IEEE-754 32 位浮点型数 |
float64 | IEEE-754 64 位浮点型数 |
complex64 | 32 位实数和虚数 |
complex128 | 64 位实数和虚数 |
# 其他数字类型
名称 | 描述 |
---|---|
byte | 类似 uint8 |
rune | 类似 int32 |
int | 为 int32/64 |
uint | 为 uint32/64 |
uintptr | 无符号整型,用于存放一个指针 |
# 其他类型
名称 | 描述 |
---|---|
string | 字符串类型 |
bool | 布尔值 (真或假) |
# 注意事项
go 语言中的局部变量,只要声明, 必须使用
# 输入
go 输入方法为 fmt.Scan
和 fmt.Scanln
package main | |
import "fmt" | |
func main() { | |
var a string | |
fmt.Scan(&a) | |
fmt.Println(a) | |
} |
Scan 的参数为变量的指针,务必加上 &