Python爬虫之六:智联招聘进阶版

运行平台: windows python版本: python3.6 ide: sublime text 其他工具: chrome浏览器

0、写在前面的话

本文是基于基础版上做的修改,如果没有阅读基础版,请移步 Python爬虫之五:抓取智联招聘基础版

在基础版中,构造url时使用了urllib库的urlencode函数:

代码语言:javascript代码运行次数:0运行复制

 url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)    try:        # 获取网页内容,返回html数据        response = requests.get(url, headers=headers)    ...

其实用reuqests库可以完成此工作,本例将该部分改为:

代码语言:javascript代码运行次数:0运行复制

 url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?'    try:        # 获取网页内容,返回html数据        response = requests.get(url, params=paras, headers=headers)    ...

1、找到职位链接

为了得到更加详细的职位信息,我们要找到职位链接,在新的页面中寻找数据。上篇文章中我们没有解析职位链接,那再来找一下吧:

立即学习“Python免费学习笔记(深入)”;

Python爬虫之六:智联招聘进阶版

修改一下正则表达式:

代码语言:javascript代码运行次数:0运行复制

# 正则表达式进行解析    pattern = re.compile('(.*?).*?' # 匹配职位详情地址和职位名称        '.*? target="_blank">(.*?).*?'                             # 匹配公司名称        '(.*?)', re.S)                                            # 匹配月薪          # 匹配所有符合条件的内容    items = re.findall(pattern, html)   

2、求工资平均值

工资有两种形式xxxx-yyyy或者面议,此处取第一种形式的平均值作为分析标准,虽有偏差但是也差不多,这是求职中最重要的一项指标。

代码语言:javascript代码运行次数:0运行复制

for item in items:    salary_avarage = 0    temp = item[3]    if temp != '面议':        idx = temp.find('-')        # 求平均工资        salary_avarage = (int(temp[0:idx]) + int(temp[idx+1:]))//2

3、解析职位详细信息3.1 网页解析

第一步已经将职位地址找到,在浏览器打开之后我们要找到如下几项数据:

Python爬虫之六:智联招聘进阶版

在开发者工具中查找这几项数据,如下图所示:

Python爬虫之六:智联招聘进阶版

HTML结构如下所示:

代码语言:javascript代码运行次数:0运行复制

# 数据HTML结构|------
==>|------
==>==>|------
    ==>==>==>|------
  • 工作经验:3-5年==>==>==>|------
  • 最低学历:本科==>==>|------
    ==>==>==>|------
    ==>==>==>==>|------
    ==>==>==>==>==>|------

    工作职责:

    ==>==>==>==>==>|------

    ********

    ==>==>==>==>==>|------

    ********

    # 工作职责详情==>|------
    ==>==>|------
    ==>==>==>|------
      ==>==>==>==>|------
    • 公司规模:100-499人

3.2 代码实现

为了学习一下BeautifulSoup库的使用,我们不再使用正则表达式解析,而是BeautifulSoup库解析HTML标签来获得我们想要得到的内容。

解析库的安装:pip install beautifulsoup4

下面介绍一下本例中使用到的功能:

库的引入:from bs4 import BeautifulSoup数据引入:soup = BeautifulSoup(html, 'html.parser') ,其中html是我们要解析的html源码,html.parser指定HTML的解析器为Python标准库。查找标签:find(name,attrs,recursive,text,**kwargs),find返回的匹配结果的第一个元素查找所有标签:find_all(name,attrs,recursive,text,**kwargs)可以根据标签名,属性,内容查找文档,返回找到的所有元素获取内容:get_text()就可以获取文本内容获取子标签:soup.p这种方式就可以获取到soup下的第一个p标签代码语言:javascript代码运行次数:0运行复制

