合集-Golang学习

摘要:当声明枚举类型或定义一组相关常量时,Go语言中的`iota`关键字可以帮助我们简化代码并自动生成递增的值。本文档将详细介绍`iota`的用法和行为。 ### `iota`关键字 `iota`是Go语言中的一个预定义标识符,它用于创建自增的无类型整数常量。`iota`的行为类似于一个计数器,每次在常量 阅读全文
posted @ 2023-07-10 14:02 落雷 阅读(808) 评论(0) 推荐(0)
摘要:最近在研究[kratos](https://github.com/go-kratos/kratos)的使用,发现在`kratos run`之前会先运行`go generate ./...`命令。 这个命令之前没怎么用过,所以决定学习下该命令的用法。 `go generate`是Go语言中的一个命令, 阅读全文
posted @ 2023-07-11 09:09 落雷 阅读(2200) 评论(0) 推荐(0)
摘要:简介: 在现代软件开发中,全球唯一标识符(UUID)在许多场景中发挥着重要的作用。UUID是一种128位的唯一标识符,它能够保证在全球范围内不重复。在Go语言中,我们可以使用第三方库`github.com/google/uuid`来方便地生成UUID。本文将介绍如何使用这个库来生成不同版本的UUID 阅读全文
posted @ 2023-07-24 10:01 落雷 阅读(3776) 评论(0) 推荐(0)
摘要:原文在[这里](https://grpc.io/docs/languages/go/basics/)。 本教程为Go程序员提供了使用gRPC的基本介绍。 通过跟随本示例,你将学会如何: - 在.proto文件中定义一个服务。 - 使用协议缓冲编译器生成服务器和客户端代码。 - 使用Go gRPC A 阅读全文
posted @ 2023-07-25 19:24 落雷 阅读(1000) 评论(0) 推荐(0)
摘要:`github.com/hyperledger/fabric-config/protolator` 是 Hyperledger Fabric 中的一个 Go 包,用于将 Protocol Buffers(ProtoBuf)消息和 JSON 格式之间进行转换。它提供了一种方便的方式来将 Fabric 阅读全文
posted @ 2023-07-31 11:24 落雷 阅读(538) 评论(0) 推荐(1)
摘要:原文在[这里](https://go.dev/blog/govulncheck) > 原文作者:Julie Qiu, for the Go security team 发布于 13 July 2023 我们很高兴地宣布,govulncheck v1.0.0 已经发布,同时还发布了用于将扫描集成到其他 阅读全文
posted @ 2023-08-03 11:07 落雷 阅读(217) 评论(0) 推荐(0)
摘要:GORM(Go Object-Relational Mapping)是一个用于Go语言的ORM库,它提供了一种简单、优雅的方式来操作数据库。GORM支持多种数据库,包括MySQL、PostgreSQL、SQLite和SQL Server。以下是GORM的一些主要特性: 1. **全功能ORM**:G 阅读全文
posted @ 2023-08-07 16:23 落雷 阅读(414) 评论(0) 推荐(0)
摘要:Go语言的泛型是在Go 1.18版本中引入的一个新特性,它允许开发者编写可以处理不同数据类型的代码,而无需为每种数据类型都编写重复的代码。以下是关于Go语言泛型的一些关键点: 1. 泛型是通过在函数或类型定义中使用类型参数来实现的。类型参数可以被看作是一个特殊的类型,它可以在函数或类型定义中的任何位 阅读全文
posted @ 2023-08-09 15:40 落雷 阅读(433) 评论(0) 推荐(0)
摘要:原文在[这里](https://go.dev/blog/go1.21)。 > 由Eli Bendersky, on behalf of the Go team 发布于 8 August 2023 Go团队今天非常高兴地发布了Go 1.21版本,你可以通过访问[下载页面](https://go.dev 阅读全文
posted @ 2023-08-10 16:30 落雷 阅读(719) 评论(0) 推荐(0)
摘要:创建zip文件 golang提供了archive/zip包来处理zip压缩文件,下面通过一个简单的示例来展示golang如何创建zip压缩文件: func createZip(filename string) { // 缓存压缩文件内容 buf := new(bytes.Buffer) // 创建z 阅读全文
posted @ 2020-12-23 11:21 落雷 阅读(4482) 评论(0) 推荐(0)
摘要:本文主要是记录我搭建go playground的步骤。 1、安装docker 如果你使用的Ubuntu,docker的安装步骤可以参见这里,这是我之前写的在Ubuntu18.04下安装fabric,其中有docker的安装步骤,这里就不再赘述了。 CentOS下安装docker的,可以参见这里。与U 阅读全文
posted @ 2021-01-17 10:52 落雷 阅读(1002) 评论(0) 推荐(0)
摘要:简介 zap是有uber开发的一款日志库。 zap提供了三个快速创建Logger方法: NewProduction: 以JSON格式记录Info级别及以上的标准错误日志 NewDevelopment: 以JSON格式记录Debug级别及以上的标准错误日志 NewExample: 提供一个测试实例,供 阅读全文
posted @ 2023-02-09 14:36 落雷 阅读(879) 评论(0) 推荐(0)
摘要:Logger Gorm提供了一个默认的logger实现,默认情况下日志数据级别为warn,同时输出慢SQL: Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), Config{ SlowThreshold: 200 * time.Mill 阅读全文
posted @ 2023-02-09 13:16 落雷 阅读(1288) 评论(0) 推荐(0)
摘要:gin是一个使用Go语言开发的Web框架,具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,支持中间件等。 在工作中有时候需要支持https服务,gin可以通过中间件的方式来提供对https的支持,这里使用的是secure来提供https服务支持。这里给出一个简单的使用示例: 示例代码 pac 阅读全文
posted @ 2022-11-30 16:32 落雷 阅读(492) 评论(0) 推荐(0)
摘要:以下内容来自官方文档。 go version: 1.17.5 综述 plugin包实现了Go插件的加载和符号解析。 Go插件是一个包括了可导出函数和变量的main包(可以没有main()函数),构建时使用如下命令: go build -buildmode=plugin 插件应该在程序的init函数中 阅读全文
posted @ 2021-12-14 17:13 落雷 阅读(1033) 评论(0) 推荐(0)
摘要:原文在[这里](https://go.dev/security/vuln/) ## 概述 Go帮助开发人员检测、评估和解决可能被攻击者利用的错误或弱点。在幕后,Go团队运行一个管道来整理关于漏洞的报告,这些报告存储在Go漏洞数据库中。各种库和工具可以读取和分析这些报告,以了解特定用户项目可能受到的影 阅读全文
posted @ 2023-07-30 15:29 落雷 阅读(374) 评论(0) 推荐(0)
摘要:Go语音中格式化时间不是常见的`y-m-d H:M:S`,而是使用**2006-01-02 15:04:05 -0700 MST**,也就是常说的`123456`。 > 之所以这么用,据说Go是在这个时间节点诞生的 在go 1.20之前,除了自定义时间格式外,还可以使用`time`包中预定义的格式: 阅读全文
posted @ 2023-07-04 19:21 落雷 阅读(155) 评论(0) 推荐(0)
摘要:在Linux系统中执行操作时,进程可以通过发送和接收信号与其他进程进行通信。信号是用于通知进程发生特定事件或请求进程采取特定动作的软件中断。 以下是Linux系统中常见的一些信号及其含义: 1. **SIGINT (2)**:中断信号,通常由终端用户按下`Ctrl + C`发送给前台进程。该信号用于 阅读全文
posted @ 2023-06-27 13:53 落雷 阅读(473) 评论(0) 推荐(0)
摘要:原文在[这里](https://go.dev/blog/pgo-preview)。 > 原文发布于2023年2月8日 在构建Go二进制文件时,Go编译器会进行优化,以尽可能生成性能最佳的二进制文件。例如,常量传播可以在编译时对常量表达式进行求值,避免了运行时的计算开销;逃逸分析可以避免对局部作用域对 阅读全文
posted @ 2023-06-25 14:18 落雷 阅读(360) 评论(0) 推荐(0)
摘要:在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的embed,go1.18引入了泛型;又或是自己本地使用的是最新版,但公司的项目中使用的go1.14、go1.13甚至是更早的版本。 那么有没有既不影响我们自己的本地环境,又能兼顾历史项目的办法呢?答案当然是 阅读全文
posted @ 2023-05-16 09:42 落雷 阅读(907) 评论(0) 推荐(0)
摘要:时隔20天,OpenAI从v0.0.1升级到了v0.2.0。与v0.0.1版相比,v0.2.0版主要做了以下改动: 把cmd目录下微信公众号的相关服务迁移到了这里 完善了cmd下的测试服务,针对openAI库里实现的各个接口都提供了响应的调用接口,服务运行后可以通过postman进行测试 完成了Fi 阅读全文
posted @ 2023-05-11 10:13 落雷 阅读(126) 评论(0) 推荐(1)
摘要:Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求。中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一些操作。 以下是关于Gin中间件开发的一些基本信息: - **中间件的定义**:在Gin中,中间件是 阅读全文
posted @ 2023-08-11 08:55 落雷 阅读(922) 评论(0) 推荐(0)
摘要:本文是区块链浏览器系列的第三篇,本文介绍区块链浏览器的主体部分,即区块数据的解析。 这一版本的[区块链浏览器](https://github.com/mengbin92/browser/tree/gin)是基于[gin](https://github.com/gin-gonic/gin)实现的,只提 阅读全文
posted @ 2023-08-15 19:41 落雷 阅读(130) 评论(0) 推荐(0)
摘要:`Memcache` 是一个高性能、分布式的内存缓存系统,常用于缓存数据库查询结果、API调用结果、页面内容等,以提升应用程序的性能和响应速度。下面详细介绍一些 `Memcache` 的特点和使用方式: 1. **内存缓存:** `Memcache` 是一种基于内存的缓存系统,数据存储在内存中,因此 阅读全文
posted @ 2023-08-17 11:32 落雷 阅读(131) 评论(0) 推荐(0)
摘要:`google.golang.org/protobuf/encoding/protojson` 是 Go 语言中的一个库,用于处理 Protocol Buffers(protobuf)和 JSON 之间的转换,遵循[https://protobuf.dev/programming-guides/pr 阅读全文
posted @ 2023-08-18 14:33 落雷 阅读(1420) 评论(0) 推荐(0)
摘要:`gosec` 是一个用于在 Go 代码中查找安全问题的开源工具,它可以帮助发现可能的漏洞和潜在的安全风险。以下是关于 `gosec` 的详细介绍: ## 1. 工具概述: `gosec` 是一个静态分析工具,用于扫描 Go 代码以查找潜在的安全问题。它可以识别常见的代码漏洞、敏感信息泄露和其他安全 阅读全文
posted @ 2023-08-21 15:13 落雷 阅读(552) 评论(0) 推荐(0)
摘要:本文是区块链浏览器系列的第四篇。 在[上一篇文章](https://mengbin.top/2023-08-13-blockBrowser/)介绍如何解析区块数据时,使用`session`对客户端上传的pb文件进行区分,到期后自动删除。 在这片文章中,会着重介绍下认证系统的实现,主要分为三部分: - 阅读全文
posted @ 2023-08-22 14:22 落雷 阅读(124) 评论(0) 推荐(0)
摘要:`fsnotify`是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制,例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API,例如Linux上的inotify,macOS上的FSEvents,以及Windows上的ReadDirectoryChangesW。 阅读全文
posted @ 2023-08-26 13:39 落雷 阅读(942) 评论(0) 推荐(1)
摘要:在 gRPC 中使用 JWT(JSON Web Tokens)进行身份验证是一种常见的做法,它可以帮助你确保请求方的身份和权限。下面是一种使用 gRPC 和 JWT 进行身份验证的步骤: 1. **生成和签发 JWT:** 在用户登录成功后,你需要生成一个 JWT 并将其签发给用户。JWT 中可以包 阅读全文
posted @ 2023-08-27 15:16 落雷 阅读(340) 评论(0) 推荐(0)
摘要:`go embed` 是 Go 1.16 中引入的特性,它允许将文件嵌入到 Go 代码中,以便在运行时访问这些文件。这对于将静态资源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二进制文件中,以及简化文件分发和部署非常有用。下面是关于 `go embed` 的详细介绍: ** 阅读全文
posted @ 2023-08-29 13:38 落雷 阅读(337) 评论(0) 推荐(0)
摘要:本文是区块链浏览器系列的第五篇,项目完整代码在[这里](https://github.com/mengbin92/browser/tree/main)。 在[上一篇文章](https://mengbin.top/2023-08-20-browser2/)中给浏览器增加了简单的用户认证,至此浏览器的基 阅读全文
posted @ 2023-08-30 15:28 落雷 阅读(146) 评论(0) 推荐(0)
摘要:## pprof简介 `pprof`是Go语言的一个性能分析库,它可以帮助开发者找出程序中的性能瓶颈。`pprof`提供了CPU分析、内存分析、阻塞分析等多种性能分析功能。 以下是`pprof`的主要特性: 1. **CPU分析**:`pprof`可以记录程序在CPU上的运行时间,并将这些数据以火焰 阅读全文
posted @ 2023-09-01 15:04 落雷 阅读(609) 评论(0) 推荐(0)
摘要:## 标准库 `cmp` 原文在[这里](https://pkg.go.dev/cmp) go 1.21 新增 `cmp` 包提供了与有序变脸比较相关的类型和函数。 ### Ordered 定义如下: ```go type Ordered interface { ~int | ~int8 | ~in 阅读全文
posted @ 2023-09-02 11:56 落雷 阅读(807) 评论(0) 推荐(0)
摘要:原文在[这里](https://go.dev/blog/rebuild)。 > 由 Russ Cox 发布于 2023年8月28日 开源软件的一个关键优势是任何人都可以阅读源代码并检查其功能。然而,大多数软件,甚至是开源软件,都以编译后的二进制形式下载,这种形式更难以检查。如果攻击者想对开源项目进行 阅读全文
posted @ 2023-09-05 17:20 落雷 阅读(944) 评论(2) 推荐(1)
摘要:原文在这里。 由 Michael Pratt 发布于 2023年9月5日 在2023年早些时候,Go 1.20发布了供用户测试的概要版本的基于性能分析的优化(PGO)。经过解决预览版已知的限制,并得益于社区反馈和贡献的进一步改进,Go 1.21中的PGO支持已经准备好供一般生产使用!请查阅性能分析优 阅读全文
posted @ 2023-09-09 12:26 落雷 阅读(833) 评论(0) 推荐(0)
摘要:表象:Return schema invalid. required items must be unique [recovered] 虽然 Fabric v2.2 已经发布了很久了,但之前因为项目历史问题,一直使用的都是 Fabric v1.4.8,所以智能合约也一直使用的都是 github.co 阅读全文
posted @ 2023-09-10 14:33 落雷 阅读(478) 评论(0) 推荐(1)
摘要:原文在这里。 由 Robert Findley and Alan Donovan 发布于 2023年9月8日 今年夏天初,Go团队发布了gopls的v0.12版本,这是Go语言的语言服务器,它进行了核心重写,使其能够适应更大的代码库。这是一项长达一年的努力的成果,我们很高兴分享我们的进展,并稍微谈一 阅读全文
posted @ 2023-09-11 12:01 落雷 阅读(1859) 评论(0) 推荐(2)
摘要:在开发应用程序时,记录日志是一项关键的任务,以便在应用程序运行时追踪问题、监视性能和保留审计记录。Go 语言提供了灵活且强大的日志记录功能,可以通过多种方式配置和使用。其中一个常用的日志记录库是 github.com/natefinch/lumberjack,它提供了一个方便的方式来处理日志文件的轮 阅读全文
posted @ 2023-09-14 09:17 落雷 阅读(1847) 评论(0) 推荐(0)
摘要:在微信公众号的使用过程中,为了提高信息传输的安全性,可以在服务器配置中将消息加解密模式指定为安全模式。 启用安全模式后,公众号主动调用API的情况并不会受影响,只有被动回复用户的消息时才需要对消息进行加解密。 官方提供了5种开发语言的示例代码,参照官方给的C++示例代码,本文给出go语言的解密实现: 阅读全文
posted @ 2023-09-14 14:41 落雷 阅读(105) 评论(0) 推荐(0)
摘要:原文在这里。 由 Johan Brandhorst-Satzkorn, Julien Fabre, Damian Gryski, Evan Phoenix, and Achille Roussel 发布于 2023年9月13日 Go 1.21添加了一个新的端口,通过新的GOOS值wasip1来定位W 阅读全文
posted @ 2023-09-15 20:26 落雷 阅读(870) 评论(0) 推荐(0)
摘要:什么是 Prometheus Prometheus 是一个开源的系统监控和警报工具,最初由 SoundCloud 开发,并于 2012 年发布为开源项目。它是一个非常强大和灵活的工具,用于监控应用程序和系统的性能,并根据预定义的规则触发警报。以下是对 Prometheus 的详细介绍: 特点和优势: 阅读全文
posted @ 2023-09-17 15:10 落雷 阅读(987) 评论(0) 推荐(2)
摘要:Sentinel Sentinel 是阿里巴巴开源的一款高可用性和流量控制的分布式系统。它最初是为了解决阿里巴巴内部的微服务架构中的流量控制和熔断降级问题而开发的。Sentinel 旨在提供实时的流量控制、熔断降级、系统负载保护等功能,以保障应用的高可用性和稳定性。以下是 Sentinel 的详细介 阅读全文
posted @ 2023-09-18 09:35 落雷 阅读(718) 评论(0) 推荐(0)
摘要:RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统,它实现了高级消息队列协议(AMQP)标准,为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的,具有高度的可扩展性和可靠性,因此被广泛用于构建分布式、异步的消息通信系统。 以下是关于 Rab 阅读全文
posted @ 2023-09-19 10:34 落雷 阅读(274) 评论(0) 推荐(0)
摘要:原文在这里。 由 David Chase and Russ Cox 发布于2023年9月19日 Go 1.21 版本包含了对 for 循环作用域的预览更改,我们计划在 Go 1.22 中发布此更改,以消除其中一种最常见的 Go 错误。 问题 如果你写过一定量的 Go 代码,你可能犯过一个错误,即在迭 阅读全文
posted @ 2023-09-22 09:12 落雷 阅读(1095) 评论(0) 推荐(1)
摘要:单例模式简介 单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点以获取该实例。它是一种创建型模式,通常用于需要严格控制某个类的实例数量的情况。单例模式确保一个类在整个应用程序生命周期中只有一个实例,因此可以节省系统资源,同时提供了一个集中的访问点,以便在需要时获取该实例。 以下是单 阅读全文
posted @ 2023-09-23 07:41 落雷 阅读(460) 评论(0) 推荐(1)
摘要:在开发Go应用程序时,处理配置是一个常见的需求。配置可能来自于配置文件、环境变量、命令行参数等等。Viper是一个强大的库,可以帮助我们处理这些配置。 什么是Viper? Viper是一个应用程序配置解决方案,用于Go应用程序。它支持JSON、TOML、YAML、HCL、envfile和Java p 阅读全文
posted @ 2023-09-25 09:30 落雷 阅读(415) 评论(0) 推荐(0)
摘要:YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换。在 Go 语言中,你可以使用 gopkg.in/yaml.v3 包来解析和生成 YAML 数据。本文将介绍如何使用 gopkg.in/yaml.v3 来处理 YAML 数据。 安 阅读全文
posted @ 2023-09-26 09:47 落雷 阅读(1394) 评论(0) 推荐(1)
摘要:Go语言的并发机制是其强大和流行的一个关键特性之一。Go使用协程(goroutines)和通道(channels)来实现并发编程,这使得编写高效且可维护的并发代码变得相对容易。下面是Go的并发机制的详细介绍: 协程(Goroutines): 协程是Go中的轻量级线程,由Go运行时管理。与传统线程相比 阅读全文
posted @ 2023-09-28 11:05 落雷 阅读(591) 评论(0) 推荐(2)
摘要:原文在这里。 由 Ian Lance Taylor 发布于2023年9月26日 slices 包函数签名 slices.Clone 函数很简单:它返回一个任意类型切片的副本: func Clone[S ~[]E, E any](s S) S { return append(s[:0:0], s... 阅读全文
posted @ 2023-10-04 07:53 落雷 阅读(410) 评论(0) 推荐(0)
摘要:工厂模式是一种创建型设计模式,它提供了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让一个类的实例化延迟到其子类。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在软件开发中,对象的创建和使用是常见的操作。然而,对象的创建过程常常会涉及到复杂的逻辑和多变的需求。为了 阅读全文
posted @ 2023-10-06 15:31 落雷 阅读(262) 评论(0) 推荐(0)
摘要:当你需要为你的 Go 项目创建一个强大的命令行工具时,你可能会遇到许多挑战,比如如何定义命令、标志和参数,如何生成详细的帮助文档,如何支持子命令等等。为了解决这些问题,github.com/spf13/cobra 就可以派上用场。 github.com/spf13/cobra 是一个用于构建强大的命 阅读全文
posted @ 2023-10-07 10:47 落雷 阅读(373) 评论(0) 推荐(0)
摘要:Go 1.21中新增的 slices包中提供了很多与切片相关的函数,适用于任意类型的切片。 本文内容来自官方文档 BinarySearch 函数签名如下: func BinarySearch[S ~[]E, E cmp.Ordered](x S, target E) (int, bool) Bina 阅读全文
posted @ 2023-10-08 09:18 落雷 阅读(492) 评论(0) 推荐(0)
摘要:思考 开始之前,先考虑下下面的代码的执行结果: package main import "fmt" func test() int { i := 0 defer func() { fmt.Println("defer1") }() defer func() { i += 1 fmt.Println( 阅读全文
posted @ 2023-10-13 11:27 落雷 阅读(639) 评论(1) 推荐(1)
摘要:简介 Go语言中的切片(slice)是一种灵活的数据结构,它构建在数组之上并提供了方便的方式来操作数组的一部分。切片的底层实现涉及到数组和一些元数据。以下是Golang切片的底层实现的详细介绍: 底层数组(Underlying Array): 切片是建立在一个底层数组之上的。这个数组通常比切片的容量 阅读全文
posted @ 2023-10-20 14:50 落雷 阅读(190) 评论(0) 推荐(0)
摘要:Go的map是一种高效的数据结构,用于存储键值对。其底层实现是一个哈希表(hash table),下面是有关map底层实现的详细介绍: 哈希表: map的底层实现是一个哈希表,也称为散列表。哈希表是一个数组,其中每个元素被称为"桶",用于存储键值对。 哈希表的大小是可动态调整的,当存储的键值对数量达 阅读全文
posted @ 2023-10-22 15:35 落雷 阅读(276) 评论(0) 推荐(0)
摘要:在 Go 语言中,虽然没有经典的面向对象编程中的继承和多态的概念,但你可以通过接口(interface)来实现多态性。Go 语言鼓励组合和接口多态,这使得代码更加灵活和模块化。下面将详细介绍 Go 语言中如何实现多态。 多态性是面向对象编程的一个核心概念,它允许不同类型的对象在一致的接口下执行不同的 阅读全文
posted @ 2023-10-26 13:37 落雷 阅读(840) 评论(0) 推荐(1)
摘要:要查找一个数组中的第 K 大元素,有多种方法可以实现,其中常用的方法是使用分治算法或快速选择算法,这两种方法的时间复杂度到时候O(n)。 快速选择算法示例: package main import "fmt" func findKthLargest(nums []int, k int) int { 阅读全文
posted @ 2023-10-31 17:11 落雷 阅读(697) 评论(2) 推荐(2)
摘要:内存逃逸(memory escape)是指在编写 Go 代码时,某些变量或数据的生命周期超出了其原始作用域的情况。当变量逃逸到函数外部或持续存在于堆上时,会导致内存分配的开销,从而对程序的性能产生负面影响。Go 编译器会进行逃逸分析,以确定哪些变量需要在堆上分配内存。下面将详细分析 Go 语言中的内 阅读全文
posted @ 2023-11-02 08:57 落雷 阅读(1179) 评论(0) 推荐(1)
摘要:在Go编程语言中处理数据时,经常会遇到数组和切片。这两者是不同的数据结构,有各自的特性和用途。本文将对Go中的数组和切片进行比较,以帮助大家更好地理解它们。 1. 长度不同 一个主要的区别是长度。在Go中,数组是具有固定长度的数据结构,一旦创建,其大小不可更改。相比之下,切片具有动态大小,可以在运行 阅读全文
posted @ 2023-11-03 10:46 落雷 阅读(118) 评论(0) 推荐(0)
摘要:队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服务的人。 在本篇博客中,我们将详细介绍队列的概念、用途、实现以及如何在编程中使用 阅读全文
posted @ 2023-11-05 09:03 落雷 阅读(1062) 评论(0) 推荐(0)
摘要:定时任务简介 定时任务是指按照预定的时间间隔或特定时间点自动执行的计划任务或操作。这些任务通常用于自动化重复性的工作,以减轻人工操作的负担,提高效率。在计算机编程和应用程序开发中,定时任务是一种常见的编程模式,用于周期性地执行某些操作、处理数据或触发事件。 以下是一些关于定时任务的重要概念: 时间间 阅读全文
posted @ 2023-11-07 11:05 落雷 阅读(2175) 评论(0) 推荐(1)
摘要:什么是循环依赖 Go 中的循环依赖是指两个或多个包之间相互引用,形成了一个循环依赖关系。这种情况下,包 A 依赖包 B,同时包 B 也依赖包 A,导致两个包之间无法明确地确定编译顺序,从而可能引发编译错误或其他问题。循环依赖是 Go 中需要小心处理的问题,因为它可能导致程序不可编译或产生未定义行为。 阅读全文
posted @ 2023-11-08 19:19 落雷 阅读(994) 评论(0) 推荐(0)
摘要:在Go语言中,我们通常会遇到两种主要的方式来处理和操作字符串:使用fmt.Sprintf函数和string.Builder类型。尽管两者都可以实现字符串的格式化和连接,但它们在性能和用法上有一些关键区别。 1. fmt.Sprintf fmt.Sprintf是一个函数,它根据提供的格式化字符串和参数 阅读全文
posted @ 2023-11-11 08:26 落雷 阅读(374) 评论(0) 推荐(0)
摘要:在 Go 语言中,零值(Zero Value)是指在声明变量但没有显式赋值的情况下,变量会被自动赋予一个默认值。这个默认值取决于变量的类型,不同类型的变量会有不同的零值。零值是 Go 语言中的一个重要概念,因为它确保了变量在声明后具有一个可预测的初始状态,减少了未初始化变量引发的问题。 以下是一些常 阅读全文
posted @ 2023-11-13 14:02 落雷 阅读(899) 评论(0) 推荐(0)
摘要:Go语言中的上下文(Context)是一种用于在 Goroutines 之间传递取消信号、截止时间和其他请求范围值的标准方式。context 包提供了 Context 类型和一些相关的函数,用于在并发程序中有效地传递上下文信息。 在Go语言中,上下文通常用于以下场景: 请求的传递:当一个请求从客户端 阅读全文
posted @ 2023-11-17 08:47 落雷 阅读(1010) 评论(0) 推荐(0)
摘要:在 Go 语言中,panic、recover 和 defer 是用于处理异常情况的关键字。它们通常一起使用来实现对程序错误的处理和恢复。 1. defer 语句 defer 用于在函数返回之前执行一段代码。被 defer 修饰的语句或函数会在包含 defer 的函数执行完毕后执行。defer 常用于 阅读全文
posted @ 2023-11-18 10:59 落雷 阅读(277) 评论(0) 推荐(0)
摘要:使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例。 步骤 1. 安装 golang.org/x/net/proxy 包 使用以下命令安装 golang.org/x/net 包,该包 阅读全文
posted @ 2023-11-20 09:27 落雷 阅读(911) 评论(0) 推荐(0)
摘要:gRPC(gRPC Remote Procedure Call)是由 Google 开发的开源 RPC 框架,它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口定义语言(IDL)。gRPC 提供了一种高效、跨语言、跨平台的远程过程调用(RPC)解决方案,被广泛应用于构建分布 阅读全文
posted @ 2023-11-29 17:01 落雷 阅读(305) 评论(0) 推荐(0)
摘要:在 Go 语言中,主要的条件控制语句有 if-else、switch 和 select。以下是对它们的简单介绍: 1. if 语句: if 语句用于根据条件执行不同的代码块。它的基本形式如下: if condition { // code block } else if condition2 { / 阅读全文
posted @ 2023-12-06 11:25 落雷 阅读(147) 评论(0) 推荐(0)
摘要:1. 获取本地IP地址 使用 net 包可以获取本地机器的 IP 地址。以下是一个获取本地 IP 地址的简单示例: package main import ( "fmt" "net" ) func main() { // 获取所有网络接口 interfaces, err := net.Interfa 阅读全文
posted @ 2023-12-06 13:57 落雷 阅读(1470) 评论(3) 推荐(0)
摘要:Go语言中的goroutine是一种轻量级的线程,其优点在于占用资源少、切换成本低,能够高效地实现并发操作。但如何对这些并发的goroutine进行控制呢? 一提到并发控制,大家最先想到到的是锁。Go中同样提供了锁的相关机制,包括互斥锁sync.Mutex和读写锁sync.RWMutex;除此之外G 阅读全文
posted @ 2024-01-27 19:25 落雷 阅读(897) 评论(0) 推荐(2)
摘要:Go语言在1.18版本中引入了泛型(Generics),这是Go语言发展中的一个重要里程碑。泛型允许你编写更通用和可复用的代码,而无需牺牲类型安全性。以下是对Go中泛型的详细介绍,包括其语法、使用场景和示例代码。 1. 泛型的基本概念 泛型允许你定义可以处理多种数据类型的函数和数据结构,而无需为每种 阅读全文
posted @ 2024-07-03 15:06 落雷 阅读(235) 评论(0) 推荐(0)
摘要:LRU(Least Recently Used,最近最少使用)算法是一种常用于缓存管理的算法,用于在缓存空间有限的情况下,决定哪些数据应该被移除。它的基本思想是:如果一个数据最近被访问过,那么在将来一段时间内它被再次访问的概率较高。因此,当缓存已满,需要移除数据时,优先移除那些最近最少被使用的数据。 阅读全文
posted @ 2024-07-06 16:25 落雷 阅读(382) 评论(0) 推荐(0)
摘要:MRU(Most Recently Used)算法是一种缓存替换策略,与LRU(Least Recently Used)算法相反。MRU算法优先移除最近使用的缓存项,而保留较久未使用的缓存项。MRU算法适用于某些特定的访问模式,例如当数据访问具有较强的局部性时,MRU可能比LRU更有效。 基本原理 阅读全文
posted @ 2024-07-08 14:35 落雷 阅读(311) 评论(0) 推荐(0)
摘要:1. 概述 Adaptive Replacement Cache(ARC)是一种缓存替换算法,用于提高缓存的命中率。ARC 动态调整缓存策略,以适应实际的访问模式,从而在不确定的工作负载下表现良好。它通过同时维护两个缓存列表来追踪最近使用和频繁使用的数据块,并根据访问模式在这两个列表之间动态分配缓存 阅读全文
posted @ 2024-07-12 15:12 落雷 阅读(332) 评论(0) 推荐(0)
摘要:在构建命令行工具时,良好的用户交互体验至关重要。尤其是在需要与用户进行复杂输入的场景下,传统的命令行参数和标志可能显得笨拙。github.com/AlecAivazis/survey/v2 是一个为 Go 语言设计的库,专门用于构建交互式的命令行界面。它提供了多种用户输入方式,让你的 CLI 工具变 阅读全文
posted @ 2024-09-03 13:41 落雷 阅读(1030) 评论(0) 推荐(0)
摘要:在本文中,我们将学习如何将 Go 代码编译成 C 动态库,并通过 C 程序调用 Go 动态库中的函数。我们将逐步介绍如何生成 Go 动态库,如何编写 C 程序来调用 Go 函数,以及如何在 C 程序中链接 Go 生成的共享库。 1. 目标 将 Go 函数编译成 C 动态库(共享库)。 在 C 程序中 阅读全文
posted @ 2024-12-09 15:09 落雷 阅读(126) 评论(0) 推荐(0)