go-resty
一. go-resty一个优秀的 HTTP 客户端库
go-resty超时控制示例
go-resty自动重示例
go-resty TLS示例
go-resty 与连接池
go-resty 与代理
go-resty 与认证
总结go-resty中提供的API
一. go-resty一个优秀的 HTTP 客户端库
在 Golang 标准库中提供了net/http 具体参考该文档
这里我们看一个三方库go-resty,一个优秀的 HTTP 客户端库,支持链式调用,超时控制,TLS,Cookie 管理,链接池,代理,支持多种认证方式包括基本认证和 OAuth 2.0,支持发送 JSON、XML 和 URL 编码的数据,文件上传和下载,支持发送大量请求并批量处理响应结果,同时提供简单易用的 API 接口
package main
import ("fmt""github.com/go-resty/resty/v2"
)type User struct {ID int `json:"id"`Name string `json:"name"`Email string `json:"email"`
}func main() {// 创建 Resty 客户端对象client := resty.New()// GET 请求示例resp, err := client.R().SetQueryParams(map[string]string{"id": "1",}).SetHeader("Accept", "application/json").Get("https://httpbin.org/get")if err != nil {fmt.Println("发送 GET 请求失败:", err)return}// 解析响应为结构体var user Usererr = resp.UnmarshalJSON(&user)if err != nil {fmt.Println("解析响应失败:", err)return}fmt.Println("User ID:", user.ID)fmt.Println("User Name:", user.Name)fmt.Println("User Email:", user.Email)// POST 请求示例reqBody := map[string]interface{}{"name": "Alice","email": "alice@example.com",}resp, err = client.R().SetHeader("Content-Type", "application/json").SetBody(reqBody).Post("https://httpbin.org/post")if err != nil {fmt.Println("发送 POST 请求失败:", err)return}// 解析响应为结构体err = resp.UnmarshalJSON(&user)if err != nil {fmt.Println("解析响应失败:", err)return}fmt.Println("User ID:", user.ID)fmt.Println("User Name:", user.Name)fmt.Println("User Email:", user.Email)//也可以这样,通过SetResult(响应结构体)将响应直接解析到指定结构体上result:= &response.APIJsonReturn{}resp, err := client.R().SetBody(data).SetResult(result).Post(url)if err != nil {log.ErrorLog(msgId, "%+v", err)return err }if !resp.IsSuccess() {log.ErrorLog(msgId, "%+v", resp)return newErr}
}
2 go-resty 的优点
- 对于 RESTful API 开发者更加友好:go-resty 通过链式调用接口使得代码更具可读性,容易实现复杂的 API 调用。
- 容易拓展:go-resty 提供了许多官方扩展插件,如 Logger、Retryer、JSONMarshaler、XMLMarshaler、OAuth1 等等
- 更简单的错误处理:go-resty 会在返回的 Response 中包含所有的错误信息。
3 go-resty 的缺点
- 需要额外依赖库:使用 go-resty 需要引入第三方库,而 net/http 则是 Go 标准库自带的,不需要额外引用。
- 相对较慢:由于 go-resty 是基于 net/http 封装的,所以在某些情况下可能比 net/http 要慢一些。
4 相对于 go-resty 来说net/http 的缺点
- 错误信息不够全面:net/http 返回的 Response 中的错误信息不够全面。
- URL 解析错误跑出 panic:当解析一个错误的 URL 时,net/http 会直接抛出 panic 而不是返回一个错误信息,可能会导致程序崩溃。
- 上方在再获取到client后执行client.R()后面接连调用的函数就是链式调用,下方就不再示例
5 go-resty超时控制示例
package main
import ("fmt""time""github.com/go-resty/resty/v2"
)type User struct {ID int `json:"id"`Name string `json:"name"`Email string `json:"email"`
}func main() {client := resty.New()// 设置超时时间为 5 秒钟client.SetTimeout(5 * time.Second)resp, err := client.R().SetQueryParams(map[string]string{"id": "1",}).SetHeader("Accept", "application/json").Get("https://httpbin.org/get")if err != nil {// 判断是否是超时错误if restErr, ok := err.(*resty.TimeoutError); ok {fmt.Println("请求超时:", restErr)} else {fmt.Println("发送 GET 请求失败:", err)}return}var user Usererr = resp.UnmarshalJSON(&user)if err != nil {fmt.Println("解析响应失败:", err)return}
}
6 go-resty自动重示例
package main
import ("fmt""time""github.com/go-resty/resty/v2"
)type User struct {ID int `json:"id"`Name string `json:"name"`Email string `json:"email"`
}func main() {client := resty.New()// 设置最大重试次数为 3 次,重试间隔时间为 1 秒钟client.SetRetryCount(3).SetRetryWaitTime(1 * time.Second)resp, err := client.R().SetQueryParams(map[string]string{"id": "1",}).SetHeader("Accept", "application/json").Get("https://httpbin.org/get")if err != nil {fmt.Println("发送 GET 请求失败:", err)return}var user Usererr = resp.UnmarshalJSON(&user)if err != nil {fmt.Println("解析响应失败:", err)return}
}
使用 client.RetryMax() 方法来设置重试次数,使用 client.RetryWaitTime() 方法来设置重试间隔时间
SetRetryCount() 用于 Resty 对象上的全局设置,所有使用该 Resty 对象发送的请求都会遵循这个重试次数
RetryMax() 方法是应用于请求对象上的设置,即每次请求都可以根据具体需要独立地设置重试次数
package main
import ("fmt""github.com/go-resty/resty/v2"
)func main() {client := resty.New()resp, err := client.R().SetRetryCount(0).SetRetryWaitTime(1).SetQueryParams(map[string]string{"id": "1",}).SetHeader("Accept", "application/json").Get("https://httpbin.org/get")if resp.IsError() {resp, err = resp.Request.RetryMax(1).Get("https://httpbin.org/get")}if err != nil {fmt.Println("发送 GET 请求失败:", err)return}fmt.Println(resp)
}
7 go-resty TLS示例
package main
import ("fmt""github.com/go-resty/resty/v2"
)func main() {client := resty.New()// 设置证书文件路径和密码certFile := "/path/to/cert.pem"keyFile := "/path/to/key.pem"password := "secret"// 加载证书err := client.SetCertificates(certFile, keyFile, password)if err != nil {fmt.Println("加载证书失败:", err)return}// 关闭证书校验client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})resp, err := client.R().SetHeader("Accept", "application/json").Get("https://httpbin.org/get")if err != nil {fmt.Println("发送 GET 请求失败:", err)return}fmt.Println(resp)
}
8 go-resty 与连接池
go-resty 库使用 http.Transport 来实现 HTTP 连接池。http.Transport 提供了以下几个属性来控制连接池的行为:
- MaxIdleConns: 每个主机的最大空闲连接数。
- MaxIdleConnsPerHost: 对于每个主机,保持最大空闲连接数。
- IdleConnTimeout: 空闲连接的超时时间。
- TLSHandshakeTimeout: TLS 握手的超时时间。
- ResponseHeaderTimeout: 等待响应头的超时时间。
// 创建一个新的 resty 客户端实例
client := resty.New()// 设置连接池参数
client.SetTransport(&http.Transport{MaxIdleConnsPerHost: 10, // 对于每个主机,保持最大空闲连接数为 10IdleConnTimeout: 30 * time.Second, // 空闲连接超时时间为 30 秒TLSHandshakeTimeout: 10 * time.Second, // TLS 握手超时时间为 10 秒ResponseHeaderTimeout: 20 * time.Second, // 等待响应头的超时时间为 20 秒
})
9 go-resty 与代理
go-resty 库支持使用代理来发送 HTTP 请求,通过 client.SetProxy() 方法来设置代理参数
import ("fmt""github.com/go-resty/resty/v2""testing"
)func TestSend(t *testing.T){// 创建一个新的 resty 客户端实例client := resty.New()// 设置代理参数proxyURL := "http://user:password@proxyhost:port"client.SetProxy(proxyURL)// 发送 POST 请求resp, err := client.R().SetHeader("Content-Type", "application/json").SetBody(map[string]string{"name": "John","email": "john@example.com",}).Post("https://httpbin.org/post")if err != nil {fmt.Println("Error:", err)return}// 输出响应结果fmt.Println("Status Code:", resp.StatusCode())fmt.Println("Body:", resp.String())
}
除了 client.SetProxy() 方法之外,go-resty 还提供了一些其他的代理相关设置,包括:
client.SetProxyURL(): 设置代理服务器地址,可以是 HTTP 或 SOCKS5 代理。
client.SetProxyHeader(): 设置代理服务器需要的请求头。
client.SetProxyAuth(): 设置代理服务器的认证信息,可以是基本认证或 NTLM 认证
10 使用 go-resty 发送带有基本认证的代理请求的示例
使用 client.SetProxyURL() 方法设置代理服务器的地址和端口号,
使用 resty.ProxyBasicAuth() 方法设置基本认证的认证信息,
使用 client.SetProxyHeader() 方法设置代理服务器需要的请求头
package mainimport ("fmt""github.com/go-resty/resty/v2""net/http"
)func main() {// 创建一个新的 resty 客户端实例client := resty.New()// 设置代理服务器地址和认证信息proxyURL := "http://proxyhost:port"proxyAuth := resty.ProxyBasicAuth("user", "password")// 设置代理参数client.SetProxyURL(proxyURL).SetProxyAuth(proxyAuth)// 设置代理服务器需要的请求头client.SetProxyHeader(http.Header{"User-Agent": []string{"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"},})// 发送 GET 请求resp, err := client.R().Get("http://example.com")if err != nil {fmt.Println("Error:", err)return}// 输出响应结果fmt.Println("Status Code:", resp.StatusCode())fmt.Println("Body:", resp.String())
}
11 go-resty 与认证
go-resty 支持以下几种代理认证方式:
- 基本认证(Basic Authentication):使用用户名和密码进行认证,是一种最常见的 HTTP 认证方式。
- NTLM 认证(NT LAN Manager):微软开发的认证协议,可以实现单点登录(SSO)。
- Digest 认证(Digest Authentication):基于用户名、密码和消息摘要的认证协议,用于解决明文认证方式的安全问题
可以使用 resty.ProxyBasicAuth()、resty.ProxyNtlmAuth() 和 resty.ProxyDigestAuth() 方法来设置相应的认证信息,例如:
// 设置基本认证的认证信息
proxyAuth := resty.ProxyBasicAuth("user", "password")
client.SetProxyAuth(proxyAuth)// 设置 NTLM 认证的认证信息
proxyAuth := resty.ProxyNtlmAuth("domain", "user", "password")
client.SetProxyAuth(proxyAuth)// 设置 Digest 认证的认证信息
proxyAuth := resty.ProxyDigestAuth("user", "password")
client.SetProxyAuth(proxyAuth)
注意在使用某些认证方式时,需要提供相应的附加参数。例如,对于 NTLM 认证方式,需要提供域名或主机名等相关信息;对于 Digest 认证方式,需要通过 resty.ProxyDigestAuth() 方法提供一个回调函数来生成响应的摘要头部(Digest header),以便与代理服务器进行交互
12 总结go-resty中提供的API
Resty 对象方法
New() *Resty: 创建一个默认配置的 Resty 对象。
NewWithClient(client *http.Client) *Resty: 创建一个自定义配置的 Resty 对象,并使用指定的 http.Client 客户端对象。
R() *Request: 创建一个 Request 对象,并使用 Resty 对象的默认配置设置。
SetDebug(on bool) *Resty: 设置是否启用调试模式。如果启用,则会在控制台输出详细的请求和响应信息。
SetTimeout(timeout time.Duration) *Resty: 设置超时时间。可以在发送请求之前设置超时时间,单位为秒。
SetHeaders(headers map[string]string) *Resty: 设置请求头。可以通过传入一个键值对映射来设置多个请求头。
SetQueryParam(key, value string) *Request: 设置查询参数。可以通过在请求 URL 后添加查询字符串参数的方式设置。
SetFormData(data map[string]string) *Request: 设置表单数据。可以通过传入一个键值对映射来设置多个表单字段。
SetFormDataFromValues(values url.Values) *Request: 设置表单数据。可以通过传入一个 url.Values 对象来设置多个表单字段。
SetBody(body interface{}) *Request: 设置请求体。可以通过传入一个支持 io.Reader 接口的对象、字节数组或字符串来设置请求体内容。
SetResult(result interface{}) *Request: 设置响应结果类型。可以通过传入一个结构体对象类型来指定响应结果的解析方式。
SetError(err interface{}) *Request: 设置错误类型。可以通过传入一个结构体对象类型来指定解析错误信息的方式。
SetError(&ResponseError{Error: “custom error”}) *Request: 设置自定义错误信息,可以在请求返回不成功的情况下获取。
GetClient() *http.Client: 获取当前 Resty 对象使用的 http.Client 客户端对象。
SetTLSClientConfig(config *tls.Config) *Resty: 设置 TLS 客户端配置,例如关闭证书校验等安全选项。
SetCertificates(certFile, keyFile string, password string) error: 设置客户端证书和私钥,用于双向认证和 TLS 握手过程中的身份验证。
13 Request 对象方法
SetMethod(method string) *Request: 设置请求方法。可以设置 GET、POST、PUT、DELETE 等常见的 HTTP 请求方法。
SetHeader(key, value string) *Request: 设置请求头。可以通过传入一个键值对来设置单个请求头。
SetHeaders(headers map[string]string) *Request: 设置请求头。可以通过传入一个键值对映射来设置多个请求头。
SetQueryParam(key, value string) *Request: 设置查询参数。可以通过在请求 URL 后添加查询字符串参数的方式设置。
SetFormData(data map[string]string) *Request: 设置表单数据。可以通过传入一个键值对映射来设置多个表单字段。
SetFormDataFromValues(values url.Values) *Request: 设置表单数据。通过传入一个 url.Values 对象来设置多个表单字段
SetBody(body interface{}) *Request: 设置请求体。通过传入一个支持 io.Reader 接口的对象、字节数组或字符串来设置请求体内容。
SetResult(result interface{}) *Request: 设置响应结果类型。可以通过传入一个结构体对象类型来指定响应结果的解析方式。
SetError(err interface{}) *Request: 设置错误类型。可以通过传入一个结构体对象类型来指定解析错误信息的方式。
SetError(&ResponseError{Error: “custom error”}) *Request: 设置自定义错误信息,可以在请求返回不成功的情况下获取。
Execute() (*Response, error): 执行 HTTP 请求,并返回响应结果。如果请求出现问题或响应不成功,会返回一个错误对象
GetRequestURL() string: 获取当前请求的完整 URL。
SetBasicAuth(username, password string) *Request: 设置基本身份验证信息。通过传入用户名和密码来设置 HTTP 基本身份验证头
SetAuthToken(token string) *Request: 设置 Token 鉴权信息。可以通过传入 Token 字符串来设置 HTTP 请求头。
SetCloseConnection(cflag bool) *Request: 设置是否关闭连接。可以设置为 true 来在每次请求后关闭连接,也可以设置为 false 来保持长连接。
SetContentLength(contentLength int64) *Request: 设置请求体长度。在发送有请求体的请求时,显式地指定请求体的长度
SetContext(ctx context.Context) *Request: 设置请求上下文。可以通过传入一个 context.Context 对象来控制请求的生命周期和超时等细节。
SetCookies(cookies []*http.Cookie) *Request: 设置请求 Cookie。可以通过传入一个 Cookie 数组来设置多个 Cookie。
SetDisableWarn(bool) *Request: 设置是否禁用 Resty 警告信息。如果设为 true,则会隐藏一些警告信息。
SetDoNotParseResponse(bool) *Request: 设置是否跳过响应解析。如果设为 true,则会返回原始的响应字节数组,而不是解析后的结构体对象。
SetFile(key, filepath string) *Request: 向表单数据中添加文件。传入文件名和文件路径参数来添加文件字段和对应的文件内容
SetHeader(key, value string) *Request: 设置请求头。可以通过传入一个键值对来设置单个请求头。
SetHostURL(url string) *Request: 设置请求的基本 URL。可以在发送请求前设置基本的 URL,然后在具体请求中只传入相对路径即可。
SetOutput(output io.Writer) *Request: 设置响应输出。可以通过传入一个 io.Writer 对象来将响应结果输出到指定的流中。
SetQueryParam(key, value string) *Request: 设置查询参数。可以通过在请求 URL 后添加查询字符串参数的方式设置。
SetRedirectPolicy(policy grequests.RedirectPolicy) *Request: 设置重定向策略。可以传入一个实现了 grequests.RedirectPolicy 接口的对象来自定义重定向行为。
SetRedirectPolicyFunc(f func(*http.Request, []*http.Request) error) *Request: 设置重定向策略函数。可以传入一个自定义的函数来设置重定向行为。
SetRequestBodyStream(body io.ReadCloser) *Request: 设置请求体流。可以传入一个支持 io.ReadCloser 接口的对象来指定请求体内容。
SetRequestURI(uri string) *Request: 设置完整请求 URI。可以用于更灵活地控制请求的地址和参数等信息。
SetRetryCount(retryCount int) *Request: 设置重试次数。可以在请求失败或出错时自动重试该请求,设为 0 则不重试。
SetRetryWaitTime(retryWaitTime time.Duration) *Request: 设置重试间隔时间。可以在请求失败或出错时自动重试该请求,并设置重试之间的间隔时间。
SetTransport(transport http.RoundTripper) *Request: 设置传输层。可以通过传入一个实现了 http.RoundTripper 接口的对象来定制 HTTP 传输层行为。
ToJSON(v interface{}) error: 将请求体解析为 JSON 格式。可以传入一个结构体对象指针来解析响应结果。
ToXML(v interface{}) error: 将请求体解析为 XML 格式。可以传入一个结构体对象指针来解析响应结果。
ToString() (string, error): 将响应结果解析为字符串。如果响应结果不是字符串格式,则会返回一个解析错误。
ToBytes() ([]byte, error): 将响应结果解析为字节数组。如果响应结果无法解析,则会返回一个解析错误。
ToFile(filepath string) error: 将响应结果保存到文件中。可以传入文件路径参数来保存响应结果。
IsError(err error) bool: 判断是否出现了错误。可以在请求结束后通过该方法判断请求是否成功或出错。
14 Response 对象方法
StatusCode() int: 获取 HTTP 状态码。可以获取 HTTP 响应返回的状态码。
Proto() string: 获取 HTTP 协议版本。可以获取 HTTP 响应使用的协议版本。
Body() []byte: 获取响应内容。可以获取 HTTP 响应返回的原始字节流。
Result() interface{}: 获取响应结果。可以获取经过解析和转换后的响应结果。
Error() error: 获取错误信息。如果请求失败或返回结果有误,则会返回一个错误对象。
Header() http.Header: 获取响应头。可以获取 HTTP 响应返回的原始头部信息。
Cookies() []*http.Cookie: 获取响应 Cookie。可以获取 HTTP 响应返回的所有 Cookie 键值对。
String() string: 获取响应结果字符串。可以直接获取 HTTP 响应返回的字符串格式结果。
Time() time.Time: 获取响应时间。可以获取 HTTP 响应的时间戳和格式化字符串。
Request() *http.Request: 获取原始请求。可以获取 HTTP 请求的原始对象,包含所有请求头部和请求体等信息。
原文地址 : https://blog.csdn.net/qq_29799655/article/details/130831278
更多好文 vx —> golang技术实验室
本文由mdnice多平台发布
相关文章:
go-resty
一. go-resty一个优秀的 HTTP 客户端库 go-resty超时控制示例 go-resty自动重示例 go-resty TLS示例 go-resty 与连接池 go-resty 与代理 go-resty 与认证 总结go-resty中提供的API 一. go-resty一个优秀的 HTTP 客户端库 在 Golang 标准库中提供了net/http 具体参考该文档 这…...
香港服务器速度不稳定的原因有哪些
香港服务器速度不稳定的原因有哪些 网络连接的稳定性和速度对于个人和企业来说至关重要。然而,许多用户经常遇到香港服务器速度不稳定的问题,有时候快,有时候慢,这给他们的在线体验和工作效率带来了困扰。本文将探讨香港服务器速…...

