If you wish to create a cryptography secure or non-secure random string with variable length, you can use examples below.


Cryptography secure version


package main

import (
"crypto/rand"
"log"
)

const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

func main() {
ran, err := random(10)
if err != nil {
log.Fatalln(err)
}

log.Println(ran)
}

func random(length int) (string, error) {
bytes := make([]byte, length)

if _, err := rand.Read(bytes); err != nil {
return "", err
}

for i, b := range bytes {
bytes[i] = chars[b%byte(len(chars))]
}

return string(bytes), nil
}

Tests


# 10
r8khqsyt7E

# 100
WwB3qqFWbRol9tzBs1859jiqqtC8HZgayOw20PxOQLltlQ4CGkkqnt6Un5Ej5Sk5MIBnrH619rtCvU7i7xqz2523M1qvJ1I11skg

Non-secure version - 1


package random

import (
"math/rand"
"time"
)

const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

func String(length int) (string, error) {
rand.Seed(time.Now().UnixNano())

bytes := make([]byte, length)

_, err := rand.Read(bytes)
if err != nil {
return "", err
}

for k, v := range bytes {
bytes[k] = chars[v%byte(len(chars))]
}

return string(bytes), nil
}

Tests


# 10
uhPv8zBz1K

# 100
k547x6Dhm1xfuAtQpEdfg30fZ147nEcb59suGtdanLu0mXVhEooayMo8A7FVa3HtNxoE984vbVc0UD8LpPsBSXj0C7KqPa7TxZbN

Non-secure version - 2


package random

import (
"math/rand"
"time"
)

var chars = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

func String(length int) string {
rand.Seed(time.Now().UnixNano())

pick := make([]rune, length)
for i := range pick {
pick[i] = chars[rand.Intn(len(chars))]
}

return string(pick)
}

Tests


# 10
57fCgGTwQf

# 100
Mu1gbzW3N5kQNHDL5yZN4WJNH0zyWUWw8UYiVGgAaNjSGyyRyG1cTz1MISIMT31IyG0tn5ADIpOucko5BfjkdUdvqgKDmDKT7Xsg