def get_job_detail(html):    requirement = ''    # 使用BeautifulSoup进行数据筛选    soup = BeautifulSoup(html, 'html.parser')    # 找到
    标签 for ul in soup.find_all('ul', class_='terminal-ul clearfix'): # 该标签共有8个子标签,分别为: # 职位月薪|工作地点|发布日期|工作性质|工作经验|最低学历|招聘人数|职位类别 lis = ul.find_all('strong') # 工作经验 years = lis[4].get_text() # 最低学历 education = lis[5].get_text() # 筛选任职要求 for terminalpage in soup.find_all('div', class_='terminalpage-main clearfix'): for box in terminalpage.find_all('div', class_='tab-cont-box'): cont = box.find_all('div', class_='tab-inner-cont')[0] ps = cont.find_all('p') # "立即申请"按钮也是个p标签,将其排除 for i in range(len(ps) - 1): requirement += ps[i].get_text().replace("n", "").strip() # 去掉换行符和空格 # 筛选公司规模,该标签内有四个或五个
  • 标签,但是第一个就是公司规模 scale = soup.find(class_='terminal-ul clearfix terminal-company mt20').find_all('li')[0].strong.get_text() return {'years': years, 'education': education, 'requirement': requirement, 'scale': scale}

本次我们将职位描述写入txt文件,其余信息写入csv文件

csv文件采用逐行写入的方式这样也可以省点内存,修改write_csv_rows函数:

代码语言:javascript代码运行次数:0运行复制

def write_csv_rows(path, headers, rows):    '''    写入行    '''    with open(path, 'a', encoding='gb18030', newline='') as f:        f_csv = csv.DictWriter(f, headers)        # 如果写入数据为字典,则写入一行,否则写入多行        if type(rows) == type({}):            f_csv.writerow(rows)        else:            f_csv.writerows(rows)

添加写txt文件函数:

代码语言:javascript代码运行次数:0运行复制

def write_txt_file(path, txt):    '''    写入txt文本    '''    with open(path, 'a', encoding='gb18030', newline='') as f:        f.write(txt)

我们最重要对职位描述的内容进行词频统计,一些标点符号等会影响统计,使用正则表达式将其剔除:

代码语言:javascript代码运行次数:0运行复制

# 对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除pattern = re.compile(r'[一-龥]+')filterdata = re.findall(pattern, job_detail.get('requirement'))write_txt_file(txt_filename, ''.join(filterdata))

至此,职位详细信息的获取及保存的工作已经完成,来看一下此时的main函数:

代码语言:javascript代码运行次数:0运行复制

def main(city, keyword, region, pages):    '''    主函数    '''    csv_filename = 'zl_' + city + '_' + keyword + '.csv'    txt_filename = 'zl_' + city + '_' + keyword + '.txt'    headers = ['job', 'years', 'education', 'salary', 'company', 'scale', 'job_url']    write_csv_headers(csv_filename, headers)    for i in range(pages):        '''        获取该页中所有职位信息,写入csv文件        '''        job_dict = {}        html = get_one_page(city, keyword, region, i)        items = parse_one_page(html)        for item in items:            html = get_detail_page(item.get('job_url'))            job_detail = get_job_detail(html)            job_dict['job'] = item.get('job')            job_dict['years'] = job_detail.get('years')            job_dict['education'] = job_detail.get('education')            job_dict['salary'] = item.get('salary')            job_dict['company'] = item.get('company')            job_dict['scale'] = job_detail.get('scale')            job_dict['job_url'] = item.get('job_url')            # 对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除            pattern = re.compile(r'[一-龥]+')            filterdata = re.findall(pattern, job_detail.get('requirement'))            write_txt_file(txt_filename, ''.join(filterdata))            write_csv_rows(csv_filename, headers, job_dict)

4、数据分析

本节内容为此版本的重点。

4.1 工资统计

我们对各个阶段工资的占比进行统计,分析该行业的薪资分布水平。前面我们已经把数据保存到csv文件里了,接下来要读取salary列:

讯飞智聘 讯飞智聘

科大讯飞推出的一站式AI招聘管理平台

讯飞智聘 42 查看详情 讯飞智聘 代码语言:javascript代码运行次数:0运行复制

def read_csv_column(path, column):    '''    读取一列    '''    with open(path, 'r', encoding='gb18030', newline='') as f:        reader = csv.reader(f)        return [row[column] for row in reader]# main函数里添加print(read_csv_column(csv_filename, 3))#下面为打印结果['salary', '7000', '5000', '25000', '12500', '25000', '20000', '32500', '20000', '15000', '9000', '5000', '5000', '12500', '24000', '15000', '18000', '25000', '20000', '0', '20000', '12500', '17500', '17500', '20000', '11500', '25000', '12500', '17500', '25000', '22500', '22500', '25000', '17500', '7000', '25000', '3000', '22500', '15000', '25000', '20000', '22500', '15000', '15000', '25000', '17500', '22500', '10500', '20000', '17500', '22500', '17500', '25000', '20000', '11500', '11250', '12500', '14000', '12500', '17500', '15000']

