第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從外部文件導入時功能不正常,但在同一文件中時正常?

從外部文件導入時功能不正常,但在同一文件中時正常?

Go
慕慕森 2021-09-27 16:08:50
我正在研究 Project Euler 問題以適應 Go。問題不是關于 Project Euler,而是在這個問題中有 Project Euler 特定的代碼,可能會泄露問題的挑戰(zhàn)。“劇透警報”或其他什么,但現(xiàn)在你知道了。這是我的文件結(jié)構(gòu):+ Project Euler+-+ Go       <= GOPATH set here  +-+ src    +-+ util    | +- util.go    |    +- 001.go    +- 002.go    ...    +- 023.go對于問題 23,我SumOfDivisors向 util.go(一個包含多個問題使用的各種方法的文件)添加了一個新函數(shù):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 mainimport (    "fmt"    "util")func main() {    fmt.Println(util.SumOfDivisors(12))}我有我的GOPATH設置,/Project Euler/Go當我調(diào)用go run 023.go. “看起來很好”意味著除了我的代碼之外沒有錯誤、警告和輸出。打印到屏幕的時間是1應該的16。我不認為這是一個邏輯問題,因為當我將函數(shù)從 util.go 復制到 023.go(并將對 GetPrimeFactors 的調(diào)用修復為 util.GetPrimeFactors)時,該函數(shù)運行得很好并像它應該的那樣打印 16 . 我試過添加fmt.Println("TEST"),util.SumOfDivisors但它不會打印出這些語句,我也沒有收到錯誤或其他任何信息。如果我將函數(shù)的名稱更改util.go為其他任何名稱,即使主函數(shù)023.go沒有更改,它仍然會構(gòu)建并運行輸出1. 行為真的很奇怪。我的 util.go 文件中的其他函數(shù)似乎被調(diào)用得很好。我正在運行 Go 1.4.2。什么可能導致這種行為?該功能在本地正常工作,但在移動到導入的外部文件時無法正常工作,為什么該外部文件無法將任何內(nèi)容打印到屏幕上?所有這一切同時構(gòu)建得很好。
查看完整描述

2 回答

?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

用 go build -a 023.go

這將重建 023.go 擁有的所有依賴項,并避免使用舊的編譯版本的包。這是 Go 的強項之一,可以縮短構(gòu)建時間,但它也可能導致這些類型的問題。

正如我在評論中提到的,您一直在構(gòu)建 023.go,但您可能沒有運行go build util.go更新 023.go 所依賴的 util 包。

-a 選項將重建所有依賴項,您甚至可以添加-v以查看它正在構(gòu)建的內(nèi)容和時間。

go build -a -v 023.go

或者

go run -a -v 023.go

運行、構(gòu)建、清理和測試具有類似的標志。運行go help build以獲取更多信息。


查看完整回答
反對 回復 2021-09-27
?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超9個贊

經(jīng)過一番折騰,我發(fā)現(xiàn)里面有一個/Project Euler/pkg文件夾util.a。顯然,我構(gòu)建了一個版本的代碼,并且緩存了它的中間文件。

刪除 pkg 文件夾后,一切就都到位了。不匹配的函數(shù)名變成了編譯器錯誤,然后(在更正函數(shù)名之后)我的 util.gofmt.Println調(diào)用開始打印,我的答案是16. 最后,這不是代碼解決方案,而是緩存問題。


查看完整回答
反對 回復 2021-09-27
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號