ZetCode

Golang int 类型

最后修改时间 2025 年 5 月 8 日

本教程将介绍如何在 Go 中使用 int 内置类型。我们将通过实际示例来讲解整数基础知识以及如何处理数字。

int 类型在 Go 中表示带符号的整数值。它的大小取决于平台,在 32 位系统上为 32 位,在 64 位系统上为 64 位。Go 还提供了明确大小的整数类型,如 int8、int16 等。

在 Go 中,int 是最常用的整数类型。它适用于大多数整数运算,并在各种平台上提供良好的性能。值的范围取决于系统架构。

基本整数声明和初始化

int 最简单的用法是声明和初始化变量。此示例演示了基本的整数运算。
注意: Go 的类型系统非常严格,因此整数不能与其他类型混合。

basic_int.go
package main

import "fmt"

func main() {

    var a int = 42
    var b int = 13
    
    sum := a + b
    difference := a - b
    product := a * b
    quotient := a / b
    remainder := a % b
    
    fmt.Println("Sum:", sum)
    fmt.Println("Difference:", difference)
    fmt.Println("Product:", product)
    fmt.Println("Quotient:", quotient)
    fmt.Println("Remainder:", remainder)
}

该示例展示了整数的基本算术运算。当两个操作数都是整数时,Go 会执行整数除法,并丢弃任何余数。取模运算符 (%) 返回除法的余数。

整数类型转换

Go 要求在不同数字类型之间进行显式类型转换。此示例演示了 int 与其他数字类型之间的转换。

type_conversion.go
package main

import (
    "fmt"
    "math"
)

func main() {

    var i int = 42
    var f float64 = float64(i)
    var u uint = uint(math.Abs(float64(i)))
    
    fmt.Printf("int: %d, float64: %f, uint: %d\n", i, f, u)
    
    // Converting back to int
    f = 3.14
    i = int(f)
    fmt.Println("Float to int:", i) // Truncates decimal part
}

该示例显示了 int、float64 和 uint 之间的转换。请注意,从浮点数转换为整数会截断小数部分,而不进行四舍五入。即使在兼容的数字类型之间,也需要进行显式转换。

整数溢出和下溢

Go 整数具有固定大小,可能会发生溢出或下溢。此示例演示了整数的限制和溢出行为。

overflow.go
package main

import (
    "fmt"
    "math"
)

func main() {

    maxInt := math.MaxInt64
    minInt := math.MinInt64
    
    fmt.Println("Max int64:", maxInt)
    fmt.Println("Min int64:", minInt)
    
    // Overflow example
    overflow := maxInt + 1
    fmt.Println("Overflow result:", overflow) // Wraps around
    
    // Underflow example
    underflow := minInt - 1
    fmt.Println("Underflow result:", underflow) // Wraps around
}

该示例展示了整数的限制和溢出行为。当整数溢出或下溢时,它会回绕到相反的极限。在算术运算中考虑这一点很重要,以防止出现意外结果。

整数的位运算

Go 为整数提供了全面的位运算。此示例演示了常见的位操作技术。

bitwise.go
package main

import "fmt"

func main() {

    var a int = 0b1100 // Binary literal (12 in decimal)
    var b int = 0b1010 // Binary literal (10 in decimal)
    
    fmt.Printf("a: %b (%d)\n", a, a)
    fmt.Printf("b: %b (%d)\n", b, b)
    
    // Bitwise operations
    and := a & b
    or := a | b
    xor := a ^ b
    shiftLeft := a << 2
    shiftRight := a >> 1
    
    fmt.Printf("AND: %b (%d)\n", and, and)
    fmt.Printf("OR: %b (%d)\n", or, or)
    fmt.Printf("XOR: %b (%d)\n", xor, xor)
    fmt.Printf("Shift left: %b (%d)\n", shiftLeft, shiftLeft)
    fmt.Printf("Shift right: %b (%d)\n", shiftRight, shiftRight)
}

该示例展示了各种位运算。Go 支持 AND、OR、XOR 和位移操作。二进制文字(0b 前缀)使代码中的位模式更易读。

整数解析和格式化

在编程中,字符串与整数之间的转换很常见。此示例演示了将字符串解析为整数以及格式化整数。

parse_format.go
package main

import (
    "fmt"
    "strconv"
)

func main() {

    // String to int
    numStr := "42"
    num, err := strconv.Atoi(numStr)
    if err != nil {
        fmt.Println("Conversion error:", err)
        return
    }
    fmt.Println("Parsed number:", num)
    
    // Int to string
    result := strconv.Itoa(num * 2)
    fmt.Println("Formatted result:", result)
    
    // Parse with base
    hexStr := "1a"
    hexNum, err := strconv.ParseInt(hexStr, 16, 64)
    if err != nil {
        fmt.Println("Hex conversion error:", err)
        return
    }
    fmt.Printf("Hex %s = %d\n", hexStr, hexNum)
}

该示例显示了带错误处理和不同进制的字符串到整数的转换。strconv 包提供了强大的函数,用于对整数进行解析和格式化,并进行适当的错误处理。

来源

Go 语言规范

本教程通过实际示例介绍了 Go 中的 int 类型,涵盖了算术运算、类型转换和位操作。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程