从结果可以看出,除了第一项,其他的都为平均工资,但是此时的工资为字符串,为了方便统计,我们将其转换成整形:

代码语言:javascript代码运行次数:0运行复制

salaries = []sal = read_csv_column(csv_filename, 3)    # 撇除第一项,并转换成整形,生成新的列表    for i in range(len(sal) - 1):        # 工资为'0'的表示招聘上写的是'面议',不做统计        if not sal[i] == '0':            salaries.append(int(sal[i + 1]))    print(salaries)# 下面为打印结果[7000, 5000, 25000, 12500, 25000, 20000, 32500, 20000, 15000, 9000, 5000, 5000, 12500, 24000, 15000, 18000, 25000, 20000, 0, 20000, 12500, 20000, 11500, 17500, 25000, 12500, 17500, 25000, 25000, 22500, 22500, 17500, 17500, 7000, 25000, 3000, 22500, 15000, 25000, 20000, 22500, 15000, 22500, 10500, 20000, 15000, 17500, 17500, 25000, 17500, 22500, 25000, 12500, 20000, 11250, 11500, 14000, 12500, 15000, 17500]

我们用直方图进行展示:

代码语言:javascript代码运行次数:0运行复制

plt.hist(salaries, bins=10 ,)plt.show()

生成效果图如下:

Python爬虫之六:智联招聘进阶版

从图中可以看出工资分布的情况,这样在你找工作时可以做一个参考。

4.2 职位描述词频统计

对职位描述词频统计的意义是可以了解该职位对技能的基本要求,如果正在找工作,可以估计一下自己的要求是否符合该职位;如果想要一年后换工作,那么也可以提前做好准备,迎接新的挑战。

词频统计用到了 jieba、numpy、pandas、scipy库。如果电脑上没有这两个库,执行安装指令:

pip install jiebapip install pandaspip install numpypip install scipy4.2.1 读取txt文件

前面已经将职位描述保存到txt文件里了,现在我们将其读出:

代码语言:javascript代码运行次数:0运行复制

def read_txt_file(path):    '''    读取txt文本    '''    with open(path, 'r', encoding='gb18030', newline='') as f:        return f.read()

简单测试一下:

代码语言:javascript代码运行次数:0运行复制

import jiebaimport pandas as pdcontent = read_txt_file(txt_filename)segment = jieba.lcut(content)words_df=pd.DataFrame({'segment':segment})print(words_df)# 输出结果如下:      segment0        岗位职责1          参与2          公司3        软件产品4          后台5          研发6           和7          维护8          工作9          参与10        建筑物11         联网12       数据分析13         算法14          的15         设计16          和17         开发18          可19         独立20         完成21         业务22         算法23         模块...            ...

从结果可以看出:“岗位职责”、“参与”、“公司”、软件产品“、”的“、”和“等单词并没有实际意义,所以我们要将他们从表中删除。

4.2.2 stop word

下面引入一个概念:stop word, 在网站里面存在大量的常用词比如:“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。

百度搜索stpowords.txt进行下载,放到py文件同级目录。接下来测试一下:

代码语言:javascript代码运行次数:0运行复制

content = read_txt_file(txt_filename)segment = jieba.lcut(content)words_df=pd.DataFrame({'segment':segment})stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep=" ",names=['stopword'],encoding='utf-8')words_df=words_df[~words_df.segment.isin(stopwords.stopword)]print(words_df)# 以下为输出结果0        岗位职责1          参与2          公司3        软件产品4          后台5          研发7          维护8          工作9          参与10        建筑物11         联网12       数据分析13         算法15         设计17         开发19         独立21         业务22         算法23         模块24         开发28         产品29         目标31         改进32         创新33         任职35         熟练38         开发39         经验40         优先41         熟悉...       ...

从结果看出,那些常用的stop word比如:“的”、“和”、“可”等已经被剔除了,但是还有一些词如“岗位职责”、“参与”等也没有实际意义,如果对词频统计不产生影响,那么就无所谓,在后面统计时再决定是否对其剔除。

