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 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换