Golang学习笔记2——类型与变量

1.基本类型

类型 长度 默认值 说明
bool 1 false 不能使用0、1代替false、true
byte 1 0 等同于uint8
int、uint 4、8 0 默认整数类型,根据平台,32或64位
int8、uint8 1 0 -128 ~ 127,0 ~ 255
int16、uint16 2 0 -32768 ~ 32767,0 ~ 65535
int32、uint32 4 0 -(2^32 / 2) ~ (2^32 / 2 - 1),0 ~ 2^32
int64、uint64 8 0 -(2^64 / 2) ~ (2^64 / 2 - 1),0 ~ 2^64
float32 4 0.0
float64 8 0.0 默认浮点数类型
complex64 8
complex128 16
rune 4 0 Unicode Code Point, int32
uintptr 4,8 0 足以存储指针的uint
string "" 字符串,默认值为空字符串,而非NULL
array 数组
struct 结构体
function nil 函数
interface nil 接口
map nil 字典,引用类型
slice nil 切片,引用类型
channel nil 通道,引用类型

2.类型别名

设置类型别名后可以让代码可读性更强,一目了然这个变量做什么用的:

type (
    ByteSize int64
)

3.变量的声明与赋值

  • 变量的声明: var a int
  • 变量的赋值:a = 123
  • 声明并赋值: var a int = 123 (此时若省略类型,则编译器根据值自动推导类型)
  • 多个变量的声明

并行方式(可以省略类型,由值推导)

var a, b, c, int = 1, 2, 3

函数内部声明变量的简写形式:

funciont main(){
    a:= 1
}

函数多个返回值时可以用"_"忽略返回值

 a, _, c, d := 1, 3, 4

4.类型转换

  • go中不存在隐式转换,所有类型转换必须显示声明
  • 转换只能发生在两种相互兼容的类型之间
  • 类型转换的格式:
var a float32 = 1.1
b := int(a)
  • 语法歧义

如果转换的目标是指针、单向通道或没有返回值的函数类型,那么必须使用括号,以避免造成语法分解错误。

fun main() {
    x := 100
    p := *int(&x)   //错误:cannot convert &x (type *int) to type int
                    //    invalid indirect of int(&x) (type int)
    fmt.Println(p)
}

正确的做法是用括号,让编译器将*int解析未指针类型。

(*int)(p)
(<-chan int)(c)
(func())(x)

你可能感兴趣的:(Golang学习笔记2——类型与变量)