4.2.3 词频统计

重头戏来了,词频统计使用numpy:

代码语言:javascript代码运行次数:0运行复制

import numpywords_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})    words_stat = words_stat.reset_index().sort_values(by=["计数"],ascending=False)    print(words_stat)# 以下是爬取全部“北京市海淀区Python工程师”职位的运行结果:    segment   计数362      开发  505590      熟悉  409701      经验  281325      工作  209820      负责  171741      能力  169793      设计  16182       优先  160409      技术  157621      相关  145322    岗位职责  127683      系统  12664       产品  124904      项目  123671      算法  10778       任职  107532      框架  107591      熟练  104

可以看出,某些词语还是影响了统计结果,我将以下stop word加入stopword.txt中:

代码语言:javascript代码运行次数:0运行复制

开发、熟悉、熟练、精通、经验、工作、负责、能力、有限、相关、岗位职责、任职、语言、平台、参与、优先、技术、学习、产品、公司、熟练掌握、以上学历

最后运行结果如下:

代码语言:javascript代码运行次数:0运行复制

775      设计  136667      系统  109884      项目  105578      熟练   95520      框架   92656      算法   90143      分析   9080       优化   77471     数据库   75693      维护   66235      团队   6572       代码   61478      文档   60879      需求   58766     计算机   56698      编程   56616      研发   49540      沟通   49527      模块   49379      性能   46695      编写   45475    数据结构   44

这样基本上就是对技能的一些要求了,你也可以根据自己的需求再去修改stopword.txt已达到更加完美的效果。

4.2.4 词频可视化:词云

词频统计虽然出来了,可以看出排名,但是不完美,接下来我们将它可视化。使用到wordcloud库,详细介绍见 github ,使用pip install wordcloud进行安装。

代码语言:javascript代码运行次数:0运行复制

from scipy.misc import imreadfrom wordcloud import WordCloud, ImageColorGenerator    # 设置词云属性    color_mask = imread('background.jfif')    wordcloud = WordCloud(font_path="simhei.ttf",   # 设置字体可以显示中文                    background_color="white",       # 背景颜色                    max_words=100,                  # 词云显示的最大词数                    mask=color_mask,                # 设置背景图片                    max_font_size=100,              # 字体最大值                    random_state=42,                    width=1000, height=860, margin=2,# 设置图片默认的大小,但是如果使用背景图片的话,                                                   # 那么保存的图片大小将会按照其大小保存,margin为词语边缘距离                    )    # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数    word_frequence = {x[0]:x[1]for x in words_stat.head(100).values}    word_frequence_dict = {}    for key in word_frequence:        word_frequence_dict[key] = word_frequence[key]    wordcloud.generate_from_frequencies(word_frequence_dict)    # 从背景图片生成颜色值      image_colors = ImageColorGenerator(color_mask)     # 重新上色    wordcloud.recolor(color_func=image_colors)    # 保存图片    wordcloud.to_file('output.png')    plt.imshow(wordcloud)    plt.axis("off")    plt.show()

运行效果图如下(左图为原图,右图为生成的图片):

Python爬虫之六:智联招聘进阶版

至此,词频统计及其可视化完成。

5、其他想法

本例中进行了两种数据分析,虽为进阶版,但是还是有很多可以继续发挥的地方:

分析工作年限和工资的关系并展示、预测统计不同工作岗位的薪资差别利用多线程或多进程提升效率

推荐阅读:

Python爬虫:十几行代码下载王者荣耀所有皮肤Python爬虫之二:自制简易词典Python爬虫之三:抓取猫眼电影TOP100Python爬虫之四:今日头条街拍美图Python爬虫之五:抓取智联招聘基础版

以上就是Python爬虫之六:智联招聘进阶版的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/510780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 00:37:25
下一篇 2025年11月9日 00:38:28