企业架构NOSQL数据库之MongoDB
目录 一、背景描述及其方案设计 (一)业务背景描述 (二)模拟运维设计方案 二、Mongodb介绍 (一)nosql介绍 (二)产品特点 1、存储性 2、 效率性 3、结构 三、安装和配置 (一)…...

鸟哥马哥共叙Linux发展
导读北京时间3月28日,由51CTO学院和人民邮电出版社信息技术分社联合举办的[开放见远]“鸟哥”大陆行Linux技术沙龙在位于北京市西三环久凌大厦的51CTO学院举行。 台湾著名Linux网站——“鸟哥的Linux私房菜”站长蔡德明,51CTO学院讲师马哥教育创始人马永…...
OpenCV中常用算子
一、图像运算 Mat src, src1, src2, dst;// 图像运算 加 减 乘 除cv::add(src1, src2, dst); // 相加:src1src2cv::scaleAdd(src1, 1.0, src2, dst); // 相加:1.0*src1src2cv::addWeighted(src1, 0.3, src2, 0.7,…...
Android 11.0 系统限制上网系列之iptables用IOemNetd实现app某个时间段禁止上网的功能实现
1.前言 在11.0的系统rom定制化开发中,对于系统限制网络的使用,在system中netd网络这块的产品需要中,会要求设置app某个时间段禁止上网的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现app某个时间段禁止上网的的相关功能,就是在 系统中只能允许…...

