Go1.21中新增的slices包中提供了很多与切片相关的函数,适用于任意类型的切片。 本文内容来自官方文档 BinarySearch 函数签名如下: funcBinarySearch[S[]E,Ecmp.Ordered](xS,targetE)(int,bool) BinarySearch在已排序的切片中搜索target并返回找到target的位置,或者target在排序顺序中出现的位置;它还返回一个布尔值,表示是否确实在切片中找到了目标。切片必须按升序排序。 示例: packagemain import( "fmt" "slices" ) funcmain(){ names...

  SLI5qvYxXXnE   2023年11月02日   46   0   0 Go

原文在这里。 本教程为Go程序员提供了使用Protocolbuffer的基本介绍。 本教程使用proto3向Go程序员介绍如何使用protobuf。通过创建一个简单的示例应用程序,它向你展示了如何: 在.proto中定义消息格式 使用protocolbuffer编译器 使用GoprotocolbufferAPI读写消息 这并不是protocolbuffer在Go中使用的完整指南。更多细节,详见ProtocolBufferLanguageGuide、GoAPIReference、GoGeneratedCodeGuide和EncodingReference。 为什么使用ProtocolBu...

  SLI5qvYxXXnE   2023年11月02日   55   0   0 Go

1.gRPC简介 gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用ProtocolBuffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点: 高性能:使用HTTP/2协议,支持多路复用和流控制等特性,能够在客户端和服务器之间高效地传输大量数据。同时,gRPC还使用了基于平台优化的序列化和反序列化技术,提高了通信的效率。 简单易用:gRPC的IDL语言简单易懂,同时提供了自动生成代码的工具,方便用户进行开发。用户只需要定义好IDL,并生成代码后即可在代码中使用类似于本地函数调用的方式...

  SLI5qvYxXXnE   2023年11月02日   69   0   0 Go

chatGPT正式发布已经有段时间了,这段时间我也深度体验了chatGPT的魅力。 OpenAI除了提供网页版的chatGPT,还通过api的形式提供了很多其它服务,包括文字纠错、图片生成、音频转换等等。 作为程序员,即使有现成的openai库,但还是免不了想自己造轮子,所以就有这个openai库。 当前这个库刚刚开发完成,还有很多需要优化的地方,所要实现的功能都是OpenAIAPI提供的,目前已经完成了以下接口的开发: Models Completions Chat Edits Images Embeddings Audio Files 以下接口还未实现: Fine-tunes Mod...

  SLI5qvYxXXnE   2023年11月02日   63   0   0 Go

1.简介 在go中,slice是一种动态数组类型,其底层实现中使用了数组。slice有以下特点: slice本身并不是数组,它只是一个引用类型,包含了一个指向底层数组的指针,以及长度和容量。slice的长度可以动态扩展或缩减,通过append和copy操作可以增加或删除slice中的元素。slice的容量是指在底层数组中slice可以继续扩展的长度,容量可以通过make函数进行设置。 Slice的底层实现是一个包含了三个字段的结构体: type`slice`struct{ ptruintptr//指向底层数组的指针 lenint//slice的长度 capint//slice的容量 } 当一...

  SLI5qvYxXXnE   2023年11月02日   39   0   0 Go

时隔20天,OpenAI从v0.0.1升级到了v0.2.0。与v0.0.1版相比,v0.2.0版主要做了以下改动: 把cmd目录下微信公众号的相关服务迁移到了这里 完善了cmd下的测试服务,针对openAI库里实现的各个接口都提供了响应的调用接口,服务运行后可以通过postman进行测试 完成了Fine-tunes和Moderations接口的开发 新增了NewClientWithConfig接口,用户可以通过这个进行自定义配置,主要是需要实现以下两个接口: RequestFactory:用于构建http.Request,默认使用的是的sonic库进行json解析 FormFactory:...

  SLI5qvYxXXnE   2023年11月02日   115   0   0 Go

在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型;又或是自己本地使用的是最新版,但公司的项目中使用的go1.14、go1.13甚至是更早的版本。 那么有没有既不影响我们自己的本地环境,又能兼顾历史项目的办法呢?答案当然是肯定的:有!!!我这里介绍下官方的方案。 以我本地的环境为例,我使用的是go1.20.4,项目中使用的是go1.17,具体操作如下: 查看本地本部 $goversion goversiongo1.20.4linux/amd64 安装指定的发行版本 $goinstallgolang.org/dl/g...

  SLI5qvYxXXnE   2023年11月02日   52   0   0 Go

文中所涉及到的代码运行结果均是在64位机器上执行得到的. 基础知识回顾 在Go中,我们可以使用unsafe.Sizeof(x)来查看变量所占的内存大小。以下是Go内置的数据类型占用的内存大小: 类型 内存大小(字节数) bool 1 int8/uint8 1 int/uint 8 int32/uint32 4 int64/uint64 8 float32 4 float64 8 complex64 8 complex128 16 指针类型:T,map,func,chan 8 string 16 interface 16 []T ...

  SLI5qvYxXXnE   2023年11月02日   62   0   0 Go

原文在这里。 原文发布于2023年2月8日 在构建Go二进制文件时,Go编译器会进行优化,以尽可能生成性能最佳的二进制文件。例如,常量传播可以在编译时对常量表达式进行求值,避免了运行时的计算开销;逃逸分析可以避免对局部作用域对象进行堆分配,从而减少了垃圾回收的负担;内联则将简单函数的代码体复制到调用处,通常能够进一步优化调用处的代码(例如额外的常量传播或更好的逃逸分析)。 Go在发布的每个版本中都会改进优化,但这并不总是一项容易的任务。某些优化是可调节的,但编译器不能对每个函数都进行过度激进的优化,因为过于激进的优化实际上可能会损害性能或导致过长的构建时间。其他优化要求编译器对函数中的“常...

  SLI5qvYxXXnE   2023年11月02日   116   0   0 Go

当声明枚举类型或定义一组相关常量时,Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值。本文档将详细介绍iota的用法和行为。 iota关键字 iota是Go语言中的一个预定义标识符,它用于创建自增的无类型整数常量。iota的行为类似于一个计数器,每次在常量声明中出现时自增一次。 基本用法 以下是iota的基本用法: const( Apple=iota//0 Banana//1 Cherry//2 ) 在上述示例中,我们使用iota创建了一组常量。第一个常量Apple的值为iota,也就是0。接下来的常量Banana和Cherry会自动递增,分别为1和2。 递增规则 io...

  SLI5qvYxXXnE   2023年11月02日   61   0   0 Go

最近在研究kratos的使用,发现在kratosrun之前会先运行gogenerate./...命令。 这个命令之前没怎么用过,所以决定学习下该命令的用法。 gogenerate是Go语言中的一个命令,用于在Go源代码中执行自定义的命令或脚本,以生成代码或执行其他必要的构建任务。 生成代码的步骤 下面是使用gogenerate命令生成代码的一般步骤: 在Go源代码文件中,使用特定的注释标记来指示需要执行的命令或脚本。通常,这些注释标记以//go:generate开头,后跟要执行的命令。 //go:generatecommandarguments 运行gogenerate命令。在终端或命...

  SLI5qvYxXXnE   2023年11月02日   42   0   0 Go

什么是gRPC? gRPC是由Google开发的高性能、开源的RPC(RemoteProcedureCall)框架,用于在客户端和服务器之间进行通信。它基于ProtocolBuffers(protobuf)进行消息序列化和反序列化,支持多种通信协议,如HTTP/2、TCP和gRPC提供的协议。 gRPC的安全需求 在现代网络环境中,数据的安全性至关重要。特别是在分布式系统和微服务架构中,需要确保数据的机密性、完整性和身份认证,以防止数据被窃听、篡改或伪造。gRPC提供了多种安全功能,以满足这些安全需求。 gRPC安全性功能 1.TLS/SSL加密 TLS/SSL是一种加密协议,用于在网络通信中...

  SLI5qvYxXXnE   2023年11月02日   30   0   0 Go

简介:在现代软件开发中,全球唯一标识符(UUID)在许多场景中发挥着重要的作用。UUID是一种128位的唯一标识符,它能够保证在全球范围内不重复。在Go语言中,我们可以使用第三方库github.com/google/uuid来方便地生成UUID。本文将介绍如何使用这个库来生成不同版本的UUID,以及它的优势和用途。 安装github.com/google/uuid首先,我们需要在项目中引入github.com/google/uuid库。你可以使用goget命令来安装这个库,只需在终端中执行以下命令即可:$gogetgithub.com/google/uuid 生成版本4的随机UUID版本4...

  SLI5qvYxXXnE   2023年11月02日   67   0   0 Go

原文在这里。 本教程为Go程序员提供了使用gRPC的基本介绍。 通过跟随本示例,你将学会如何: 在.proto文件中定义一个服务。 使用协议缓冲编译器生成服务器和客户端代码。 使用GogRPCAPI编写一个简单的服务端和客户端。 本教程假设你已经阅读了gRPC入门并熟悉协议缓冲(ProtocolBuffers)。请注意,本教程中的示例使用了proto3版本的协议缓冲语言。你可以在proto3语言指南和Go生成的代码指南中了解更多信息。 为什么使用gRPC? 本示例是一个简单的路线映射应用程序,允许客户端获取有关其路线上的特点信息,创建其路线的摘要,并与服务器和其他客户端交换路线信息,如交通...

  SLI5qvYxXXnE   2023年11月02日   133   0   0 Go

原文在这里 概述 Go帮助开发人员检测、评估和解决可能被攻击者利用的错误或弱点。在幕后,Go团队运行一个管道来整理关于漏洞的报告,这些报告存储在Go漏洞数据库中。各种库和工具可以读取和分析这些报告,以了解特定用户项目可能受到的影响。这个功能集成到pkg.go.dev和一个新的命令行工具govulncheck中。 这个项目正在进行中,并且正在积极开发中。我们欢迎你的反馈,以帮助我们改进! 要报告Go项目中的漏洞,请参阅Go安全政策。 架构 Go漏洞管理架构 Go中的漏洞管理包括以下高级组件: 数据管道从各种来源收集漏洞信息,包括国家漏洞数据库(NVD)、GitHub咨询数据库,以及直...

  SLI5qvYxXXnE   2023年11月02日   87   0   0 Go

github.com/hyperledger/fabric-config/protolator是HyperledgerFabric中的一个Go包,用于将ProtocolBuffers(ProtoBuf)消息和JSON格式之间进行转换。它提供了一种方便的方式来将Fabric配置文件(以ProtoBuf格式表示)与JSON配置文件之间进行相互转换。这对于Fabric的配置管理和部署非常有用,使得用户可以轻松地在不同的配置格式之间进行切换。 功能和用法 protolator提供了一组功能,用于在ProtoBuf格式和JSON格式之间进行转换: DeepMarshalJSON funcDeepMars...

  SLI5qvYxXXnE   2023年11月02日   81   0   0 Go

在ProtocolBuffers(protobuf)中,可以使用特定的选项来指定生成的JSON标签。通过在消息定义中使用[(json_name)]选项,可以控制生成的JSON字段名称。这样可以确保ProtocolBuffers和JSON之间的互操作性。 下面是一个示例protobuf消息定义,其中指定了生成的JSON标签: syntax="proto3"; messagePerson{ stringname=1; int32age=2; stringemail=3; //指定生成的JSON标签为"full_name" stringfull_name=4[(json_name)="full_...

  SLI5qvYxXXnE   2023年11月02日   42   0   0 Go

Go语言的泛型是在Go1.18版本中引入的一个新特性,它允许开发者编写可以处理不同数据类型的代码,而无需为每种数据类型都编写重复的代码。以下是关于Go语言泛型的一些关键点: 泛型是通过在函数或类型定义中使用类型参数来实现的。类型参数可以被看作是一个特殊的类型,它可以在函数或类型定义中的任何位置使用。 在函数或类型定义中,类型参数的列表是在名称后面的方括号中给出的。例如,在函数定义funcPrintSlice[Tany](s[]T){...}中,T是一个类型参数,any是它的约束。 约束定义了类型参数可以接受的类型范围。例如,any约束允许类型参数接受任何类型,包括内置类型、接口类型、结构体类...

  SLI5qvYxXXnE   2023年11月02日   37   0   0 Go

原文在这里。 由EliBendersky,onbehalfoftheGoteam发布于8August2023 Go团队今天非常高兴地发布了Go1.21版本,你可以通过访问下载页面来获取。 Go1.21充满了新功能和改进。以下是一些值得注意的变化;完整的列表,请参阅发布说明。 工具改进 我们在1.20版本预览的基于配置文件的优化(PGO)特性现在已经可以广泛使用了!如果在主包的目录中存在名为default.pgo的文件,go命令将使用它来启用PGO构建。更多详情请查看PGO文档。我们已经在一系列Go程序上测量了PGO的影响,看到了2-7%的性能提升。 go工具现在支持向后和向前的语言兼容性...

  SLI5qvYxXXnE   2023年11月02日   33   0   0 Go

google.golang.org/protobuf/encoding/protojson是Go语言中的一个库,用于处理ProtocolBuffers(protobuf)和JSON之间的转换,遵循https://protobuf.dev/programming-guides/proto3json实现。 以下是该库的一些主要功能: 将protobuf消息转换为JSON格式:这是通过Marshal或MarshalOptions.Marshal函数实现的。这些函数接收一个protobuf消息并返回一个JSON格式的字符串。 将JSON格式的数据转换为protobuf消息:这是通过Unmarshal...

  SLI5qvYxXXnE   2023年11月02日   58   0   0 Go
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~