变量的基本类型
- Bool
- Numeric Types
- String
Bool
bool类型表示布尔值,为true或false。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package main
import "fmt"
func main() {
a := true
b := false
fmt.Println("a:", a, "b:", b)
c := a && b
fmt.Println("c:", c)
d := a || b
fmt.Println("d;", d)
}
|
Numeric
有符号整数
类型 |
大小 |
范围 |
int8 |
8位 |
-128到127 |
int16 |
16位 |
-32768到32767 |
int32 |
32位 |
-2147483648到2147483647 |
int64 |
64位 |
-9223372036854775808到9223372036854775807 |
int |
表示32位或64位整数,具体取决于底层平台。除非需要使用特定大小的整数,否则通常应使用int来表示整数 |
32位系统中的-2147483648到2147483647和64位系统中的-9223372036854775808到9223372036854775807 |
1
2
3
4
5
6
7
8
9
|
package main
import "fmt"
func main() {
var a int = 9
b := 10
fmt.Println("value of a is", a, "and b is", b)
}
|
可以使用 Printf 方法中的 %T 格式说明符打印变量的类型。Go 有一个不安全的包,它有一个 Sizeof 函数,它以字节为单位返回传递给它的变量的大小。应谨慎使用不安全的软件包,因为使用它的代码可能存在可移植性问题,以下代码中使用它只是举例说明。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package main
import (
"fmt"
"unsafe"
)
func main() {
var a int = 10
b := 20
fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) //type and size of a
fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) //type and size of b
}
|
无符号整数
类型 |
大小 |
范围 |
int8 |
8位 |
-128到127 |
int16 |
16位 |
-32768到32767 |
int32 |
32位 |
-2147483648到2147483647 |
int64 |
64位 |
-9223372036854775808到9223372036854775807 |
int |
表示32位或64位整数,具体取决于底层平台。除非需要使用特定大小的整数,否则通常应使用int来表示整数 |
32位系统中的-2147483648到2147483647和64位系统中的-9223372036854775808到9223372036854775807 |
浮点类型
float32: 32位浮点数
float64: 64位浮点数
复杂类型
complex64:具有float32实部和虚部的复数数字
complex128:具有float64实部和虚部的复数
内置函数复合体用于构造具有实部和虚部的复数。复杂函数具有以下定义
1
|
func complex(r, i FloatType) ComplexType
|
它将实部和虚部作为参数并返回复杂类型。实部和虚部都应该是相同的类型。即float32或float64。如果实部和虚部都是float32,则此函数返回complex64类型的复数值。如果实部和虚部都是float64类型,则此函数返回complex128类型的复数值
1
2
3
4
5
6
7
8
9
10
11
12
|
package main
import (
"fmt"
)
func main() {
a := complex(1, 2)
b := 3 + 4i
sum := a + b
fmt.Println("sum:", sum)
}
|
其他数字类型
byte 是 unit8 的别名
符文是 int32 的别名
字符串类型
1
2
3
4
5
6
7
8
9
10
11
|
package main
import (
"fmt"
)
func main() {
name := "reallyli"
ago := 26
fmt.Println("My name is ", name, ", ago is", ago)
}
|
类型转换
Go 对显式输入非常严格。没有自动类型转换,两个不同类型的变量进行运算需要进行强制转换
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package main
import (
"fmt"
)
func main() {
a := 1.22
b := 2
sum := a + b
// sum := int(a) + b //yes
fmt.Println("sum:", sum)
}
|
invalid operation: a + b (mismatched types float64 and int)
1
2
3
4
5
6
7
8
9
10
11
12
|
package main
import (
"fmt"
)
func main() {
i := 10
var j int = float64(i) //this statement will not work without explicit conversion
// var j float64 = float64(i) // yes
fmt.Println("j", j)
}
|