1. Golang变量,常量
1)变量(常量)的声明
Go语言的变量和常量分别通过关键字 var 和 const 来定义,变量声明的一般形式为 var 变量名 数据类型。
如果是多个相同数据类型的变量,则可以这么写:
var a1, a2, a3 *int
Go语言把数据类型写在最后的一个好处是确保所有前面声明的变量都是该类型(对比:C/C++的声明
int* a1, a2, a3
在这里,只有a1是指针类型,a2, a3均为整形)
Go语言还有多行形式的声明:
var (
a int
b float64
c uint
)
2)初始化
Go语言初始化的一般格式为 var/const 变量(常量)名 数据类型 = 表达式 。初始化时,也可以将数据类型省略,让编译器自动判断,即 var/const 变量(常量)名 = 表达式 。还有一种更为简短的初始化方式: 变量名 := 表达式(这种初始化只能用于变量而非常量)。具体例子如下
var a int = 10
const b = .3
var c = 1. //浮点型可以只写出小数点左边(或右边)的数
var (
d = '?'
e = true
)
f := 4 //需要注意的是,:=左端必须是未声明过的变量
一般来说,常量必须在声明的时候将其初始化,而变量如果声明的时候未初始化,则Go编译器自动将其初始化。(每个数值变量默认值为0,而字符串默认为空字符串)
2. Golang的数据类型
1)布尔型
布尔型的值只能是true或者false
var a bool = true
2)整型
类型 | 说明 |
---|---|
int8 | 8位整型(-128 - 127) |
int16 | 16位整型(-32768 到 32767) |
int32 | 32位(-2147483648 到 2147483647) |
int64 | 64位(-9223372036854775808 到 9223372036854775807) |
int | 32位或64位(与电脑机器字长有关) |
uint8 | 8位无符号整型(0 到 255) |
uint16 | 16位无符号整型(0 到 65535) |
uint32 | 32位无符号整型(0 到 4294967295) |
uint64 | 64位无符号整型(0 到 18446744073709551615) |
uint | 32位或64位(与电脑机器字长有关) |
uintptr | 无符号整型,用于存放一个指针 |
3)浮点型
浮点型分为32位(float32)和64位(float64),默认为float64
var a float64 = 32.64
var b = 6.02e23
4) 复数
Go语言中复数是由两个浮点数构成(实部(real)和虚部(imag)),分为64位(complex64, 实部和虚部分别是32位浮点数)和128(complex128, 实部和虚部分别是64位浮点数)
package main
import "fmt"
func main() {
var a complex128 = complex(2,3) //complex(x,y)中x为实部,y为虚部
var b = complex(1.3, 4.5)
c := 2 - 3i // 等价于 c := complex(2, -3)
fmt.Println(a)
fmt.Printf("%f - %.2f", b, c)
}
运行结果为
(2+3i)
(1.300000+4.500000i) - (2.00-3.00i)
5)字符型
Go语言中有两种字符类型
- byte型(等价于uint8)可以用来表示ASCII码中的字符
- rune型(等价于uint32)可以用来表示Unicode(UTF-8)字符
package main
import "fmt"
func main() {
var (
ch byte = 'A'
ch1 byte = 65
ch2 byte = '\x41'
ch3 byte = '\377'
)// 以上四种写法等价
var (
u rune = '\u03B1'//书写4个字节的时候用\u + 16进制数,8个字节则需用\U 前缀
u1 rune = 945
)
fmt.Println(ch)
fmt.Printf("%d - %c\n", ch, ch)
fmt.Printf("%d - %v - %c - %X - %U", u, u, u, u, u)
}
运行结果为
65
65 - A
945 - 945 -
α
\alpha
α - 3B1 - U+03B1
6) 字符串
var a string = "HelloWorld"
在Go语言中,如果要输入多行的字符串,则需要用反引号 ` ,具体实现如下:
package main
import "fmt"
func main() {
str := `hello
world
!!!`
fmt.Println(str)
}
运行结果为
hello
world
!!!
多行字符串一般用于内嵌源码和内嵌数据等。