
Go 基础
文章平均质量分 64
开心码农1号
我很懒,我不想添加简介!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Go Modules 的基本使用
在 Go Modules 项目中,首次运行时下载依赖包的正确流程需要根据项目情况区分处理。后续开发中,每次添加或移除依赖后都应运行该命令,确保依赖与代码一致。将这两个文件加入版本控制,确保团队成员和 CI 环境使用相同的依赖版本。会自动分析代码中的导入语句,添加缺失的依赖,移除未使用的依赖,并更新。,它会自动分析代码并下载所需的依赖,同时保持。创建离线依赖副本(适用于无法联网的环境)。显示项目的依赖关系(直接依赖和间接依赖)。中记录的哈希值一致,防止篡改。中声明的所有依赖到本地缓存(检查下载的依赖是否与。原创 2025-05-09 21:26:25 · 1072 阅读 · 0 评论 -
Go语言中的interface
Go 语言中的 interface 是一种抽象类型,它定义了一组方法签名,但不包含方法的实现。任何类型只要实现了 interface 中定义的所有方法,就被认为实现了该 interface。1、接口底层接口是引用类型。接口底层包含两个指针,一个指向具体类型信息另一个指向具体的值(或者是指向值的指针)。当你把一个实现了接口的值赋值给接口变量时,实际上是在复制这两个指针,而不是复制底层的值。空接口是一种特殊的接口类型,它不包含任何方法签名。原创 2025-03-28 06:30:00 · 383 阅读 · 0 评论 -
Go语言中的切片、数组有什么区别?
数组作为参数传递时是值传递,会复制整个数组;切片作为参数传递时是引用传递,只复制切片的头信息。:数组的长度是固定的,在定义时需要指定长度;而切片是动态的,不需要指定长度。:数组是值类型,在栈上分配内存;切片是引用类型,在堆上分配内存。原创 2025-03-23 22:56:27 · 201 阅读 · 0 评论 -
Go的并发模型?其和线程区别?
1、Go的并发模型Go的并发模型,通过 goroutine 和 channel 来实现并发:goroutine:协程,是 Go 语言轻量级的线程,由 Go 运行时管理,其栈内存可以动态伸缩,初始时仅需 2KB,创建和销毁的开销极小。:用于在 goroutine 之间进行通信和同步,保证数据的安全传递。Goroutine:由Go语言的运行时系统创建和销毁,创建开销小,可以在Go应用程序中创建大量的Goroutine而不会显著影响性能。线程。原创 2025-03-22 07:45:00 · 249 阅读 · 0 评论 -
浅谈Go垃圾回收机制-面试笔记
全局变量在程序运行期间通常不会被回收,因为它们在整个程序的生命周期内都处于可达状态。代表已被垃圾回收器访问过,但它引用的其他对象尚未全部被访问完的对象。表示已被垃圾回收器访问过,并且其引用的所有对象也都已被访问过的对象。的所有对象,将那些仍然是白色的对象回收,释放它们占用的内存空间。表示尚未被垃圾回收器访问过的对象。初始时,所有对象默认都是白色。原创 2025-03-21 07:00:00 · 807 阅读 · 0 评论 -
go slice切片的理解
切片slice是对数组连续片段的引用,所以切片是一个引用类型。切片的结果定义是一个结构体:type slice struct{array unsafe.Pointerlen intcap int}array是指向数组的指针,cap总是大于等于len的。利用构造底层数据结构体,来造个切片:1、可以go内存地址中构造个切片:构造个虚拟结构体,把切片数据结果拼出来。s := ([]byte)(unsafe.Pointer(&结构体对象))2、还可以利用反射,go的反射中就存在一原创 2021-07-02 15:04:08 · 174 阅读 · 0 评论 -
Go string 字符串底层逻辑
在这个例子中,Go 语言会重新分配一块大小为 11 字节的内存区域,并将原来的字符串 "hello" 的内容复制到新区域中,再追加上 " world" 字符串的字节序列。在这个例子中,Go 语言会分配一块大小为 5 字节的内存区域,用来存放字符串 "hello" 的字节序列。当你创建一个字符串时,Go 语言会在内存里分配一块连续的区域,用来存放字符串的字节序列。在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。原创 2025-03-14 16:55:25 · 356 阅读 · 0 评论 -
Go语言里面的堆跟栈 + new 和 make + 内存逃逸 + 闭包
栈主要用于存储函数调用的上下文信息,具有自动分配和释放、内存空间连续、操作效率高但大小有限的特点;堆主要用于动态内存分配,具有动态分配和释放、内存空间不连续、大小灵活但访问速度相对较慢的特点。在 Go 语言中,编译器会根据变量的类型和使用场景自动决定将变量分配到栈上还是堆上。new:主要用于为任意类型分配零值内存并返回指针,通常用于需要显式管理指针的场景。make:专门用于创建并初始化slicemap和channel这三种引用类型,会完成必要的初始化操作,不能用于其他类型。原创 2025-03-07 00:15:54 · 835 阅读 · 0 评论 -
Go语言 linux安装
1、下载go安装包载go的linux安装包,比如:go1.15.6.linux-amd64.tar.gz2、解压解压至/usr/local下,命令:tar -zxvf go1.15.6.linux-amd64.tar.gz解压之后,查看版本:/usr/local/go/bin/go version3、创建go工作目录在/home目录下新建go目录,在go目录下分别新建3个子目录: src—里面每一个子目录,就是一个包,包内是Go的源码文件...原创 2022-04-20 18:17:19 · 4294 阅读 · 0 评论 -
go并发跟并行的理解
go并发:通常程序会被编写成一个顺序执行的独立执行代码,这被称为串行程序。并行执行两个及以上的串行程序的综合体成为并发程序。Go语言中并发指的是让某个函数独立于其他函数运行的能力。当一个函数创建为goroutine时(即,函数前面加关键字go),Go会将其视为一个独立的工作单元,这单元会先放到全局运行队列中,等待Go运行时的调度器进行调度,把他们分配给其中的一个逻辑处理器,并放到这个逻辑处理器对应的本地运行队列中,等待逻辑处理器执行。这一套管理、调度、执行goroutine的方式称之为Go的并发。原创 2021-06-04 18:33:35 · 823 阅读 · 0 评论 -
Init、break、continue等语法的使用
init函数:每个包中可以包涵任意多个init函数,这些函数会在程序执行开始的时候被调用,init函数会在main函数、设置包、初始化变量或者其它要在程序运行前优先完成的引导工作。程序编译时,优先执行导入包里的所有init函数,再执行本包内的init函数。for循环:go的for循环中不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化变量。init初始赋值表达式只执行一遍,循环控制条件、post(给控制变量增量或者减量)每循环一次,都要执行一次。...原创 2021-06-09 16:31:48 · 550 阅读 · 0 评论