相关推荐

  • 如何用Golang处理微服务间高并发请求_Golang 微服务高并发处理技巧

    Golang微服务高并发处理需合理利用goroutine与channel控制并发,采用gRPC优化通信,结合限流熔断机制提升稳定性,通过消息队列异步解耦,平衡性能与复杂度以构建可扩展系统。 在微服务架构中,Golang 因其轻量级协程(goroutine)和高效的并发模型,成为处理高并发请求的首选语…

    2025年12月16日
    000
  • Golang如何进行函数覆盖率分析_Golang 覆盖率分析实践

    使用go test -coverprofile生成覆盖率数据,通过go tool cover -html查看详细报告,结合-covermode=count提升精度,并在CI中设置阈值确保质量,实现对函数和分支覆盖的有效分析。 Go语言内置了对测试和覆盖率分析的良好支持,进行函数覆盖率分析并不复杂。通…

    2025年12月16日
    000
  • Go语言:将静态文件嵌入二进制并从内存提供服务

    本文深入探讨了在go应用中将少量静态文件(如css、javascript)嵌入到应用程序二进制文件中,并直接从内存中高效提供服务的方法。通过自定义实现http.filesystem接口,开发者可以有效简化部署流程,避免外部文件依赖。文章提供了详细的实现示例,并讨论了该方法的适用场景、潜在问题及现代g…

    2025年12月16日
    000
  • Golang如何减少I/O密集型程序阻塞_Golang I/O性能提升技巧解析

    通过并发控制、缓冲I/O和异步预读优化Go语言中I/O密集型程序性能,减少阻塞并提升吞吐量。 在Go语言开发中,I/O密集型程序常常面临阻塞问题,影响整体性能和并发能力。这类程序通常涉及大量文件读写、网络请求或数据库操作。虽然Go的goroutine轻量高效,但如果使用不当,仍可能导致资源浪费和响应…

    2025年12月16日
    000
  • Go与.NET互操作:通过CLR宿主实现库共享

    本文探讨了go应用与.net库互操作的策略,核心在于通过在go进程中嵌入.net c++lr(common language runtime)来实现。我们详细介绍了如何构建一个c/c++可调用dll作为桥梁,该dll负责宿主clr并暴露.net功能,从而允许go应用直接调用.net库或ui组件。文章…

    2025年12月16日
    000
  • Golang文件操作深度解析:O_APPEND模式下的Seek行为与OS级特性

    在Go语言中,使用os.O_APPEND标志打开文件时,所有写入操作都会强制定位到文件末尾,这会使显式的Seek调用在写入前失效。这并非Go语言的bug,而是底层操作系统(如Linux的open(2)系统调用)的预期行为,旨在确保数据以追加模式写入。理解这一机制对于避免文件操作中的意外行为至关重要。…

    2025年12月16日
    000
  • Golang HTTP客户端TLS配置中指定自定义根证书

    本教程详细介绍了如何在go语言中为http客户端配置自定义的tls根证书,以取代或补充系统默认的信任链。通过使用`x509.certpool`读取pem格式的证书文件,并将其赋值给`tls.config`的`rootcas`字段,开发者可以动态地指定客户端信任的ca证书,从而实现与使用自定义ca签名…

    2025年12月16日
    000
  • Go语言:将[]uint8类型数据转换为float64的实用指南

    本文详细介绍了在go语言中,如何将表示数值的`[]uint8`字节切片(常见于http响应体等非json数据源)高效且安全地转换为`float64`浮点数。核心方法是利用`strconv`包中的`parsefloat`函数,并强调了类型转换、错误处理及参数选择的关键细节,旨在提供一个清晰、专业的转换…

    2025年12月16日
    000
  • Go语言中将[]uint8转换为float64的实用指南

    本文详细介绍了在go语言中如何将表示数字字符串的`[]uint8`类型数据高效准确地转换为`float64`。针对http响应体等场景,我们重点讲解了`strconv`包中的`parsefloat`函数的使用方法,并提供了代码示例,帮助开发者处理非json格式的数值数据。 在Go语言开发中,我们经常…

    2025年12月16日
    000
  • Go语言:将字节切片[]uint8转换为浮点数float64的实用指南

    本文详细介绍了在go语言中如何将表示数字的字节切片[]uint8高效转换为float64浮点数。核心方法是利用strconv包中的parsefloat函数,通过将[]uint8首先转换为string类型来实现。教程将提供示例代码,并强调转换过程中的错误处理及关键注意事项,确保数据转换的准确性和程序的…

    2025年12月16日
    000
  • Go语言:[]uint8数据转换为float64的实用指南

    本文详细介绍了在go语言中将`[]uint8`类型的字节切片转换为`float64`浮点数的方法。重点讲解了如何利用`strconv`包中的`parsefloat`函数,通过先将`[]uint8`转换为字符串,再进行数值解析的步骤。文章提供了清晰的代码示例和错误处理指导,帮助开发者高效、安全地处理非…

    2025年12月16日
    000
  • Go语言中利用反射机制调用方法并正确处理其返回值

    本文将深入探讨go语言中如何使用反射机制动态调用结构体方法,并着重讲解如何正确处理方法返回的值。我们将详细解释`reflect.value.call()`方法返回类型为`[]reflect.value`的原因,并提供具体示例,演示如何从返回的切片中提取实际的返回值,并进行类型转换,从而有效避免常见的…

    2025年12月16日
    000
  • Go语言:高效将字节切片([]uint8)转换为浮点数(float64)

    本教程详细介绍了在go语言中,如何将表示数字的`[]uint8`字节切片高效转换为`float64`浮点数。主要通过`strconv`包中的`parsefloat`函数实现,涵盖了从字节切片到字符串的转换,以及必要的错误处理机制,确保数据转换的准确性和程序的健壮性。 在Go语言开发中,我们经常会遇到…

    2025年12月16日
    000
  • Go语言反射:动态调用方法并正确处理返回值

    本教程详细讲解如何在go语言中使用反射机制动态调用结构体方法,并着重阐述如何正确处理`reflect.value.call()`方法返回的`[]reflect.value`切片,以便提取出实际的返回值。文章将通过具体代码示例,指导读者如何从反射调用结果中获取并转换所需的数据类型。 引言:Go语言反射…

    2025年12月16日
    000
  • Go语言反射调用方法并正确处理返回值

    本文深入探讨了Go语言中利用反射机制调用方法并获取其返回值的正确姿势。我们将解析`reflect.Value.Call()`方法返回`[]reflect.Value`切片的原因,并详细演示如何从该切片中提取单个返回值,并将其正确转换为原始数据类型,以避免常见的类型转换错误。 引言:Go语言反射的基础…

    2025年12月16日
    000
  • Golang 文件操作:深入理解 os.O_APPEND 与 Seek 的行为

    本文深入探讨了 golang 中 `os.openfile` 函数的 `os.o_append` 标志与 `file.seek` 方法的交互行为。当文件以 `o_append` 模式打开时,所有写入操作都会被强制定位到文件末尾,从而使之前的 `seek` 调用对写入操作无效。这并非 golang 的…

    2025年12月16日
    000
  • Go HTTP客户端TLS配置:动态指定自定义根证书

    本文详细介绍了如何在go语言中为http客户端动态配置自定义的tls根证书。通过利用`crypto/x509`包创建证书池并将其赋值给`tls.config`的`rootcas`字段,您可以使http客户端信任由特定ca签发的服务器证书,从而实现灵活且安全的通信。文章涵盖了证书加载、配置集成以及兼顾…

    2025年12月16日
    000
  • 在Go语言中将函数作为参数传递:实现高阶函数的技巧

    本文详细介绍了go语言中如何将函数作为参数传递,从而实现类似python中的高阶函数功能。通过定义函数类型,我们可以在go中创建更灵活、可复用的代码,并结合go语言的惯用法,展示了如何构建一个通用的切片过滤函数。 引言:Go语言中的高阶函数 在现代编程范式中,高阶函数(Higher-Order Fu…

    2025年12月16日
    000
  • Golang内存中服务静态文件教程

    本教程详细探讨了在go语言中将少量静态文件(如js、css)直接嵌入到二进制文件中并从内存中进行服务的方法。通过实现`http.filesystem`和`http.file`接口,我们可以构建一个自定义的文件系统,从而避免在部署时依赖外部文件。文章还介绍了go 1.16+ `embed`模块这一更现…

    2025年12月16日 好文分享
    000
  • Go语言中获取类型或值内存大小的探究:sizeof的等效实现与应用

    go语言不像c++/c++那样直接提供`sizeof(type)`函数。然而,它通过`unsafe.sizeof`和`reflect.typeof().size()`两种方式来获取特定*值*在内存中占用的字节数。本文将详细介绍这两种方法的使用、区别、适用场景,并探讨go语言设计中对内存大小计算的需求…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信