golang在window下查看火焰图

Golang性能分析神器:pprof与火焰图实战揭秘 在软件开发的世界里,性能分析如同一把锋利的剑,它能帮助开发者洞悉程序的运行状态,发现并解决那些隐藏在代码深处的性能瓶颈。而在Go语言的生态系统中,pprof无疑是这把剑中的佼佼者。本文将带你深入了解pprof的使用方法,并通过火焰图这一直观的工具,让你对性能分析有一个全新的认识。 阅读详情

1. golang在window下查看火焰图

功能:查看生产golang程序执行过程中内存,cpu等状态的火焰图

1.1. 目录结构

|goprof
|–goprof.bat
|–graphviz-2.38 这是目录,可以从网上下载安装,拷贝对应目录过来
|–pprof.exe google/pprofpprof

1.2. 查看命令

新建.bat文件,拷贝下边内容进入,注意下边的 %PProf% 行只能放开一行哈

set Server=127.0.0.1:8999
set PWD=%~dp0

%~d0
cd %PWD%
call %PWD%\config.bat

echo %Server%

set Dot=%PWD%\graphviz-2.38\bin
set PATH=%Dot%;%PATH%
set PProf=%PWD%\pprof.exe
set PPROF_TMPDIR=%PWD%\data

::下边是关于CPU获取的方法
%PProf% -http : C:\work\20190603_190507.cpu.data
::%PProf% -http : -alloc_space http://%Server%/debug/pprof/heap
::%PProf% -http : -inuse_space http://%Server%/debug/pprof/heap
::%PProf% -http : http://%Server%/debug/pprof/profile?seconds=30

::下边是关于内存获取的方法
::%PProf% -http : .\data\pprof.samples.cpu.003.pb.gz
::%PProf% -http : http://%Server%/debug/pprof/heap
::%PProf% -http : -alloc_space http://%Server%/debug/pprof/heap
::%PProf% -http : -inuse_space http://%Server%/debug/pprof/heap

参考资料

  1. pprof
Golang 火焰图 Golang 火焰图和性能优化 golang中有pprof包来做代码的性能监控,可以生成代码的调用堆栈和cpu的使用时间 接下来我们看一下pprof的使用过程 环境安装 下载graphviz:https://graphviz.gitlab.io/_pages/Download/Download_windows.html windows下下载msi格式,安装成功后,进入命令行查看是否安装成功 命令: dot -version (记住graphviz需要设置到windows的path下) 如何使用 在程序中加 阅读详情

相关推荐

Go最全Golang性能分析神器:pprof与火焰图实战揭秘_golang 火焰图(2),2024年最新含泪整理面经

在性能分析中,火焰图(Flame Graph)是一种非常直观的工具,它可以帮助我们快速识别出程序中的热点函数。火焰图通过堆叠的方式展示函数调用,其中每个“火焰”的大小代表了函数在CPU采样中所占的比例,颜色的深浅则表示调用的深度。在前面的章节中,我们已经了解了如何使用pprof进行性能分析,并且通过火焰图来识别性能瓶颈。为了更好地理解pprof的采样机制,我们可以通过一个实际的例子来演练。在pprof的Web界面中,我们可以生成火焰图,帮助我们快速识别出性能瓶颈。内存采样关注的是程序的内存分配情况。

2401_84920056的博客 1770

golang程序生成火焰图排查性能瓶颈-简单易上手版本

简单高效快速获取go程序火焰图!

sheehan_xu的博客 2155

深入理解OOM内存溢出:从原理到实战排查与预防

内存溢出(Out Of Memory,简称OOM)是程序运行时因无法获得足够连续内存空间而引发的错误,其本质常与内存泄漏、大对象创建及不合理的缓存策略有关。理解不同运行时环境(如JVM、V8、Go Runtime)的内存管理模型是诊断OOM的基础,例如JVM的堆、元空间与GC机制,或Node.js V8引擎的老生代限制。掌握这些原理对于构建高可用应用至关重要,能有效应对生产环境中服务崩溃的风险。本文聚焦于实战排查,通过分析`vscode oom -536870904`、`mrds65 oom`等具体案例,提

weixin_30411819的博客 512

火焰图,golang脚本程序步骤

3、执行命令: go tool pprof cpu.pprof。4、打开 profile003.svg 即可看到火焰图。1、注入代码(分别在脚本的开始和结束注入下面两段代码)

zhengwish的专栏 1147

H5聊天室核心设计:WebSocket、CRDT与Go高并发实战

