使用Golang生成6位数的验证码?

Generate 6-digit code for phone verification, The following is a very simple approach that I have used

package main

import ( 
    "fmt"
    "math/rand"
    "time"
)        

var randowCodes = [...]byte{
    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
}        

func main() {
    var r *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))

    for i := 0; i < 3; i++ {
        var pwd []byte = make([]byte, 6)

        for j := 0; j < 6; j++ {
            index := r.Int() % len(randowCodes)

            pwd[j] = randowCodes[index]
        }

        fmt.Printf("%s
", string(pwd))                                                                  
    }    
} 

Do you have a better way to do this?

You may use "crypto/rand" package: which implements a cryptographically secure pseudorandom number generator. (try on The Go Playground):

package main

import (
    "crypto/rand"
    "fmt"
    "io"
)

func main() {
    for i := 0; i < 3; i++ {
        fmt.Println(EncodeToString(6))
    }
}

func EncodeToString(max int) string {
    b := make([]byte, max)
    n, err := io.ReadAtLeast(rand.Reader, b, max)
    if n != max {
        panic(err)
    }
    for i := 0; i < len(b); i++ {
        b[i] = table[int(b[i])%len(table)]
    }
    return string(b)
}

var table = [...]byte{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}

output:

640166
195174
221966

And see: How to generate a random string of a fixed length in golang?