首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
Search
1
【javascript】JS-向当前url追加参数
2,345 阅读
2
【PHP】生成随机昵称
2,219 阅读
3
【PHP】判断一个字符串是否属于序列化后的数据
2,024 阅读
4
【css】html+css给文章页,做阅读全文
1,975 阅读
5
【PHP】 设计模式(23种)
1,910 阅读
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍭文艺范
🍏mac
AI
LLM
image
audio
yolo
3D
code
登录
Search
标签搜索
php
typecho
代码注释
redis
mysql
go
golang
nginx
thinkphp
docker
gin
linux
curl
html
mamp
算法
短网址
构造函数
webhook
代码片段
依然范儿特西
累计撰写
145
篇文章
累计收到
1
条评论
首页
栏目
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍭文艺范
🍏mac
AI
LLM
image
audio
yolo
3D
code
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
123
篇与
的结果
2024-09-27
Windows系统Starting the Docker Engine 一直转圈解决方法
启动报错: docker running engine: waiting for the VM setup to be ready: starting WSL en
2024年09月27日
1 阅读
0 评论
0 点赞
2024-08-19
Git Clone错误解决:GnuTLS recv error (-110): The TLS connection was non-properly terminated.
执行 git clone 报错错误提示fatal: unable to access 'https://github.com/****.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated. 解决方案sudo apt-get update sudo apt-get install gnutls-bin git config --global http.sslVerify false git config --global http.postBuffer 1048576000完美解决
2024年08月19日
3 阅读
0 评论
0 点赞
2024-06-18
磁盘挂载命令
## 先给磁盘分区 parted -a opt /dev/vdb mkpart primary 0% 100% ## 制作文件系统: 格式化新分区为 ext4 文件系统 mkfs.ext4 /dev/vdb1 #上述命令有时候会失败(),用下边的 mkfs -t ext4 /dev/vdb1 # 查看文件系统 blkid # 查看磁盘情况 df -h # 显示分区磁盘 lsblk # 创建挂载目录 mkdir /dev/mydrive # 手动挂载命令 mount /dev/sda1 /boot/mydrive # 需要在 /etc/fstab 文件添加以下命令 # 自动挂在硬盘 /dev/sda1 /boot/mydrive ext4 defaults 0 2 # 重新挂载所有文件系统 让应用更改 mount -a
2024年06月18日
2 阅读
0 评论
0 点赞
2024-05-09
Conda在Mac上的使用指南
1 使用方法Conda是一个开源的包管理器和环境管理器,用于安装和管理软件包和软件环境。它特别适用于处理数据科学项目中的依赖关系,因为它可以轻松地在不同的项目之间切换,并确保每个项目都有正确的依赖关系。# mac 上安装 miniconda brew install miniconda # 查看是否安装成功 conda -V # 如果出现command not found之类的命令,那么需要配置环境变量 # 解决方法: # (1) vim ~/.zshrc 进入环境变量配置文件(本人使用的sh是zsh) # (2) .zshrc中添加export PATH=$PATH:/Users/yangshengyu/miniconda3/bin # (3) source ~/.zshrc 接下来,您可以开始使用Conda创建和管理虚拟环境。Conda虚拟环境允许您为每个项目创建一个独立的环境,以隔离项目的依赖关系。这样可以避免不同项目之间的依赖冲突,并确保每个项目都有一致的环境配置。要创建新的Conda虚拟环境,请使用以下命令:conda create -n env_name package_name # 举例 conda create -n myenv python=3.9上述命令将创建一个名为“myenv”的新虚拟环境。您可以将“myenv”替换为您想要的环境名称。其他常用命令# 查看当前所有虚拟环境列表 conda env list # 激活虚拟环境 conda activate myenv # 删除虚拟环境 conda remove -n myenv --all # 克隆虚拟环境 conda create -n new_myenv --clone myenv # 在激活环境中安装一个软件包 conda install package_name # 安装多个包 conda install package_name1 package_name2 package_name3 # 从激活环境中 删除一个软件包 conda remove package_name # 安装制定版本的包 conda install package_name=version # 退出当前虚拟环境并在终端中返回到默认环境(base环境), conda deactivate conda 镜像源conda config --show # 显示当前 conda 配置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 添加清华源的免费仓库 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # 添加清华源的主要仓库 conda config --set show_channel_urls yes # 显示添加的所有仓库地址 问题解决当你使用激活环境命令时候,会出现如下错误:CondaError: Run 'conda init' before 'conda activate'解决办法:# 初始化 conda init # 更新配置文件 source ~/.bashrc # 对于 bash source ~/.zshrc # 对于 zsh # 查看是否激活 , 这个命令应该会列出所有的 conda 环境,而不会出现任何错误 conda info --envs
2024年05月09日
7 阅读
0 评论
0 点赞
2024-03-28
基于Gradio快速搭建demo展示
Gradio官网:https://gradio.app/1 安装方式pip install gradio2. 初步了解官网上有gradio使用的教程,包括例子NLP相关:输入问题,输出回答CV相关:输入图片,输出图片时序相关:时间序列预测3. 简单例子输入多个文本,输出多个文本import gradio as gr def greet(a, b): return f"Hello {a} ", f"Greet {b}" demo = gr.Interface( fn=greet, inputs=[gr.Text(label='input_text_a'), gr.Text(label='input_text_b')], outputs=[gr.Text(label='output_text_a'), gr.Text(label='output_text_b')] ) demo.launch(auth=("user_name", "pwd"), # 设置这个demo需要输入的认证信息 ) 4.可视化展示# 折叠的文本框 with gr.Accordion("超参数说明", open=False): gr.Markdown("...") 5. 其他例子https://github.com/gradio-app/gradio/tree/main/demo/all_demos
2024年03月28日
17 阅读
0 评论
2 点赞
2024-03-28
golang+VsCode中的代码自动补全和自动导入包
VSCode 必须安装以下插件:首先你必须安装 Golang 插件,然后再给 Go 安装工具包。在 VS Code 中,使用快捷键:command+shift+P,然后键入:go:install/update tools,将所有 16 个插件都勾选上,然后点击 OK 即开始安装。Installing 16 tools at /Users/maiyang/develop/goworkspace//bin gocode gopkgs go-outline go-symbols guru gorename dlv godef godoc goreturns golint gotests gomodifytags impl fillstruct goplay Installing github.com/mdempsky/gocode SUCCEEDED Installing github.com/uudashr/gopkgs/cmd/gopkgs SUCCEEDED Installing github.com/ramya-rao-a/go-outline SUCCEEDED Installing github.com/acroca/go-symbols SUCCEEDED Installing golang.org/x/tools/cmd/guru SUCCEEDED Installing golang.org/x/tools/cmd/gorename SUCCEEDED Installing github.com/derekparker/delve/cmd/dlv SUCCEEDED Installing github.com/rogpeppe/godef SUCCEEDED Installing golang.org/x/tools/cmd/godoc SUCCEEDED Installing github.com/sqs/goreturns SUCCEEDED Installing github.com/golang/lint/golint SUCCEEDED Installing github.com/cweill/gotests/... SUCCEEDED Installing github.com/fatih/gomodifytags SUCCEEDED Installing github.com/josharian/impl SUCCEEDED Installing github.com/davidrjenni/reftools/cmd/fillstruct SUCCEEDED Installing github.com/haya14busa/goplay/cmd/goplay SUCCEEDED All tools successfully installed. You're ready to Go :). 修改默认配置的方法:在 Preferences -> Setting 然后输入 go,然后选择 setting.json,填入你想要修改的配置自动完成未导入的包。 "go.autocompleteUnimportedPackages": true,VSCode 的一些插件需要配置代理,才能够正常安装。 "http.proxy": "192.168.1.110:1088",如果你遇到使用标准包可以出现代码提示,但是使用自己的包或者第三方库无法出现代码提示,你可以查看一下你的配置项。 "go.inferGopath": true,如果引用的包使用了 ( . “aa.com/text”) 那这个text包下的函数也无法跳转进去,这是为什么?修改 "go.docsTool" 为 gogetdoc,默认是 godoc。"go.docsTool": "gogetdoc",其他当我们在使用 import 功能的时候,如果无法通过 lint 检查,则不会执行自动 import。如果你需要自动 import 的前提是你必须把要导入的包的函数写完整。附带我的 settings.json{ "go.goroot": "", "go.gopath": "", "go.inferGopath": true, "go.autocompleteUnimportedPackages": true, "go.gocodePackageLookupMode": "go", "go.gotoSymbol.includeImports": true, "go.useCodeSnippetsOnFunctionSuggest": true, "go.useCodeSnippetsOnFunctionSuggestWithoutType": true, "go.docsTool": "gogetdoc", }
2024年03月28日
9 阅读
0 评论
0 点赞
2024-02-28
golang 编程规范 - 项目目录结构
参考链接 https://makeoptim.com/golang/standards/project-layout#google_vignette针对API使用的目录结构, 如果有用作其他服务,可以灵活调整 ├── api (项目对外提供和依赖的 API 文件) │ └── dao │ └── http │ └── v1 │ └── v2 │ └── middleware │ └── model │ └── router │ └── service │ └── validator │ ├── cmd (当前项目的可执行文件) │ └── ├── internal (私有的应用程序代码库) │ └── ├── configs (配置文件和初始化文件) │ └── ├── global (全局变量) │ └── ├── deploy (IaaS,PaaS,系统和容器编排部署配置和模板) │ └── ├── pkg (外部应用程序可以使用的库代码) │ └── ├── scripts (用于执行各种构建,安装,分析等操作的脚本) │ └── ├── third_parth (外部辅助工具) │ └── ├── test (单元测试) │ └── ├── vendor (应用程序的依赖关系) │ └──
2024年02月28日
21 阅读
0 评论
1 点赞
2024-02-28
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
在学习Golang中的gin框架的时候,遇到了下面的warning :[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.对于上面的WARNING翻译出来之后也就是 : 您信任所有代理,这是不安全的。我们建议您设置一个值。对于Goland编译器给出的建议 :Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all- proxies for details.也就是去看文档去了解细节,额,好像又啥也没说!那么怎么解决呢?根据warning也就是给gin设置一个信任ip : 127.0.0.1代码 :router := gin.Default() router.SetTrustedProxies([]string{"127.0.0.1"})
2024年02月28日
1 阅读
0 评论
1 点赞
2024-02-20
Redis 只会用缓存?16种妙用让同事直呼牛X
redis 的妙用
2024年02月20日
3 阅读
0 评论
1 点赞
2023-10-10
Gin 框架在中间件中获取 response body 的方法
在写一个Gin框架日志中间件的时候,需要记录请求和响应相关的一些数据,例如请求参数、请求方法、请求时间、请求头、耗时、响应状态码、响应数据等,gin为获取这些数据基本都提供了现成的方法,但是获取响应数据还是有一定难度和复杂度的。那么,该如何获取响应数据也就是 response body 呢?先上代码。代码示例1、先写一个 middleware ,简单打印一下 response bodypackage middleware import ( "bytes" "fmt" "github.com/gin-gonic/gin" ) //自定义一个结构体,实现 gin.ResponseWriter interface type responseWriter struct { gin.ResponseWriter b *bytes.Buffer } //重写 Write([]byte) (int, error) 方法 func (w responseWriter) Write(b []byte) (int, error) { //向一个bytes.buffer中写一份数据来为获取body使用 w.b.Write(b) //完成gin.Context.Writer.Write()原有功能 return w.ResponseWriter.Write(b) } func PrintResponse(c *gin.Context) { writer := responseWriter{ c.Writer, bytes.NewBuffer([]byte{}), } c.Writer = writer c.Next() fmt.Println("response body:" + writer.b.String()) } 2、引用 middleware ,看看效果package main import ( "github.com/gin-gonic/gin" "hello/middleware" "net/http" ) func main() { r := gin.New() //添加获取响应内容 middleware r.Use(middleware.PrintResponse) r.GET("/test", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"name": "laofan"}) }) // Listen and Server in 0.0.0.0:8080 r.Run(":8080") } 打开浏览器访问http://127.0.0.1:8080/test ,即可在控制台中看到 response body 的输出内容response body:{"name":"laofan"}原理通过上面的代码可以看出,gin 通过调用如下方法写入了 response bodyc.JSON(http.StatusOK, gin.H{"name": "laofan"})追进 JSON 方法,源码如下,调用了 Render 方法package gin func (c *Context) JSON(code int, obj interface{}) { c.Render(code, render.JSON{Data: obj}) }追进 Render 方法, 可以看出 gin.Context.Writer 作为参数传给了 r.Render() 方法,这里形参 r 的实参为 render.JSON{Data: obj} ,所以实际调用的是 func (r JSON) Render(w http.ResponseWriter) 方法。package gin // Render writes the response headers and calls render.Render to render data. func (c *Context) Render(code int, r render.Render) { c.Status(code) if !bodyAllowedForStatus(code) { r.WriteContentType(c.Writer) c.Writer.WriteHeaderNow() return } if err := r.Render(c.Writer); err != nil { panic(err) } } func (r JSON) Render(w http.ResponseWriter) 源码如下package render // Render (JSON) writes data with custom ContentType. func (r JSON) Render(w http.ResponseWriter) (err error) { if err = WriteJSON(w, r.Data); err != nil { panic(err) } return } // WriteJSON marshals the given interface object and writes it with custom ContentType. func WriteJSON(w http.ResponseWriter, obj interface{}) error { writeContentType(w, jsonContentType) jsonBytes, err := json.Marshal(obj) if err != nil { return err } _, err = w.Write(jsonBytes) return err } 在 func (r JSON) Render() 方法中,gin.Context.Writer 被传到了 WriteJSON() 方法中,最终写入数据调用的是 gin.Context.Writer.Write() 方法。gin.ResponseWriter 源码如下package gin type Context struct { //... writermem responseWriter Writer ResponseWriter //... } // ResponseWriter ... type ResponseWriter interface { //... http.ResponseWriter //... } 可以看出 gin.Context.Writer 类型为 interface gin.ResponseWriter。package http type ResponseWriter interface { //... Write([]byte) (int, error) //... } 要实现 gin.ResponseWriter 接口,必须实现Write([]byte) (int, error) 方法。所以写入 response body 调用的是 gin.Context.Writer.Write() 方法,gin.Context.Writer 需要是type gin.ResponseWriter interface 的一个具体实现。到此,可以看出上面代码示例的思路:实现 type gin.ResponseWriter interface 并重写 Write([]byte) (int, error) 方法,该方法在实现 gin.Context.Writer.Write() 原有功能的同时,再向一个 bytes.buffer 中写一份数据来用于获取 response body 使用。
2023年10月10日
5 阅读
0 评论
0 点赞
1
2
...
13