初识 Golang 语法篇 - Golang 中的变量常量与基本数据类型

89 阅读3分钟

定义

var 定义变量

var a int  // var 定义变量
var a int = 10  // var 设置初值
var a = 10  // var 自动解析类型 (但不能解析为 int8 等)
var a, b int = 1, 2  // var 定义同类型多变量
var (
    a int
    s string
)  // var 定义多变量
var (
    a, b int = 1, 2
    s, ss string
    pi = 3.1415926535  // float64
)

const 定义常量

const a int = 10  // 必须初始化
const a = 10  // 自动解析常量类型
const a, b int = 1, 2  // 定义同类型多常量
const (
    a int = 10
    s string = "Hello World!"
    pi float64 = 3.1415926535
)

:= 自动变量

a := 1  // var a int = 1
s := "Hello World!"  // var s string = "Hello World!"
b, ss := 2, "No Way Home."
  • 注意: 自动变量不可用于全局变量的定义。

匿名变量

  • 匿名变量 _ 伪接受数值,数值将直接被丢弃,不可访问其数值。
  • 匿名变量 _ 可以使用 =:=。(其他变量重定义将出错)
func getData() (int, int) {
    return 10, 20
}
func main() {
    a, _ := getData()  // 10, _
    _, a = getData()  // _, 20
}

作用域

基本数据类型

概览

  • 概览中的 complex / uintptr / byte/rune 将作补充说明,其他不作介绍。
类型默认值描述
int / uint0默认位数的整型和无符号整型,unsafe.Sizeof() 查看字节数
int8 / int16 / int32 / int6408 / 16 / 32 / 64 位整型
uint8 / uint16 / uint32 / uint6408 / 16 / 32 / 64 位无符号整型
float32 / float640.032 / 64 位浮点数(IEEE754
complex64 / complex128(0.0+0.0i)32 / 64 位复数
uintptrnil无符号整型,指针类型
byte'\000'类似 uint8,表示 ASCII 编码
rune'\000'类似 int32,表示 UTF-8 编码
  • Golang 中,int / uint 不是 int8 / int16 / int32 / int64 / uint8 / uint16 / uint32 / uint64 的别名。
  • 后面还将介绍非基本数据类型,如 stringslicechannel

复数类型 complex

  • 可以使用 a+bi 表示复数,如 0.5+1.5i

  • 可以使用内置函数 func complex(r, i float64) complex128 构造复数类型。

指针类型 uintptr / unsafe.Pointer

  • 任何指针类型不可直接转换为 uintptruintptr 可以与 unsafe.Pointer 相互转换,unsafe.Pointer 可以实现对任意数据类型的强制转换,一般直接使用 unsafe.Pointer 即可。注意:这是危险的操作。
a := "Hello World!"  // string: "Hello World!"
b := []byte(a)  // []byte: [72 101 108 108 111 32 87 111 114 108 100 33]
c := **(**int)(unsafe.Pointer(&a))  // int: 8022916924116329800

字符类型 byte / rune

  • 字符类型使用单引号表示,默认为 rune 类型,当为 ASCII 编码范围时,可以转换为 byte 类型。字符有多种表达方式,与 Clang 有所不同。
符号描述
'A'字符表示
'\n'转义字符,与 Clang 基本相同
'\101'八进制编码,'\000' ~ '\177'0 ~ 127
'\x41'十六进制,'\x00' ~ '\xff'0 ~ 255
'\u4f60'Unicode 编码,'\u0000' ~ '\uffff'0 ~ 65535