pprof
摘抄:golang pprof实用使用指南
注册接口
第一步,在引用中加上
12"net/http" _ "net/http/pprof"
第二步,在代码开始运行的地方加上
123go func() { log.Println(http.ListenAndServe(":6060", nil))}()
接着,我们访问http://127.0.0.1:6060/debug/pprof/,即可看到
allocs:查看过去所有内存分配的样本。
block:查看导致阻塞同步的堆栈跟踪。
cmdline: 当前程序的命令行的完整调用路径。
goroutine:查看当前所有运行的 goroutines 堆栈跟踪。
heap:查看活动对象的内存分配情况。
mutex:查看导致互斥锁的竞争持有者的堆栈跟踪。
profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件。
threadcreate:查看创建新 OS 线程的堆栈跟踪。
trace:mp.weixin. ...
快捷键
mac键盘映射windows键盘
ctrl 和 command 互换:https://zhuanlan.zhihu.com/p/542689596
Marscode
https://docs.marscode.cn/docs/extension-keyboard-shortcuts
行为
快捷键(VSCode)
快捷键(JetBrains)
采用行内自动补全的代码
Tab
Tab
逐字采用行内自动补全的代码
macOS:Command + → Windows:Ctrl + →
macOS:Command + → Windows:Ctrl + →
舍弃代码建议
Esc
Esc
打开侧边 AI 对话框
macOS:Command + U Windows:Ctrl + U
Ctrl + U
展示下一行自动补全的代码
macOS:opt + ] Windows:alt + ]
macOS:opt + ] Windows:alt + ]
展示前一行自动补全的代码
macOS:opt + [ Windows:alt + [
macOS:opt + [ W ...
cron jobs (go)
一、下载
1go get github.com/robfig/cron/v3
二、使用
2.1 创建和添加任务
首先创建一个 cron.Cron 对象,用于管理定时任务。
12345// 创建对象c := cron.New()// 创建对象并指定配置,多个配置在参数列表中并列c := cron.New(cron.WithSeconds())
支持的选项有:
WithSeconds:让时间格式支持秒
WithLocation:指定时区
WithParser:使用自定义的解析器
WithLogger:自定义Logger
WithChain:Job 包装器
然后通过 AddFunc 方法向其添加任务函数和执行的时间,这里的执行时间格式比较灵活,在下面详细介绍。
1234567// 定义任务函数func F() { fmt.Println("exec func F")}// 设置任务函数及其执行时间c.AddFunc("30 * * * *", F)
启动定时执行。
12345// 在当前协程启动定时任务c.Run()/ ...
docker基础学习
黑马:https://www.bilibili.com/video/BV1HP4118797/?spm_id_from=333.337.search-card.all.click&vd_source=eca8bef44f4d5efc79f226fa688a5064
一、docker安装
1.1 安装
(一)安装命令:
Ubuntu:
1sudo apt install docker.io
(二)检查安装:
1docker -v
查看示例 12SDE@test-sg90-seatalk-10-136-185-3:~$ docker -vDocker version 26.1.3, build 26.1.3-0ubuntu1~24.04.1
1.2 启动和校验
(一)启动docker
1systemctl start docker
查看示例 1234SDE@test-sg90-seatalk-10-136-185-3:~$ sudo systemctl start dockerSDE@test-sg90-seatalk-10-136-185-3:~$ ps aux | ...
go包目录
gomarkdown
Package github.com/gomarkdown/markdown is a Go library for parsing Markdown text and rendering as HTML.
安装:
1go get github.com/gomarkdown/markdown
灵活用法:实现接口(文档中皆有例子)
12345type Renderer interface { RenderNode(w io.Writer, node ast.Node, entering bool) ast.WalkStatus RenderHeader(w io.Writer, ast ast.Node) RenderFooter(w io.Writer, ast ast.Node)}
可以自定义渲染效果。
灵活用法:自定义语法解析(使用包提供的hook函数)
可以自定义hook函数挂上去
12ps := parser.NewWithExtensions(formatted.Extensions)ps.Opts.Pars ...
solidity
https://solidity-cn.readthedocs.io/zh/develop/index.html
live reloading go with air
Golang应用实时重新加载利器: Air工具指南
使用Air实现Go程序实时热重载
一、简介
Live reloading(实时重载)和 Hot-reload(热重载)并非完全同义,它们都与开发过程中的代码更新反馈机制有关,但在实现方式和效果上存在差异。
Live reloading(实时重载)
原理:当监测到代码发生变化后,它会直接刷新整个应用程序页面或重新启动应用。就好比在开发网页时,一旦保存了修改后的代码,浏览器会自动刷新页面,从而展示最新的效果;在开发桌面应用或者移动应用时,应用程序会被重新启动。
效果:因为是整体刷新或重启,这就会使得之前在应用中的操作状态丢失。比如在网页表单里填写了部分内容,页面刷新后,填写的内容就没了;在游戏应用中玩到一半,重新启动应用后就得从头开始。
使用场景:对于那些对状态保存要求不高,或者页面结构、样式、整体逻辑改动较大的情况比较适用。像静态网站开发、样式文件修改等场景,使用实时重载就能快速看到修改后的效果。
Hot-reload(热重载)
原理:当代码改变时,它不会重新启动整个应用程序,而是仅替换发生改变的那部分代码模块。在运行时动 ...
go编程规范
项目目录结构
Go 官网并没有给出一个目录结构的标准模板,但是 golang-standards 倒是给出了一个。
中文readme
在此基础上,我的项目目录结构具体使用如下:【持续更新!!!】
https://github.com/gw-gong/template_project
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172.├── api│ ├── router│ │ ├── service01.go│ │ └── service02.go│ └── rpc│ ├── <service_name>.pb.go│ ├── <service_name>.proto│ └── makefile├── cmd│ ├── service01│ │ └── main.go│ ...
.ini
INI 文件(Initialization file)的出现和发展与计算机早期操作系统及软件的配置需求紧密相关,以下介绍它的由来:
起源背景
在计算机发展早期,软件的配置管理是一项具有挑战性的任务。随着计算机软件功能逐渐增多,需要对各种参数进行设置和调整,例如硬件设备的参数、软件的运行选项等。为了方便用户和开发者对软件进行配置,一种简单、易读的配置文件格式就应运而生,这就是 INI 文件。
诞生与发展
早期操作系统的应用:20 世纪 80 年代,微软的 MS - DOS 和 Windows 3.x 等操作系统广泛使用 INI 文件。在 MS - DOS 时代,许多应用程序需要对硬件设备(如显示器、打印机等)进行配置,INI 文件提供了一种方便的方式来存储这些配置信息。例如,用户可以通过修改 INI 文件来设置显示器的分辨率、颜色模式等。
Windows 系统的推广:Windows 3.x 系统进一步推广了 INI 文件的使用。系统本身和许多应用程序都依赖 INI 文件进行配置。例如,Windows 的系统配置文件system.ini和用户配置文件win.ini,分别存储了系统级 ...
go代码模块记录
字符串
> 按字节数截断字符串
1234567891011121314151617181920212223242526272829package utilimport "unicode/utf8"const Hellip = "…"func SubStrContainSuffix(str string, maxBytes int, suffix string) string { if len(str) <= maxBytes { return str } maxBytesNotContainSuffix := maxBytes - len(suffix) return SubStringByByte(str, maxBytesNotContainSuffix) + suffix}func SubStringByByte(str string, maxBytes int) string { if len(str) <= maxBytes ...