- 取值范围
- int:在32位系统上,取值范围是 -2^31 到 2^31 - 1;在64位系统上,取值范围是 -2^63 到 2^63 - 1。
- int8:取值范围是 -128 到 127。
- int16:取值范围是 -32768 到 32767。
- int32:取值范围是 -2147483648 到 2147483647。
- int64:取值范围是 -9223372036854775808 到 9223372036854775807。
- uint:在32位系统上,取值范围是 0 到 2^32 - 1;在64位系统上,取值范围是 0 到 2^64 - 1。
- uint8:取值范围是 0 到 255,也叫 byte 类型。
- uint16:取值范围是 0 到 65535。
- uint32:取值范围是 0 到 4294967295。
- uint64:取值范围是 0 到 18446744073709551615。
- 实际编程场景
- int8(byte):
- 场景:用于处理单个字节的数据,例如在网络编程中处理HTTP协议头部的一些标志位,或者文件读取中处理单个字节的内容。
- 示例:
package main
import (
"fmt"
)
func main() {
var b byte = 100
fmt.Printf("The value of b is %d\n", b)
}
- int16:
- 场景:当需要处理较小范围的整数且节省内存时,比如在一些嵌入式系统中表示传感器的小范围数据,其数据范围在 -32768 到 32767 之间。
- 示例:
package main
import (
"fmt"
)
func main() {
var num int16 = -10000
fmt.Printf("The value of num is %d\n", num)
}
- int32:
- 场景:常用于处理字符编码,如UTF - 32编码中的码点,因为其可以表示足够多的字符。
- 示例:
package main
import (
"fmt"
)
func main() {
var codePoint int32 = 'A'
fmt.Printf("The code point of 'A' is %d\n", codePoint)
}
- int64:
- 场景:用于处理非常大的整数,如时间戳(以纳秒为单位),金融计算中涉及大金额的运算等。
- 示例:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now().UnixNano()
var nanoTime int64 = now
fmt.Printf("The current timestamp in nanoseconds is %d\n", nanoTime)
}
- uint8(byte):
- 场景:图像处理中,每个像素点的颜色值(在0 - 255之间)常用 uint8 表示。
- 示例:
package main
import (
"fmt"
)
func main() {
var red uint8 = 255
var green uint8 = 128
var blue uint8 = 0
fmt.Printf("RGB values: (%d, %d, %d)\n", red, green, blue)
}
- uint16:
- 场景:在一些游戏开发中,表示小范围内的分数、等级等,其范围在0 - 65535之间。
- 示例:
package main
import (
"fmt"
)
func main() {
var playerLevel uint16 = 5000
fmt.Printf("The player's level is %d\n", playerLevel)
}
- uint32:
- 场景:数据库中的自增ID,如果预计ID数量不会超过 4294967295 个,可以使用 uint32。
- 示例:
package main
import (
"fmt"
)
func main() {
var userId uint32 = 1000000
fmt.Printf("The user ID is %d\n", userId)
}
- uint64:
- 场景:区块链技术中,用于记录区块高度等非常大的无符号整数。
- 示例:
package main
import (
"fmt"
)
func main() {
var blockHeight uint64 = 1000000000000
fmt.Printf("The block height is %d\n", blockHeight)
}
- int:
- 场景:当你不确定整数的范围,并且希望Go语言根据系统架构自动选择合适的大小,或者需要处理有符号整数时,通常会使用 int。例如,在一般的业务逻辑中处理计数器、数组索引等。
- 示例:
package main
import (
"fmt"
)
func main() {
var count int = 100
fmt.Printf("The count is %d\n", count)
}
- uint:
- 场景:当需要处理无符号整数,且希望根据系统架构自动选择合适的大小,例如表示文件大小(因为文件大小不会是负数)。
- 示例:
package main
import (
"fmt"
)
func main() {
var fileSize uint = 1024 * 1024 // 1MB
fmt.Printf("The file size is %d bytes\n", fileSize)
}