【JavaSE】面向对象编程思想之继承
【本节目标】 1. 继承 2. 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7. super和this 8. 再谈初始化 9. protected 关键字 10. 继承方式…...
Golang make和new的区别
make 和 new new函数 作用 分配内存设置零值返回指针 eg: type Student struct{name stringage int }func main(){//new 一个内建类型num : new(int)fmt.Println(*num) //打印:0//new一个自定义类型s : new(Student)s.name "yx"fmt.Prin…...
(前后端交互式)Ajax上传图片 + 更换背景图片
前后端交互图片文件 上传-图片 注意1:上传的图片必须在2MB以内 注意2:服务器端oss(阿里云对象存储)为了安全性,图片url网址不能直接在浏览器地址栏访问 请用img/背景图方式进行使用 上传图片的代码实现 \* 目标&#…...
自媒体常见玩法
有声小说转成视频 题材来源 喜马拉雅 工具 https://trace.moe/ 33台词找台词 文字转视频 题材来源 小说类APP书籍 音乐转视频...

【react】react生命周期钩子函数:
文章目录 一、生命周期概念:二、生命周期:三、挂载阶段(constructor > render > componentDidMount):四、更新阶段(render > componentDidUpdate):五、卸载阶段(componentWillUnmount …...
CRM系统哪些功能可以个性化定制?
不同的企业有着不同的业务流程和需求,因此在选型时就需要一款可以个性化定制的CRM系统。下面说说可以个性化定制的CRM系统的功能和优势。 如何实现个性化定制? Zoho CRM支持个性化定制,您可以创建自定义功能模块、字段以及业务流程…...

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁
目录 前言 一、原理图及知识点介绍 二、代码分析 知识点四:delay(u16 i)这个函数为什么i1时,大约延时10us? 前言 已经是第二个实验了,上一个实验是点亮第一个LED灯,这个实验是LED的闪烁。 一、原理图及知识点介绍…...

PaperEdge 文档图像矫正
效果 地址: https://github.com/cvlab-stonybrook/PaperEdge...
入门NLTK:Python自然语言处理库初级教程
NLTK(Natural Language Toolkit)是一个Python库,用于实现自然语言处理(NLP)的许多任务。NLTK包括一些有用的工具和资源,如文本语料库、词性标注器、语法分析器等。在这篇初级教程中,我们将了解N…...

Android 死机问题学习笔记
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、死机系统简图二、死机的可能原因三、死机问题需要分析哪些数据四 、Java Backtrace 分析五、常见 Java backtrace 举例六、Native Backtrace七、Ke…...

企业内网终端安全无客户端准入控制技术实践
终端无代理/无客户端准入控制技术因其良好的用户体验而倍受创新企业的青睐。无代理/无客户端准入控制技术,顾名思义,是一种在网络中对终端实施访问控制的方法,无需依赖特定的客户端软件。 不同于银行、医院等传统行业的终端准入控制需求&…...

Android 开发代码规范
一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如,tab缩进4个空格,或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…...

c语言(函数)
目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明 函数定义 递归 正向打印数字 打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中,子程序是一个…...
OPENCV C++(二)直方图+分离颜色通道+画圆画线画矩形
分离RGB彩图颜色通道 也就是把每种分量的亮度图提出来 vector<Mat> channels;split(image1, channels);Mat R channels.at(0);Mat G channels.at(1);Mat B channels.at(2); 这样R,G,B每个图就是这个图的颜色分量图了 图片的克隆,深拷贝! Mat…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...