gpt4 book ai didi

go - 从外部文件导入时功能不正常,但在同一文件中时正常?

转载 作者:IT王子 更新时间:2023-10-29 02:30:09 26 4
gpt4 key购买 nike

我正在研究 Project Euler 问题,以便习惯 Go。问题不是关于 Project Euler,但这个问题中有 Project Euler 的特定代码可能会放弃问题的挑战。 “剧透警报”之类的,但现在你知道了。这是我的文件结构:

+ Project Euler
+-+ Go <= GOPATH set here
+-+ src
+-+ util
| +- util.go
|
+- 001.go
+- 002.go
...
+- 023.go

对于问题 23,我在 util.go 中添加了一个新函数 SumOfDivisors(一个包含多个问题使用的各种方法的文件):

func GetPrimeFactors(val int) map[int]int {
primes := map[int]int{}
init := val
num := 2
for val > 1 {
if (val % num) == 0 {
if num == init {
return nil
}
_, e := primes[num]
if e {
primes[num]++
} else {
primes[num] = 1
}
val /= num
} else {
num++
}
}
return primes
}

func SumOfDivisors(val int) int {
primes := GetPrimeFactors(val)
if primes == nil {
if val == 0 {
return 0
} else {
return 1
}
}
total := 1
for k, v := range primes {
if v > 1 {
n := int((math.Pow(float64(k), float64(v+1)) - 1) / float64(k-1))
total *= n
} else {
n := k + 1
total *= n
}
}
return total - val
}

为了测试这个方法,我在023.go里面写了这个基本的Go:

package main

import (
"fmt"
"util"
)

func main() {
fmt.Println(util.SumOfDivisors(12))
}

我将 GOPATH 设置为 /Project Euler/Go,当我调用 go run 023.go 时,它的构建和运行看起来很好. “看起来不错”意味着没有错误、警告,除了我的代码之外没有任何输出。

打印到屏幕上的是 1,而它应该是 16。我不认为这是一个逻辑问题,因为当我将函数从 util.go 复制到 023.go(并将对 GetPrimeFactors 的调用修复为 util.GetPrimeFactors)时,函数运行正常并打印 16 就像它应该的那样.我试过将 fmt.Println("TEST") 添加到 util.SumOfDivisors 但它不会打印出这些语句而且我没有收到错误或其他任何内容.如果我将 util.go 中的函数名称更改为其他任何名称,即使主函数是 023.go 没有更改,它仍然会构建并运行输出1。它的行为真的很奇怪。

我的 util.go 文件中的其他函数似乎被调用得很好。

我正在运行 Go 1.4.2。是什么导致了这种行为?该功能在本地正常工作,但在移动到导入的外部文件时却不能正常工作,为什么该外部文件不能在屏幕上打印任何内容?所有这一切,同时构建得很好。

最佳答案

使用go build -a 023.go

这将重建 023.go 拥有的所有依赖项,并将避免使用包的旧编译版本。这是 go 的强项之一,可以加快构建时间,但它也可能导致这些类型的问题。

正如我在评论中提到的,您一直在构建 023.go,但您可能没有运行 go build util.go 来更新 023.go 所依赖的 util 包。

-a 选项将重建所有依赖项,您甚至可以添加 -v 以查看它正在构建什么以及何时构建。

go build -a -v 023.go

go run -a -v 023.go

Run、build、clean 和 test 具有相似的标志。运行 go help build 获取更多信息。

关于go - 从外部文件导入时功能不正常,但在同一文件中时正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com