千家信息网

Go语言版本中forgery的作用是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了Go语言版本中forgery的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言版本中forgery的作用是什么文章都会有所收获,下面我们
千家信息网最后更新 2026年11月03日Go语言版本中forgery的作用是什么

这篇文章主要介绍了Go语言版本中forgery的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言版本中forgery的作用是什么文章都会有所收获,下面我们一起来看看吧。

使用过Python语言的朋友们可能使用过 forgery_py ,它是一个伪造数据的工具。能伪造一些常用的数据。在我们开发过程和效果展示是十分有用。但是没有Go语言版本的,所以就动手折腾吧。

从源码入手

在forgery_py的 PyPi 有一段的实例代码:

>>> import forgery_py>>> forgery_py.address.street_address()u'4358 Shopko Junction'>>> forgery_py.basic.hex_color()'3F0A59'>>> forgery_py.currency.description()u'Slovenia Tolars'>>> forgery_py.date.date()datetime.date(2012, 7, 27)>>> forgery_py.internet.email_address()u'brian@zazio.mil'>>> forgery_py.lorem_ipsum.title()u'Pretium nam rhoncus ultrices!'>>> forgery_py.name.full_name()u'Mary Peters'>>> forgery_py.personal.language()u'Hungarian'

从以上的方法调用我们可以看出forgery_py下有一系列的 *.py 文件,里面有各种方法,实现各种功能,我们在来通过分析下Python版本的forgery_py的源码来看看它的实现原理。

# ForgeryPy 包的一级目录├── dictionaries # 伪造内容和来源目录,目录下存放的都是一些文本文件├── dictionaries_loader.py # 加载文件脚本├── forgery    # 主目录,实现各种数据伪造功能,目录下存放的都是python文件├── __init__.py

我们在来看下forgery目录下的脚本

$ cat name.pyimport randomfrom ..dictionaries_loader import get_dictionary__all__ = [  'first_name', 'last_name', 'full_name', 'male_first_name',  'female_first_name', 'company_name', 'job_title', 'job_title_suffix',  'title', 'suffix', 'location', 'industry']def first_name():  """Random male of female first name."""  _dict = get_dictionary('male_first_names')  _dict += get_dictionary('female_first_names')  return random.choice(_dict).strip()

__all__ 设置能被调用的方法。

first_name() 方法是forgery_py中一个典型伪造数据方法,我们只要来分析它就可以知道forgery_py的工作原理了。

这个方法代码很少,能容易就看出 _dict = get_dictionary('male_first_names') 和 _dict += get_dictionary('female_first_names') 获取的数据合并,在最后的 return random.choice(_dict).strip() 返回随机的数据。它的重点在于 get_dictionary() ,所以我们需要来看它的所在位置 dictionaries_loader.py 文件。

$ cat dictionaries_loaderimport randomDICTIONARIES_PATH = abspath(join(dirname(__file__), 'dictionaries'))dictionaries_cache = {}def get_dictionary(dict_name):  """  Load a dictionary file ``dict_name`` (if it's not cached) and return its  contents as an array of strings.  """  global dictionaries_cache  if dict_name not in dictionaries_cache:    try:      dictionary_file = codecs.open(        join(DICTIONARIES_PATH, dict_name), 'r', 'utf-8'      )    except IOError:      None    else:      dictionaries_cache[dict_name] = dictionary_file.readlines()      dictionary_file.close()  return dictionaries_cache[dict_name]

以上就是 dictionaries_loader.py 文件去掉注释后的所以要内容。它的主要实现就是:定义一个全局的字典参数 dictionaries_cache 作为缓存,然后定义方法 get_dictionary() 获取源数据, get_dictionary() 中每次forgery目录底下方法调用时先查看缓存,缓存字典中存在数据就直接输出,不存在就读取 dictionaries 底下的对应文件,并存入缓存。最后是返回数据。

总的来说forgery_py的原理就是:一个方法调用,去读内存中的缓存,存在就直接返回,不存在就到对应的文本文件中读取并写入缓存并返回。返回来的数据再随机选取输出结果。

使用Go语言实现

在了解了forgery_py的工作原理之后,我们就可以来使用Go语言来实现了。

# forgery的基本目录$ cat forgery├── dictionaries # 数据源│  ├── male_first_names├── name.go  # 具体功能实现└── loader.go # 加载数据

根据python版本的我们也来创建对应的目录。

实现数据的读取的缓存:

// forgery/loader.gopackage forgeryimport (  "os"  "io"  "bufio"  "math/rand"  "time"  "strings")// 全局的缓存mapvar dictionaries map[string][]string = make(map[string][]string)// 在获取数据之后随机输出func random(slice []string) string {  rand.Seed(time.Now().UnixNano())  n := rand.Intn(len(slice))  return strings.TrimSpace(slice[n])}// 主要的数据加载方法func loader(name string) (slice []string, err error) {  slice, ok := dictionaries[name]  // 缓存中存在数据,直接返回  if ok {    return slice, nil  }  // 读取对应文件  file, err := os.Open("./dictionaries/" + name)  if err != nil {    return slice, err  }  defer file.Close()  rd := bufio.NewReader(file)  for {    line, err := rd.ReadString('\n')    slice = append(slice, line)    if err != nil || io.EOF == err {      break    }  }  dictionaries[name] = slice  return slice, nil}// 统一的错误处理func checkErr(err error) (string, error) {  return "", err}

实现具体的功能:

// forgery/name.go// Random male of female first name.func FirstName() (string, error) {  slice, err := loader("male_first_names")  checkErr(err)  slice1, err := loader("female_first_names")  checkErr(err)  slice = append(slice, slice1...)  return random(slice), nil}

这样就将python语言版本的forgery_py使用Go来实现了。

关于"Go语言版本中forgery的作用是什么"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Go语言版本中forgery的作用是什么"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

数据 方法 文件 目录 缓存 版本 语言 作用 内容 功能 原理 就是 知识 输出 代码 全局 字典 文本 源码 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 互联网是不是新科技 科技企业和互联网企业 互联网金融 科技 互联网科技集团 互联网科技的英文 狮子座互联网科技有限公司 北京禾田雨橡互联网科技 美国互联网前沿科技 互联网公司会议桌创意科技软装饰 青岛中康互联网医疗科技有限公司 互联网科技创新服务 崇明区互联网教育科技诚信经营 广州市恰铎互联网科技有限公司 亳州好赞互联网科技有限公司 工业互联网等科技实现智能化赋能 明优互联网科技有限公司 上海创道互联网络科技有限公司 广州燕处互联网科技有限公司 广西科技产业互联网是什么 咖啡 互联网科技股 广东万易互联网科技有限公司惠州分公司 互联网下的科技发展 奇酷互联网科技公司 居家互联网科技有限公司 互联网科技热点资讯 华夏互联网科技业 沐思想互联网科技有限公司 广州全民伙伴互联网科技有限公司
0