17

据我所知,Go 默认使用 int 作为迭代器,除了我想要 uint64。我想不出一种方法来改变 Go 中 for 循环迭代器的类型。有没有办法与 for 语句内联?当我尝试在循环中执行某些操作时,默认类型的 int 会导致问题,例如 mod 操作 (%)。

func main() {                                                                                                                               
    var val uint64 = 1234567890                                                 
    for i:=1; i<val; i+=2 {  
        if val%i==0 {
        }                                        
    }                                                                          
} 

./q.go:7: invalid operation: i < val (mismatched types int and uint64)
./q.go:8: invalid operation: val % i (mismatched types uint64 and int)
4

2 回答 2

33

你的意思是这样的?

for i, val := uint64(1), uint64(1234567890); i<val; i+=2 {
    // your modulus operation
} 

http://play.golang.org/p/yAdiJu4pNC

于 2013-02-22T18:01:47.857 回答
0

另一种选择是使用“while”循环:

package main

func main() {                                                                 
   var i, val uint64 = 1, 1234567890
   for i < val {
      if val % i == 0 {
         println(i)
      }
      i += 2
   }                                                                          
} 

https://golang.org/ref/spec#For_condition

于 2021-03-06T14:37:30.793 回答