Developer Tools for Random Data Generation // v2.6.1
root@generate-random:~/email/go$ _

Generate Random Email Addresses in Go - Testing & QA

Complete code tutorial with examples and best practices

[ Code Example - Quick Summary ]

Language: Go

What: Generate random email addresses in Go using math/rand package for testing, QA, and mock data generation.

Try it: Use our interactive Email generator or integrate this code into your Go application.

Generate random email addresses in Go using math/rand package for testing, QA, and mock data generation. Looking for other languages? Check our code examples in PHP , JavaScript , Python , Java , C# , C++ and Ruby or use our interactive web generator.

Go Code Example

package main

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

var (
    adjectives = []string{"happy", "sunny", "clever", "bright", "quick"}
    nouns      = []string{"panda", "tiger", "eagle", "dolphin", "falcon"}
)

func main() {
    rand.Seed(time.Now().UnixNano())

    // Random Email
    fmt.Println("Random Email:", randomEmail("example.com"))

    // Readable Email
    fmt.Println("Readable Email:", readableEmail("example.com"))

    // Name-based Email
    fmt.Println("Name-based:", emailFromName("John", "Doe", "company.com"))

    // Test Email
    fmt.Println("Test Email:", testEmail("test.local"))

    // Multiple Emails
    emails := generateEmails(3, "example.com")
    fmt.Println("Multiple Emails:", emails)

    // Validate
    email := randomEmail("example.com")
    fmt.Printf("Valid: %s\n", boolToYesNo(isValidEmail(email)))
}

func randomEmail(domain string) string {
    username := generateRandomString(12)
    return fmt.Sprintf("%s@%s", username, domain)
}

func readableEmail(domain string) string {
    adj := adjectives[rand.Intn(len(adjectives))]
    noun := nouns[rand.Intn(len(nouns))]
    num := rand.Intn(900) + 100

    return fmt.Sprintf("%s%s%d@%s", adj, noun, num, domain)
}

func emailFromName(firstName, lastName, domain string) string {
    patterns := []string{
        fmt.Sprintf("%s.%s", strings.ToLower(firstName), strings.ToLower(lastName)),
        fmt.Sprintf("%c%s", strings.ToLower(firstName)[0], strings.ToLower(lastName)),
        fmt.Sprintf("%s%c", strings.ToLower(firstName), strings.ToLower(lastName)[0]),
        fmt.Sprintf("%s_%s", strings.ToLower(firstName), strings.ToLower(lastName)),
    }

    username := patterns[rand.Intn(len(patterns))]
    return fmt.Sprintf("%s@%s", username, domain)
}

func testEmail(domain string) string {
    timestamp := time.Now().Unix()
    randomNum := rand.Intn(9000) + 1000

    return fmt.Sprintf("test_%d_%d@%s", timestamp, randomNum, domain)
}

func generateEmails(count int, domain string) []string {
    emails := make([]string, count)
    baseTime := time.Now().UnixNano()

    for i := 0; i < count; i++ {
        emails[i] = fmt.Sprintf("user%d%d@%s", baseTime, i, domain)
    }

    return emails
}

func isValidEmail(email string) bool {
    // Basic regex validation
    pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
    matched, _ := regexp.MatchString(pattern, email)
    return matched
}

func generateRandomString(length int) string {
    const chars = "abcdefghijklmnopqrstuvwxyz0123456789"
    result := make([]byte, length)

    for i := range result {
        result[i] = chars[rand.Intn(len(chars))]
    }

    return string(result)
}

func boolToYesNo(b bool) string {
    if b {
        return "Yes"
    }
    return "No"
}

[EXPLANATION]

Go uses math/rand package for random generation. Initialize with rand.Seed(time.Now().UnixNano()) for unique sequences. rand.Intn() generates random indices for array access. time.Now().Unix() provides Unix timestamp for uniqueness. strings.ToLower() converts strings to lowercase. fmt.Sprintf() formats strings with clean syntax. regexp.MatchString() validates email format. Use make([]string, count) to preallocate slices. For byte slice to string conversion, use string(bytes).

Expected Output

Random Email: k8j2n5p7x9w3@example.com
Readable Email: brightfalcon847@example.com
Name-based: john.doe@company.com
Test Email: test_1703001234_7392@test.local
Multiple Emails: [user17030012345678900@example.com user17030012345678901@example.com user17030012345678902@example.com]
Valid: Yes

Common Use Cases

  • Generate test data for Go web applications
  • Create mock users for testing package test suites
  • Populate PostgreSQL/MongoDB databases with seed data
  • Generate emails for REST API testing
  • Create test accounts for end-to-end testing

Important Notes

  • rand.Seed() should be called once at program start
  • rand.Intn(n) returns values 0 to n-1
  • For concurrent usage, use rand.New(rand.NewSource(seed))
  • Consider using go-faker library for more features
  • Use test domains (.test, .local, example.com) in test environments

Try Our Interactive Generator

Don't want to write code? Use our free web-based Email generator with instant results.

TRY EMAIL GENERATOR →