Skip to content

golang实现一个随机生成英文人名的函数,要求连续两次生成人名的时候不能相同 #77

@openHacking

Description

@openHacking

单个文件案例

以下是一个使用golang实现的随机生成英文人名并检查连续两次是否相同的函数:

package main

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

// 用于生成随机数种子
var r = rand.New(rand.NewSource(time.Now().UnixNano()))

// 人名结构体
type Name struct {
    First string // 名字
    Last  string // 姓氏
}

// 随机生成英文名字函数
func generateName() *Name {
    // 姓氏列表
    lastNames := []string{"Smith", "Johnson", "Brown", "Taylor", "Miller", "Wilson", "Moore", "Davis", "Clark", "Lee", "Hall", "Allen", "King", "Baker", "Adams"}

    // 随机选择一个姓氏
    lastName := lastNames[r.Intn(len(lastNames))]

    // 名字列表
    firstNames := []string{"Emma", "Noah", "Olivia", "Liam", "Ava", "William", "Sophia", "Mason", "Isabella", "James", "Mia", "Benjamin", "Charlotte", "Jacob", "Amelia"}

    // 随机选择一个名字
    firstName := firstNames[r.Intn(len(firstNames))]

    return &Name{First: firstName, Last: lastName}
}

// 生成不重复的英文名字函数
func generateUniqueName(prevName *Name) *Name {
    for {
        // 生成一个名字
        name := generateName()

        // 如果这个名字和上一个名字不相同,返回这个名字
        if prevName == nil || name.First != prevName.First || name.Last != prevName.Last {
            return name
        }
    }
}

func main() {
    var prevName *Name

    // 生成10个不重复的名字
    for i := 0; i < 10; i++ {
        name := generateUniqueName(prevName)
        fmt.Println(name.First, name.Last)
        prevName = name
    }
}

该函数使用两个列表分别存储姓氏和名字,随机从列表中选择一个生成一个英文名字。在生成下一个名字时,它将检查前一个名字是否已经存在,如果存在,则继续生成直到找到不同的名字为止。

多个文件案例

utils/util文件

package utils
import (
	"math/rand"
	"time"
)

// 用于生成随机数种子
var r = rand.New(rand.NewSource(time.Now().UnixNano()))

// 当前随机生成的人名
var prevName *Name

// 人名结构体
type Name struct {
	First string // 名字
	Last  string // 姓氏
}

// 随机生成英文名字函数
func generateName() *Name {
	// 姓氏列表
	lastNames := []string{"Smith", "Johnson", "Brown", "Taylor", "Miller", "Wilson", "Moore", "Davis", "Clark", "Lee", "Hall", "Allen", "King", "Baker", "Adams"}

	// 随机选择一个姓氏
	lastName := lastNames[r.Intn(len(lastNames))]

	// 名字列表
	firstNames := []string{"Emma", "Noah", "Olivia", "Liam", "Ava", "William", "Sophia", "Mason", "Isabella", "James", "Mia", "Benjamin", "Charlotte", "Jacob", "Amelia"}

	// 随机选择一个名字
	firstName := firstNames[r.Intn(len(firstNames))]

	return &Name{First: firstName, Last: lastName}
}

// 生成不重复的英文名字函数
func generateUniqueName(prevName *Name) *Name {
	for {
		// 生成一个名字
		name := generateName()

		// 如果这个名字和上一个名字不相同,返回这个名字
		if prevName == nil || name.First != prevName.First || name.Last != prevName.Last {
			return name
		}
	}
}

func GetUniqueName() *Name {
	name := generateUniqueName(prevName)

	prevName = name

	return name

}

在main.go中使用

import(
"fmt"
"github.com/openHacking/gohack/utils"
)
	// 生成10个不重复的名字
	for i := 0; i < 100; i++ {
		name := utils.GetUniqueName()
		fmt.Println("GET name====",name.First, name.Last)
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions