Go语言打造起名系统,拿去叫我雷锋

2024-05-27 00:32

本文主要是介绍Go语言打造起名系统,拿去叫我雷锋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求简介

  • 能胡乱地随机生成姓名,并且听起来像那么回事儿~
  • 代码能复用到各种项目中,比如游戏NPC的起名等;

整体实现思路

  • 很多中国人的姓名构成如下:姓氏+辈分字+名字,例如朱厚照,朱是姓氏,厚是字辈,照是名字;于是:
  • 从百家姓中胡乱抽取一个,生成随机的姓氏;
  • 从千字文中胡乱抽取一个,作为随机名字;
  • 不同姓氏的辈分可以上网查询,下图展示的是湖南欧阳氏的辈分列表,我们可以建立一个map,通过姓氏查询到该姓氏的全部字辈,并胡乱抽取一个作为姓名的中间字;
    在这里插入图片描述

代码实现
数据准备

/*定义姓、辈、名的数据容器*/
var (//定义一堆姓氏familyNames = []string{"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "楚", "卫", "蒋", "沈", "韩", "杨", "张", "欧阳", "东门", "西门", "上官", "诸葛", "司徒", "司空", "夏侯"}//创建辈分字典,姓氏为键,该姓氏的全部【辈分字切片】为值middleNamesMap = map[string][]string{}//定义一堆名字lastNames = []string{"春", "夏", "秋", "冬", "风", "霜", "雨", "雪", "木", "禾", "米", "竹", "山", "石", "田", "土", "福", "禄", "寿", "喜", "文", "武", "才", "华"}
)/*
在包的初始化方法中,为不同姓氏配置不同辈分字切片
这里桫哥模拟的是为欧阳氏添加“宗的永其光”五个辈分字,其余的是乱扯的~
*/
func init() {for _, x := range familyNames {if x != "欧阳" {middleNamesMap[x] = []string{"德", "惟", "守", "世", "令", "子", "伯", "师", "希", "与", "孟", "由", "宜", "顺", "元", "允", "宗", "仲", "士", "不", "善", "汝", "崇", "必", "良", "友", "季", "同"}} else {middleNamesMap[x] = []string{"宗", "的", "永", "其", "光"}}}
}

于是我们胡乱抽取姓氏和名字,辈分字先根据姓氏查询到对应的切片,再从切片里乱抓一个,实现如下:

func GetRandomName() (name string) {familyName := familyNames[GetRandomInt(0, len(familyNames)-1)]middleName := middleNamesMap[familyName][GetRandomInt(0, len(middleNamesMap[familyName])-1)]lastName := lastNames[GetRandomInt(0, len(lastNames)-1)]return familyName + middleName + lastName
}

上面我们用到了一个获取随机数的函数func GetRandomInt(start, end int) int,它能从[start,end]之间抓取随机整数,其实现如下:

var(//随机数互斥锁(确保GetRandomInt不能被并发访问)randomMutex sync.Mutex
)/*获取[start,end]之间的随机数*/
func GetRandomInt(start, end int) int {//访问加同步锁,是因为并发访问时容易因为时间种子相同而生成相同的随机数,那就狠不随机鸟!randomMutex.Lock()//利用定时器阻塞1纳秒,保证时间种子得以更改<-time.After(1 * time.Nanosecond)//根据时间纳秒(种子)生成随机数对象r := rand.New(rand.NewSource(time.Now().UnixNano()))//得到[start,end]之间的随机数n := start + r.Intn(end-start+1)//释放同步锁,供其它协程调用randomMutex.Unlock()return n
}

让我们一起去浪(Golang)~

func main() {for i:=0;i<10 ;i++  {fmt.Println(utils.GetRandomName())}
}

在这里插入图片描述

酷毙了有木有?!

这篇关于Go语言打造起名系统,拿去叫我雷锋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006025

相关文章

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和