ZetCode

Golang max 函数

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

本教程解释了如何在 Go 中使用 `max` 内置函数。我们将通过实际示例介绍基本用法,以查找最大值。

`max` 函数用于查找其参数中的最大值。它在 Go 1.21 中引入,是新的内置比较函数的一部分。

在 Go 中,`max` 可以与整数、浮点数和字符串等有序类型一起使用。它返回提供的参数中的最大值,这些参数必须是相同的类型。

整数的基本 max 用法

`max` 最简单的用法是比较两个整数值。本示例演示了基本的整数比较。
注意: 所有参数必须是相同的可比较类型。

basic_max.go
package main

import "fmt"

func main() {
    a := 42
    b := 27
    
    maximum := max(a, b)
    fmt.Printf("The max of %d and %d is %d\n", a, b, maximum)
    
    // Can compare more than two values
    c := 99
    fmt.Printf("The max of %d, %d, and %d is %d\n", 
        a, b, c, max(a, b, c))
}

该函数返回提供的参数中的最大整数。它可以处理两个或多个相同整数类型的数值。

将 max 与浮点数一起使用

`max` 函数同样适用于浮点数。本示例展示了使用 max 进行的浮点数比较。

float_max.go
package main

import "fmt"

func main() {
    x := 3.14
    y := 2.71
    z := 1.618
    
    fmt.Printf("Max of %.2f and %.2f is %.2f\n", x, y, max(x, y))
    fmt.Printf("Max of %.2f, %.2f, and %.2f is %.2f\n", 
        x, y, z, max(x, y, z))
    
    // Works with negative numbers
    fmt.Println("Max of -10.5 and -20.3:", max(-10.5, -20.3))
}

该函数能正确处理浮点数比较,包括负数。它在结果中保持完整的浮点数精度。

查找最大字符串值

`max` 函数可以按字典顺序比较字符串。本示例展示了使用 max 进行的字符串比较。

string_max.go
package main

import "fmt"

func main() {
    s1 := "apple"
    s2 := "banana"
    s3 := "cherry"
    
    fmt.Println("Max string:", max(s1, s2))
    fmt.Println("Max of three strings:", max(s1, s2, s3))
    
    // Case-sensitive comparison
    fmt.Println("Max with different cases:", 
        max("Go", "go", "GO"))
}

字符串比较是区分大小写的,并遵循 Unicode 字典顺序。该函数返回在排序列表中最后出现的字符串。

将 max 与自定义有序类型一起使用

`max` 函数可用于任何支持排序的类型。本示例演示了将 max 与自定义类型一起使用。

custom_type_max.go
package main

import "fmt"

type Temperature float64

func main() {
    t1 := Temperature(23.5)
    t2 := Temperature(19.2)
    t3 := Temperature(25.7)
    
    hottest := max(t1, t2, t3)
    fmt.Printf("The highest temperature is %.1f°C\n", hottest)
    
    // Also works with other custom ordered types
    type Day int
    const (
        Monday Day = iota
        Tuesday
        Wednesday
    )
    fmt.Println("Latest weekday:", max(Monday, Tuesday, Wednesday))
}

该函数可用于任何实现有序比较的类型。自定义类型必须基于内置有序类型才能与 max 一起使用。

max 函数的边缘情况

本示例探讨了 max 函数的边缘情况和特殊行为。它演示了如何处理 NaN 值和空参数。

edge_cases_max.go
package main

import (
    "fmt"
    "math"
)

func main() {
    // With NaN values
    nan := math.NaN()
    val := 42.0
    fmt.Println("Max with NaN:", max(nan, val))
    fmt.Println("Max with NaN first:", max(val, nan))
    
    // Requires at least one argument
    // This would cause compile-time error:
    // fmt.Println(max()) // invalid operation: max() (no arguments)
    
    // Single argument returns itself
    fmt.Println("Max of single value:", max(7))
}

当存在 NaN 值时,max 始终返回 NaN。该函数至少需要一个参数,并且在只提供一个参数时会按原样返回。

来源

Go 语言规范

本教程通过实际示例介绍了 Go 中的 `max` 函数,演示了如何查找不同数据类型中的最大值。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Golang 教程