随笔分类 - golang
golang相关基础
摘要:channel的整体结构图 简单说明: buf是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表 sendx和recvx用于记录buf这个循环链表中的发送或者接收的index lock是个互斥锁。 recvq和sendq分别是接收(<-channel)或者发送(channel <-
阅读全文
摘要:make和new的区别 (√) make和new都是用于创建新对象的内置函数, 但make用于创建引用类型的对象,返回的是一个已经初始化了的对象; 而new用于创建值类型的对象,返回的是一个指向新对象的指针。 1.初始化的区别 make和new都是golang用来分配内存的內建函数,且在堆上分配内存
阅读全文
摘要:map定义 map是一种key-value键值对的存储结构,其中key是不能重复的,其底层实现采用的是hash表。 map的数据结构 首先我们先列出源码结构关键字段,实现在 src/runtime/map.go: type hmap struct { count int // 元素的个数 B uin
阅读全文
摘要:前言 Golang sync包提供了基础的异步操作方法,包括互斥锁Mutex,执行一次Once和并发等待组WaitGroup。 本文主要介绍sync包提供的这些功能的基本使用方法。 Map:自带锁的map Cond:信号量 Locker:锁接口 Mutex: 互斥锁 RWMutex:读写锁 Once
阅读全文
摘要:go语言关键字 1.概览 Go 共有 25 个保留关键字,各有其作用,不能用作标识符。 1.break:用于跳出循环 2.default: 用于选择结构的默认选项(switch、select) 3.func:用于函数定义 4.select:Go 中的一个控制结构,类似于用于通信的 switch 语句
阅读全文
摘要:一、栈用于存储局部变量和函数调用信息 栈是一种后进先出(LIFO)的数据结构,主要用于存储函数调用的上下文信息以及局部变量。栈的特点是: 自动管理:栈内存由编译器自动分配和释放。 高效:由于栈内存的分配和释放是自动完成的,速度非常快。 有限空间:栈的大小是有限的,一般由操作系统规定。 实例说明:当一
阅读全文
摘要:内存对齐及填充规则 各类型占内存大小 数据类型 内存大小(byte) int 8 int8 1 int16 2 int32 4 int64 8 string 16 bool 1 [3]int32 12 [3]int64 24 []string 24 map[string]bool 8 map[str
阅读全文
摘要:一、垃圾回收 什么是垃圾回收? 垃圾回收(GC,garbage collection)是自动内存管理的一种形式,通常由垃圾收集器收集并适时回收或重用不再被对象占用的内存,比如众所周知的Java语言就能很好的支持GC。后起之秀——Go语言也同样支持垃圾回收,它使得Go程序员在编写程序的时候不再需要考虑
阅读全文
摘要:1. 结构体标签(tag)基本用法 tag的格式 tag是一个字符串,由空格分隔的键值对组成。键值对的格式为: key:value key是标签的名称,value是标签的值。 结构体标签以//跟随字段定义,形如name:"value"。在JSON序列化场景中,最常用的标签是json,它指导JSON包
阅读全文
摘要:一、什么是内存泄漏 内存泄漏是指程序在运行过程中未能及时释放已经不再使用的内存,导致内存资源无法被回收,最终可能导致系统内存耗尽、性能下降甚至崩溃。Go 语言通过垃圾回收(GC)机制可以自动管理内存,但是在一些特定的情况下,仍然可能出现内存泄漏。 二、Golang的内存管理机制 Golang使用垃圾
阅读全文
摘要:0.前言 回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,回调函数是一个被传递给另一个函数的函数,它在该函数的某个时间点被调用,以完成某些特定的操作或任务。 在Go语言中,可以将函数直接作为参数传递给另一个函数,并在需要时被调用,这样大大的加强了代码的可定制化,但是也一定程度上减少
阅读全文
摘要:1. 简介 在 Go 语言中,context 包主要用于在 并发编程 中控制和管理 goroutine 的生命周期。它提供了一种机制,可以通过传递 context.Context 来协调多个 goroutine,特别是在需要取消操作、超时控制和传递共享数据时。 2. 常见用法 2.1 控制gorou
阅读全文
摘要:一、gmp模型概念 如下图所示 1.1 g (Goroutine) g 是 goroutine 的缩写,是 Go 语言中对协程的抽象。它代表了一个可以被调度和执行的任务。 G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象。 g 只有绑定到 p 上后,才能被调度执行。这意味着
阅读全文
摘要:在 Go 语言中,sync.WaitGroup 是用于等待一组 Goroutine 完成执行的同步工具,常用于主 Goroutine 协调多个子 Goroutine 的生命周期。以下是其核心用法及注意事项: 1. 基本用法 package main import ( "fmt" "sync" "ti
阅读全文
摘要:golang多种退出模式 1. 基于 channel 的退出模式 通过共享的 channel 发送退出信号,其他 goroutine 监听该信号并决定何时退出。 示例: package main import ( "fmt" "time" ) func worker(id int, quit cha
阅读全文
摘要:以下是针对每个问题的详细解答,涵盖基础、高级特性和底层原理: 一、基础概念 1. 结构体定义与初始化 定义: type User struct { ID int Name string } 初始化方式: 值初始化:u := User{ID: 1, Name: "Alice"} 指针初始化:u :=
阅读全文
摘要:在 Go 语言中,优雅退出程序需要确保程序在收到终止信号(如 SIGINT 或 SIGTERM)时,能安全完成资源清理(如关闭数据库连接、释放文件句柄、保存状态等),再退出。以下是实现优雅退出的完整方案: 1. 核心实现步骤 (1) 监听系统信号 使用 os/signal 包监听操作系统信号(如 C
阅读全文

浙公网安备 33010602011771号