目录
1 基本数据类型
1) 布尔型(bool: 1位)
bool:只有true和false两种值
2) 整型
有符号:
int8 、int16、int32、int64
无符号:
uint8、uint16、uint32、uint64
int* 和uint*区别是int*带有负数,uint*不带负数
具体类型 | 取值范围 |
int8(byte) | -127~128 |
uint8 | 0~255 |
int16 | -32768~32767 |
uint16 | 0~65535 |
int32 | -2147483648~2147483647 |
uint32 | 0~4294967295 |
int64 | -9223372036854775808~9223372036854775807 |
uint64 | 0~18446744073709551615 |
3) 浮点型
根据位数: float32 float64
4) 字符串类型
string类型是使用双引号""或者反引号``引起来的字符串变量,采用UTF-8编码.
5) 复数类型
根据位数 :
complex64:复数的实部和虚部都是float32
complex128:复数的实部和虚部都是float64
6) 错误类型
error
2 零值
零值:
没有明确初始值的变量声明会被赋予它们的 零值。
零值是:
数值类型为 0,
布尔类型为 false,
字符串为 ""(空字符串)。
输出结果:
3 常量
Go支持定义字符常量,字符串常量,布尔型常量和数值常量。
Go通过const来定义常量:
package main
import "fmt"
import "math"
// "const" 关键字用来定义常量
const s string = "constant"
func main() {
fmt.Println(s)
// "const"关键字可以出现在任何"var"关键字出现的地方
// 区别是常量必须有初始值
const n = 500000000
// 常量表达式可以执行任意精度数学计算
const d = 3e20 / n
fmt.Println(d)
// 数值型常量没有具体类型,除非指定一个类型
// 比如显式类型转换
fmt.Println(int64(d))
// 数值型常量可以在程序的逻辑上下文中获取类型
// 比如变量赋值或者函数调用。
// 例如,对于math包中的Sin函数,它需要一个float64类型的变量
fmt.Println(math.Sin(n))
}
4 类型转换
表达式 T(v)
将值 v
转换为类型 T
。
与 C 不同的是,Go 在不同类型的项之间赋值时需要显式转换。
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
5 变量
5.1 声明变量
var 用来声明变量列表,类型在最后;
短变量可用 := 来声明,因为函数外的每个语句都必须以关键字开始,所以 := 变量不能在函数外使用
5.2 变量初始化
变量声明可以包含初始值,每个变量对应一个
如果初始值已存在,则可以省略类型;变量会从初始值中获取类型
6 函数
6.1 声明函数
函数可以没有参数或接受多个参数;
当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。
package main
import "fmt"
//函数
func add(x int, y int) int {
return x + y;
}
//当连续两个或多个函数已命名形参类型相同时,除最后一个类型以外,其他都可以省略
func add2(x,y int) int {
return x + y;
}
func main() {
fmt.Println(add(42,13))
6.2 多返回值和命名返回值
多返回值:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
命名返回值:
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}