随笔分类 - Go
摘要:目录工具链差异环境配置差异实际使用中的差异 在Windows和Linux下使用Golang中的cgo功能时,主要区别在于所需的C/C++构建工具链和编译环境配置。 工具链差异 Linux:在Linux系统上,使用cgo特性需要安装GCC编译器。GCC是Linux系统上常用的C/C++编译器,
阅读全文
摘要:目录1. 工作池模式(Worker Pool Pattern)2. 扇出扇入模式(Fan-Out Fan-In Pattern)3. 管道模式(Pipeline Pattern)4. 使用上下文(Context)进行取消操作5. 错误组模式(ErrGroup Pattern) 1. 工作池模式(Wo
阅读全文
摘要:目录GPM模型GPM模型的工作流程特殊的M0和G0P队列为空的处理策略知识点 GPM模型 GPM模型是Go语言运行时系统中用来管理和调度大量goroutine的核心机制。在这个模型里: G(Goroutine):代表协程,即Go语言中的轻量级线程。它们由Go运行时自动管理,可以非常高效地创建和销毁,
阅读全文
摘要:目录一、检查并启用核心文件生成二、指定核心文件生成路径三、使用GDB调试核心文件 一、检查并启用核心文件生成 查看当前核心文件大小限制: 使用命令 ulimit -c 来查看系统允许的核心文件大小。如果返回值为0,则表示不生成核心文件。 临时设置无限制的核心文件大小: 在当前shell会话中执行 u
阅读全文
摘要:目录1. 缺少必要的 C 开发工具或库2. 环境变量设置不正确3. 缺少 C 库或头文件4. gopls 设置问题5. 构建标签 (Build Tags)6. 编辑器支持7. 测试和验证 如果 gopls 忽略了包含 cgo 代码的文件,这可能是由于几个原因导致的。cgo 允许 Go 代码调用 C
阅读全文
摘要:目录方法一:使用包管理器安装(推荐对于大多数用户)对于基于 Debian/Ubuntu 的系统:对于基于 Red Hat/CentOS 的系统:方法二:从官方网站下载并手动安装(推荐对于需要特定版本的用户) 在 Linux 上安装 Go(Golang)可以通过以下几种方式进行。以下是两种最常用的方法
阅读全文
摘要:目录安装常用操作 安装 go-torch 是一个用于分析 Go 程序性能的工具,它可以生成火焰图(Flame Graphs)来帮助分析 CPU 的使用情况。 要安装 go-torch,你需要先安装 Go 语言环境,并设置好 GOPATH 环境变量。然后使用 go get 命令来安装 go-torch
阅读全文
摘要:目录1. 代码生成2. 类型转换3. 函数调用4. 内存管理5. 编译和链接6. 运行时7. 并发和线程8. 错误处理示例代码总结 Cgo 是 Go 语言中用于调用 C 代码的工具,其底层工作原理涉及 Go 和 C 之间的交互。以下是 Cgo 的主要工作原理: 1. 代码生成 Cgo 预处理:Cgo
阅读全文
摘要:目录测试代码使用方法CPU利用率图形化常用操作 测试代码 package main import ( "bytes" "log" "math/rand" "net/http" _ "net/http/pprof" "time" ) // 生成一个随机字符串 func genSomeBytes() *
阅读全文
摘要:目录Go Test 简介单元测试基准测试示例测试测试覆盖率生成HTML覆盖率报告其他有用的选项 Go语言自带了一个强大的测试框架,它通过go test命令来运行测试。这个工具可以执行单元测试、性能测试(基准测试)、示例测试,并且支持测试覆盖率的统计和报告生成。 Go Test 简介 单元测试 单元测
阅读全文
摘要:目录eface (empty face)iface (interface face)总结 在Go语言的内部实现中,接口(interface)有两种不同的底层表示形式:eface 和 iface。这两种结构用于支持空接口(interface{})和具体类型的接口。了解它们的区别有助于更深入地理解Go语
阅读全文
摘要:目录函数方法示例对比函数示例方法示例总结值接收者使用场景特点指针接收者使用场景特点总结值接收者使用方法示例代码指针接收者使用方法示例代码总结 在Go语言中,方法和函数是两个不同的概念,尽管它们看起来相似。主要的区别在于它们的定义方式以及与类型的关系。让我们用简单的方式来解释这两者的区别: 函数 定义
阅读全文
摘要:目录通俗的解释详细介绍值接收者 vs. 指针接收者 通俗的解释 想象一下你在一个动物园工作,你的任务是照顾所有会“嘎嘎”叫的动物。在现实生活中,你会怎么判断一个动物会不会“嘎嘎”叫呢?很简单,你只需要听它叫一次就知道了。如果你听到“嘎嘎”,那不管它是鸭子、鹅还是其他什么动物,对于你的任务来说,它就是
阅读全文
摘要:目录类型断言的基本用法处理多种可能的类型获取接口的实际类型总结 在Go语言中,如果你想从接口类型的值中提取实际类型,可以使用类型断言(type assertion)。类型断言允许你检查接口变量的实际类型并将其转换为该类型。 类型断言的基本用法 假设你有一个接口类型的变量 i,你可以使用类型断言来检查
阅读全文
摘要:目录%v%+v%#v 在 Go 语言中,fmt 包提供了格式化字符串的功能,类似于 C 语言的 printf 函数。fmt 包中的 %v、%+v 和 %#v 是用于格式化输出的占位符,它们各自有不同的用途。 %v 含义:%v 表示以默认格式(值)输出变量。对于基本类型如整数、浮点数等,它会直接输出其
阅读全文
摘要:目录接口转结构体结构体转接口使用ok-idiom进行安全的类型断言 在Golang中,接口和结构体之间的转换涉及到类型断言和类型断言的操作符。 接口转结构体 如果我们有一个接口变量,并且我们知道它的内部具体类型,我们可以使用类型断言来将其转换为该具体类型的结构体。 package main impo
阅读全文
摘要:[toc] 文档 https://go-zero.dev/
阅读全文
摘要:目录背景介绍学习资料源代码 背景介绍 由于工作需要,需要开发高并发的golang服务器。作为一个golang小白,选择一个好的框架既是对项目的负责,也是一个学习的过程。 之所以选择Zinx框架,是因为其完整的文档和视频讲解,这对一个初学者来说是非常友好的 学习资料 Golang轻量级并发服务器框架z
阅读全文
摘要:虽然我们可以在Go源码文件中直接定义C类型、变量和C函数,但从代码结构上来讲,在Go源文件中大量编写C代码并不是Go推荐的惯用法。那么如何将C函数和变量定义从Go源码中分离出去单独定义呢?我们很容易想到将C的代码以共享库的形式提供给Go源码。 Go提供了#cgo指示符,可以用它指定Go源码在编译后与
阅读全文

浙公网安备 33010602011771号