H5聊天室本质是浏览器环境下受沙箱约束的实时协同系统,其技术核心在于消息时序一致性、断线重连鲁棒性与轻量级状态同步机制。不同于传统IM,它需在无原生进程、无持久后台的限制下,实现毫秒级响应、多标签页同步及弱网容错。关键技术包括原生WebSocket协议精简通信、CRDT算法解决离线编辑冲突、Snowflake生成全局唯一消息ID,以及Go语言构建高并发低延迟后端。该架构天然适配教育答疑、IoT设备调试、uniapp跨端集成等场景,尤其支撑如京东H5支付回调转客服消息、PDF阅读器注释实时协同等业务嵌入需求。

weixin_34184561的博客 342

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

windows下golang火焰图

先下载graphviz https://graphviz.gitlab.io/_pages/Download/Download_windows.html 安装成功,在命令行里确认一下: dot -version import "net/http" import _ "net/http/pprof" func main() { // 主函数中添加 http.ListenAn...

zhenghexcs的专栏 1467

AD5700 HART芯片实战笔记:从时钟检测到数据收发,一个STM32工程师的踩坑实录

本文详细记录了STM32工程师在AD5700 HART芯片开发中的实战经验,涵盖时钟信号检测、RTS切换时序优化及HART数据解析等关键问题。通过硬件设计检查、定时器配置优化和大小端转换方案对比,解决了工业级芯片开发中的典型挑战,为嵌入式开发者提供宝贵参考。

weixin_42715608的博客 164

Go语言加速机器学习数据预处理实战指南

在现代机器学习工程中,数据预处理与特征工程常占据70%以上延迟,成为实际性能瓶颈。理解JSON解析、内存管理、缓存策略和协程调度等底层原理,是突破Python GIL限制、实现确定性低延迟的关键。Go语言凭借无GIL并发模型、静态编译、零拷贝IO和可预测GC,在特征计算服务等CPU密集型非模型层展现出显著技术价值。本文聚焦真实风控场景下的Go+Python混合ML栈实践,涵盖高性能JSON解析、向量化特征计算、多级内存缓存设计及生产级部署调优,为构建高吞吐、低P99延迟的线上特征服务提供可复用的工程路径。

weixin_30580341的博客 478

Python和Spyder:一个完美的编程组合

而Spyder作为一个专门为科学计算和数据分析而设计的IDE,提供了高效的开发环境和丰富的工具。无论是初学者还是专业开发者,Python和Spyder都能满足他们的需求,并为他们的工作带来便利和效率。本文将探讨Python和Spyder之间的关系,以及它们如何相互配合,提供一流的编程体验。每个工具都有其特定的优势和适用场景,开发者可以根据自己的需求选择合适的工具。而Spyder作为一个专门为科学计算而设计的IDE,提供了编写、调试和执行Python代码的环境。

CodeHeroicX的博客 1123

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2658

奇安信Golang笔试题复盘:并发、调度与安全编码实战

从Go语言基础语法到并发编程,再到内存管理与性能优化,Golang开发者的能力模型通常围绕调度器、GC和工程实践展开。GMP模型决定了goroutine的调度效率,channel和context则构成了并发协作与超时控制的核心机制。理解这些底层原理,不仅能解释代码的异常行为,还能指导高并发服务的设计与调优。在安全产品、网关和扫描器等场景中,输入校验、路径穿越等编码细节同样重要。本文以2020年奇安信Golang笔试为样本,系统拆解其考察重点,梳理从并发控制、内存逃逸、pprof性能分析到安全编码的完整知识脉

weixin_34112181的博客 435

Manus创始人深度复盘:AI Agent产品的技术架构与战略转型

成本对比:同样任务处理,中国区单位成本是亚太区的2.3倍。付费转化率:中国区1.2% vs 全球平均4.7%微信/支付宝等超级App的适配代码占比达17%Zstandard:压缩比38%,耗时12ms。每季度需要投入3名高级工程师专职维护兼容性。国际版API平均延迟:180-220ms。中国版特殊部署延迟:480-720ms。信息保持准确率:93%(7天跨度测试)自研算法:压缩比39%,耗时5ms。存储效率:相比纯文本节省68%空间。:本地化部署导致的延迟与费用差异。LZ4:压缩比42%,耗时8ms。

m0_75253143的博客 7146

Go-SDL2图形特效开发指南:掌握SDL_gfx模块的三大核心技能

你是否正在寻找一种在Go语言中实现专业级2D图形效果的高效方案?go-sdl2的SDL_gfx模块正是你需要的答案。作为SDL2的Go语言绑定库,go-sdl2通过SDL_gfx扩展提供了丰富的图形绘制、图像变换和帧率控制功能,让Go开发者能够轻松创建从简单几何图形到复杂视觉特效的各种应用。 ## 功能解析:SDL_gfx模块的四大核心能力 ### 🎨 几何图形绘制系统 SDL_gfx模块提

