首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
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
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
4
篇与
的结果
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 点赞
2021-11-19
golang 接收命令行参数
方式一package main import ( "fmt" "os" ) func main() { fmt.Println("命令行的参数有", len(os.Args)) // 遍历 os.Args 切片,就可以得到所有的命令行输入参数值 for i, v := range os.Args { fmt.Printf("args[%v]=%v\n", i, v) } }执行结果> go run ./main.go laofan 123 456 789 命令行的参数有 5 args[0]=Temp\go-build\b001\exe\main.exe args[1]=laofan args[2]=123 args[3]=456 args[4]=789 >方式二如像 mysql 那样:mysql -u root -p 123456,可以指定输入内容,输入顺序可变。flag包实现了命令行参数的解析:package main import ( "flag" "fmt" ) func main() { // 定义几个变量,用于接收命令行的参数值 var user string var password string var host string var port int // &user 就是接收命令行中输入 -u 后面的参数值,其他同理 flag.StringVar(&user, "u", "root", "账号,默认为root") flag.StringVar(&password, "p", "", "密码,默认为空") flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost") flag.IntVar(&port, "P", 3306, "端口号,默认为3306") // 解析命令行参数写入注册的flag里 flag.Parse() // 输出结果 fmt.Printf("user:%v\npassword:%v\nhost:%v\nport:%v\n", user, password, host, port) } 执行结果> go run ./main.go -p 123 -u laofan -P 3306 -h 127.0.0.1 user:laofan password:123 host:127.0.0.1 port:3306 > 方式二的另一种写法 package main import ( "flag" "fmt" ) func main () { //获取命令参数 Act := flag.String("act", "", "is ok") date := flag.String("date", "", "id") // 解析命令行参数写入注册的flag里 flag.Parse() fmt.Println("act :", *Act) fmt.Println("date :", *date) }访问结果> go run ./main.go -act laofan -date today act : laofan date : today >
2021年11月19日
162 阅读
0 评论
2 点赞
2021-10-18
Golang 语言极简 HTTP 客户端 GoRequest
1 介绍GoRequest 是一个极简的 HTTP 客户端,作者灵感来源于 Node.js 库 SuperAgent。相比 Golang 标准库 net/http,GoRequest 使用起来更加简单。GoRequest 官方的口号是 “像机枪一样发送请求”。GoRequest 包含以下功能:支持 HTTP 请求方式:Get/Post/Put/Head/Delete/Patch/Options支持设置 header 请求头支持使用 JSON 字符串作为请求参数支持将多路请求的方式发送数据和文件支持通过代理发送请求支持为请求设置超时支持 TLS 客户端设置支持设置重定向策略支持为请求设置 cookieCookieJar - automatic in-memory cookiejar支持请求头设置基本身份认证安装方式:go get github.com/parnurzeal/gorequest2 HTTP请求方式Golang 发送一个简单的 Get 请求,使用 net/http 标准库和使用 GoRequst 库,两种发送 Get 请求的方式都比较简单。示例代码如下:标准库方式:resp, err := http.Get("http://example.com/")GoRequest 库方式:request := gorequest.New() resp, body, errs := request.Get("http://example.com/").End()或(该 GoRequest 方式无法复用对象)resp, body, errs := gorequest.New().Get("http://example.com/").End()阅读上面这两段代码,我们可以发现,使用标准库的方式发送 Get 请求,甚至比使用 GoRequest 库的方式发送 Get 请求更加简单。但是,当我们需求稍作修改,比如我们需要为 Get 请求,设置 header 头和设置重定向策略。我们再来看一下分别使用标准库和 GoRequest 库两种实现方式。标准库方式:client := &http.Client{ CheckRedirect: redirectPolicyFunc, } req, err := http.NewRequest("GET", "http://example.com", nil) req.Header.Add("If-None-Match", `W/"wyzzy"`) resp, err := client.Do(req)GoRequest 库方式(其它 HTTP 请求方式与 Get 使用方式相同):request := gorequest.New() resp, body, errs := request.Get("http://example.com"). RedirectPolicy(redirectPolicyFunc). Set("If-None-Match", `W/"wyzzy"`). End()阅读上面两段代码,很容易发现使用 GoRequest 方式使实现更加简单。使用标准库方式,首先需要创建一个 Client,然后使用不同的命令设置 header 头等操作,这仅仅是为了实现一个 HTTP 请求。而使用 GoRequest 方式,仅需链式调用两个方法即可轻松实现。3 JSON 格式请求参数在 Golang 语言中,如果使用标准库 net/http 发送请求参数为 JSON 格式的 POST 请求,首先需要先将 map 或 struct 类型的数据,使用标准库 encoding/json 的 Marshal 方法,将数据转换为 JSON 格式的数据,并且设置 header 头参数 Content-Type 的值为 application/json,然后创建一个 Client,最终你的代码变得越来越长,越来越难维护。标准库方式:m := map[string]interface{}{ "name": "backy", "species": "dog", } mJson, _ := json.Marshal(m) contentReader := bytes.NewReader(mJson) req, _ := http.NewRequest("POST", "http://example.com", contentReader) req.Header.Set("Content-Type", "application/json") req.Header.Set("Notes","GoRequest is coming!") client := &http.Client{} resp, _ := client.Do(req)如果使用 GoRequest 库发送请求参数为 JSON 格式的 POST 请求,因为它默认支持 JSON 格式的请求参数,所以它只需要一行代码就可以实现。GoRequest 库方式:request := gorequest.New() resp, body, errs := request.Post("http://example.com"). Set("Notes","gorequst is coming!"). Send(`{"name":"backy", "species":"dog"}`). End()4支持回调函数 CallbackGoRequest 库还支持回调函数,你可以根据自己的项目需求灵活使用它,回调函数示例代码如下:func printStatus(resp gorequest.Response, body string, errs []error){ fmt.Println(resp.Status) } gorequest.New().Get("http://example.com").End(printStatus)5 请求控制在 Golang 项目开发中,有时我们可能需要对请求做一些额外控制,比如超时处理,重试请求 N 次,重定向处理等。GoRequest 库都可以为我们提供简单的实现方式。超时处理:request := gorequest.New().Timeout(2*time.Millisecond) resp, body, errs:= request.Get("http://example.com").End()需要注意的是,Timeout 是将 Dial 连接和 IO 读写的耗时总和,与时间参数作比较。重试请求:request := gorequest.New() resp, body, errs := request.Get("http://example.com/"). Retry(3, 5 * time.Second, http.StatusBadRequest, http.StatusInternalServerError). End()阅读上面这段代码,它的含义是当服务器返回结果是 http.StatusBadRequest 或 http.StatusInternalServerError 时,会每隔 5 秒重试请求一次,共重试 3 次。重定向处理:request := gorequest.New() resp, body, errs := request.Get("http://example.com/"). RedirectPolicy(func(req Request, via []*Request) error { if req.URL.Scheme != "https" { return http.ErrUseLastResponse } }). End() 阅读上面这段代码,它的含义是将 http 请求重定向为 https 请求。6 返回结果处理方式朋友们可能已经发现,以上示例代码都是以 End 结束,End 的含义是返回结果是字符串类型,如果我们希望返回结果是其他类型,比如字节类型和结构体类型,可以将 End 分别替换为 EndBytes 和 EndStruct。EndBytes 格式:resp, bodyBytes, errs := gorequest.New().Get("http://example.com/").EndBytes()EndStruct 格式:heyYou struct { Hey string `json:"hey"` } var heyYou heyYou resp, _, errs := gorequest.New().Get("http://example.com/").EndStruct(&heyYou)7 总结本文我们介绍 Golang 语言的极简 HTTP 客户端 GoRequest 以及它的使用方法。它比标准库 net/http 使用方式简单,当我们项目开发中需要使用 HTTP 方式调用接口时,强烈推荐使用 GoRequest 库。GoRequest 底层在大多数用例中是基于 http.Client 实现的,所以通过一次调用 gorequest.New() 得到的对象,应尽可能多次使用。GoRequest 除了上面介绍的 JSON 参数,它还支持 Struct 和 File,感兴趣的读者可以查阅官方文档了解相关内容。https://github.com/parnurzeal/gorequest
2021年10月18日
261 阅读
0 评论
1 点赞