这个错误是因为Go语言中函数名大小写的问题。在Go语言中:

错误的代码

package main

func maxSlidingWindow(nums []int, k int) []int {
    // 函数实现...
}

func main() {
    // ❌ 错误:无法使用未导出的函数
    maxSlidingWindow([]int{1,2,3}, 2)
}

解决方案

方案1:在同一个包内使用(最常见)

如果你想在同一个包(比如都在 main 包)中使用,不需要做任何修改,因为小写开头的函数在同一个包内是可以访问的

确保代码结构是这样的:

package main

// 小写开头,只能在当前包内使用
func maxSlidingWindow(nums []int, k int) []int {
    // 实现...
    return result
}

func main() {
    // ✅ 正确:在同一个包内可以直接使用
    result := maxSlidingWindow([]int{1,3,-1,-3,5,3,6,7}, 3)
    fmt.Println(result)
}

方案2:导出函数供其他包使用

如果你想在其他包中使用这个函数,需要将函数名首字母大写

package main

// ✅ 大写开头,可以被其他包导入使用
func MaxSlidingWindow(nums []int, k int) []int {
    // 实现...
    return result
}

func main() {
    // 在同一个包内也可以使用
    result := MaxSlidingWindow([]int{1,3,-1,-3,5,3,6,7}, 3)
}

方案3:检查文件是否在同一包

如果你有多个文件,确保它们的 package 声明相同:

// 文件1: main.go
package main  // 注意这里是 main

func maxSlidingWindow(nums []int, k int) []int {
    // ...
}

// 文件2: test.go
package main  // 必须是相同的 package main,而不是 package other

func main() {
    // ✅ 现在可以访问了
    maxSlidingWindow(...)
}

快速诊断步骤

  1. 检查调用函数的地方和函数定义是否在同一个包(相同 package xxx
  2. 如果跨包调用,需要将函数名改为大写开头
  3. 运行 go mod tidy 确保依赖正确
  4. 如果使用IDE,尝试重启语言服务器

你是在什么场景下遇到这个问题的?是同一个文件内调用,还是跨文件/跨包调用?这样我可以给出更具体的建议。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