gitblog_00108的博客 406

Python面试题及详细答案150道(126-135) -- 数据库交互篇

本文介绍了Python中操作MySQL、SQLite数据库及ORM框架的核心技术。主要内容包括:1. 使用pymysql连接MySQL数据库,演示了连接配置、SQL执行和事务管理;2. ORM原理及主流框架SQLAlchemy和Django ORM的示例;3. 通过sqlite3模块操作轻量级SQLite数据库;4. 数据库事务的ACID特性解析。这些内容涵盖了Python数据库开发的关键知识点,适合准备前后端面试的开发者复习核心概念和实际应用。

大剑师兰特的GIS世界 1728

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题

在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后.

叶子叶来 9614

flutter上分之路番外2-大战火焰山(集成windows

flutter上分之路番外2-大战火焰山(集成windows前言正文1.更新flutter版本2.开启windows支持3.使项目支持windows运行4.运行5.待续 前言 上次集成了web版,这次搞一搞windows桌面版。 正文 1.更新flutter版本 更新版本时,一开始直接使用flutter upgrade命令 结果由于网络问题,一直更新不成功。 后来就直接下载新版本的压缩包,解压到flutter目录。 下载地址: https://flutter.cn/docs/development/too

琴酒的博客 4313

【Unity】 预制体Prefab使用说明

在 Unity 中,Prefab 是一个可以预先制作并重复使用的 GameObject 或组件集合,Prefab 中的 GameObject 可以有子对象和其他组件。

灵境引路人 2849

Perplexity实时联网响应延迟突增?2024Q2服务器日志分析报告首次公开:3个本地优化方案立竿见影

Perplexity怎么用?本文揭秘2024Q2实时联网响应延迟突增根因,基于真实服务器日志提出3个本地优化方案——禁用冗余插件、调整缓存策略、启用轻量API模式,平均延迟降低62%。适用于高频科研查询与多轮对话场景,操作简单见效快,值得收藏。

ProcePerch的博客 166

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

垃圾分类的正确姿势?用 OpenCV 人工智能图像识别技术来进行

OpenCV是一款非常强大的图像处理工具,对于从事图像处理领域相关工作的人来说这个可以说是必不可少的一项工具,用起来也很方面,下吗是一段简单的介绍:OpenCV是一个基于BSD许可(开源...

Python中文社区 6051

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python垃圾分类图像识别算法_垃圾分类的正确姿势?用 OpenCV 人工智能图像识别技术...

OpenCV是一款非常强大的图像处理工具,对于从事图像处理领域相关工作的人来说这个可以说是必不可少的一项工具,用起来也很方面,下吗是一段简单的介绍:OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby...

weixin_39809175的博客 2126

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

技术文章系列整理(持续更新)

本博客有很多关于性能及测试开发的文章。我试着对你可能感兴趣的一些重要文章进行分类。

7DGroup,让技术更有价值! 1万+

opencv实现图像目标对象区域挖掘

OpenCV是一款非常强大的图像处理工具,对于从事图像处理领域相关工作的人来说这个可以说是必不可少的一项工具,用起来也很方面,下吗是一段简单的介绍: OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++...

Together_CZ的博客 1105

Rust + Python 协作实战:PyO3 高性能扩展开发指南

Python 作为胶水语言在数据科学与工程中广受欢迎,但其 GIL 限制、运行时开销和内存安全性问题,在 CPU 密集计算、正则解析、高并发状态管理及系统级 IO 场景下常引发性能瓶颈与稳定性风险。Rust 凭借零成本抽象、内存安全保证和无 GC 并发模型,成为 Python 原生加速的理想协作者——尤其通过 PyO3 实现无缝绑定。它不替代 Python,而是以‘精准外科手术’方式加固关键路径:支持类型安全的函数暴露、自动生命周期管理、跨平台 wheel 构建,并天然兼容 NumPy、asyncio 等生

weixin_30784501的博客 361

2021 年最佳开源软件榜单

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来来自OSC社区作为一家信息技术媒体公司,InfoWorld 成立于 1978 年,目前隶属于 IDG。每年。InfoWorld...

开发者技术前线-DevolperFront 573

IDEA AI Assistant 真实性能压测报告:代码补全准确率92.7%、上下文理解延迟≤380ms,但93%开发者忽略了这3个关键配置

真实压测揭示IDEA AI Assistant使用体验关键盲区:代码补全准确率92.7%、上下文延迟≤380ms,但93%开发者未调优三大配置。适用于Java/Python日常开发,通过配置优化可提升响应速度与理解精度,值得收藏。

InstrWander的博客 134
上一篇: promise-demo
下一篇: C++time相关
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值