-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
单个文件案例
以下是一个使用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
Labels
No labels