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 →Other Programming Languages
View Email generation code examples in PHP
View Email generation code examples in JavaScript
View Email generation code examples in Python
View Email generation code examples in Java
View Email generation code examples in C#
View Email generation code examples in C++
View Email generation code examples in Ruby