![](https://img-blog.csdnimg.cn/fd223e0c5b034f1d83427a5be4e31d2d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
golang学习
文章平均质量分 96
从简单入门到上手开发,每一篇就是一个大知识点,一篇一篇写完了,就掌握 Go 了。
YPhen
公众号同步【YPhen聊码】同步更新!
无需关注,无需知识付费,纯技术分享;博客提升自我,帮助他人,若有益,吾之幸,因吾价值尚存 !
展开
-
GO 面试题进阶篇【面试官这样问】
此片进阶篇,主要对 Go 语言的有深度的面试题总结,并且持续更新。原创 2024-04-16 15:18:12 · 792 阅读 · 1 评论 -
GO 面试题基础篇【面试官这样问】
这不,最近又是金三银四了, gopher 们又双叒叕开启了开挂模式,疯狂刷面试题,疯狂投简历,疯狂面试。既然如此,针对于go语言,那面试官们平时喜欢问什么呢?面试官这样问。原创 2024-04-02 09:00:42 · 1326 阅读 · 0 评论 -
GO学习之 单例模式 sync.Once
在 JAVA 开发中,Spring 框架使用了 单例模式 来创建实体 Bean,我们在开发中也是多用单例模式来避免实例的重复创建。在 Go 标准库中,sync.Once 的 “仅仅执行一次” 的特性被多用于初始化操作或者是资源清理的过程中,以避免重复执行导致性能不是最佳。原创 2023-12-02 16:36:28 · 1176 阅读 · 0 评论 -
GO学习之 条件变量 sync.Cond
sync.Cond实例的初始化需要一个满足实现了sync.Locker接口的类型实例,通常使用 sync.Mutex。条件变量需要互斥锁来同步临界区数据。各个等待条件成立的 goroutine 在加锁后判断条件是否成立,如果不成立,则调用 sync.Cond 的 Wait 方法进去等待状态。Wait 方法在 goroutine 挂起前会进行 Unlock 操作。原创 2023-12-02 12:44:33 · 1249 阅读 · 2 评论 -
GO学习之 互斥锁、读写锁该如何取舍
sync包提供了两种锁,互斥锁(Mutex)和 读写锁(RWMutex),一般有推荐用 互斥锁,它常被用来对结构体对象的内部状态、缓存等进行保护,使用最为广泛。相比之下,读写锁则使用率就不是那么多了,但既然存在,那就有存在的道理和使用场景。原创 2023-11-12 11:15:37 · 465 阅读 · 0 评论 -
GO学习之 同步操作sync包
Go 语言提倡 不要通过共享内存来通信,而是要通过通信来共享内存,一般的场景中,先使用 CSP 并发模型实现,就是 goroutine + channel 编程。但也有一些特殊的场景,需要 sync包 提供的低级同步原语。在 Go 中,channel 属于高级同步原语,其实现是建立在低级同步原语之上的,所以 channel 自身的性能与低级同步原语相比要稍微逊色一点了。因此,在需要需要高性能的情况下,sync包 提供的低同步原语更为重要。原创 2023-11-04 17:29:40 · 353 阅读 · 0 评论 -
GO学习之 通道(nil Channel妙用)
对一个 nil channel 执行获取操作,该操作会被阻塞 ,因此已经被置为 nil 的 c1 c2 再也不会被 select 选中执行了。原创 2023-10-29 17:40:38 · 596 阅读 · 1 评论 -
GO学习之 goroutine的调度原理
Go 语言的设计哲学之一是 “原生并发,轻量高效”。Go 并未使用操作系统线程作为分解后的代码片段的基本执行单元,而是实现了 goroutine 这一由Go运行时负责调度的用户层轻量级线程为并发程序设计提供原生支持。goroutine相比传统操作系统线程而言具有如下优势:1. 资源占用小,每个 goroutine 的初始栈大小仅为 2KB。2. 由 Go 运行时而不是操作系统调度,goroutine 上下文切换代价小。3. 语言原生支持:goroutine 由 Go 关键字函数或方法原创 2023-10-21 16:50:37 · 664 阅读 · 0 评论 -
GO学习之 远程过程调用(RPC)
RPC 是远程过程调用(Remote Procedure Call, RPC)是一个计算机通信协议。RPC 协议允许一台计算机的程序调用另一台计算机的子程序,我程序员无需要额外地为这个交互编程。RPC 允许应用程序调用另一个地址空间(通常是远程服务器)上的函数和方法,就像本地调用一样。RPC 的核心思想就是使远程调用过程对开发者透明,就像本地调用一样。原创 2023-09-16 17:32:44 · 760 阅读 · 2 评论 -
GO学习之 消息队列(Kafka)
Kafka 是由 Apache 软件基金会开发和维护的开源的、分布式的消息队列系统,用于高吞吐量、持久性的消息传递。主要用于实时数据处理,可以处理海量的数据流,并将数据流可靠地传递给多个消费者应用程序。首先用 ``sarama.NewConfig()`` 来创建一个 config 配置实体,然后通过 sarama.NewSyncProducer() 来创建一个生产者,用 &sarama.ProducerMessage{} 生成一个消息,通过 producer.SendMessage(message)。消原创 2023-09-03 10:41:58 · 1067 阅读 · 2 评论 -
GO学习之 搜索引擎(ElasticSearch)
使用 Go 语言操作 ElasticSearch 具有高性能、并发性和易维护性等优势,适用于需要快速、高效处理大量数据的场景。不过,也需要根据项目需求和团队技术栈的考量来决定是否选择 Go 语言来操作 ElasticSearch。原创 2023-08-27 22:56:25 · 1319 阅读 · 0 评论 -
GO学习之 数据库(Redis)
此篇仅仅用了 github.com/go-redis/redis 库对 Redis 的基本操作针对不同的数据结构进行了简单的操作,其实如若对 Redis 的命令熟悉,那用 Go 来操作 Redis 就不复杂了。总之,Redis 是一个功能丰富、高性能的内存数据存储系统,适用于缓存、数据库和消息队列等多种应用场景。在使用 Redis 缓存时,需要考虑数据存储需求、缓存失效策略等因素,以实现更高效的数据访问和管理。原创 2023-08-20 13:38:01 · 757 阅读 · 0 评论 -
GO学习之 数据库(mysql)
对数据库操作,少不了各个语言对数据库操作的驱动,就像 JAVA 中有 mysql-driver 的驱动包,拉取下来就可以通过JDBC 对数据库操作了,当然 Spring、Mybatis 等框架也提供了对数据库很方便的操作。那在 Go 中也是提供了驱动 ``github.com/go-sql-driver/mysql``,我们通过 go get 拉取驱动来进行CRUD操作。原创 2023-08-19 17:59:16 · 711 阅读 · 0 评论 -
GO学习之 微框架(Gin)
什么是微框架(Gin),Gin 框架是一个轻量级的,高性能的 Web 框架,专门为构架快速的 Web 应用和 API 而设计。它是基于 Go 语言的标准库开发,提供简单易用的 API 和其他更多的功能,开发者可以快速的构建出 Web 应用并且部署。通过 go get github.com/gin-gonic/gin 来安装 Gin 框架到开发者环境,通过 框架提供的 路由和处理函数来快速开发 API,接受参数通过函数处理业务逻辑,然后通过 Gin 框架提供的 JSON、String、HTML等方法返回给前原创 2023-08-12 19:05:33 · 1037 阅读 · 0 评论 -
GO学习之 网络通信(Net/Http)
Go 语言还有许多第三方的 HTTP 客户端和服务器库,可以帮助我们更方便地实现 HTTP 请求和服务。一些常用的 HTTP 客户端库有 `github.com/go-resty/resty`、`github.com/parnurzeal/gorequest` 等;HTTP 服务器库有 `github.com/gin-gonic/gin`、`github.com/gorilla/mux` 等原创 2023-08-07 00:18:11 · 1390 阅读 · 0 评论 -
GO学习之 接口(Interface)
那在 Go 语言中也有 `interface`,我们可以通过 `interface`来定义一种对象的行为规范,也就是定义了一组行为,不需要关注这些规范如何实现,我们可以通过接口将代码解耦,使得不同模块之间依赖减少,提高代码可维护性。如果一个类型实现了接口中定义的所有方法,就视为该类型实现了接口如果一个类型实现了某个接口,那么可以将该类型的实现赋值给接口类型变量一个类可以实现多个接口原创 2023-08-06 15:54:44 · 881 阅读 · 0 评论 -
GO学习之 函数(Function)
在 Go 语言中,函数(Function)是一种可执行的代码块(对特定功能进行提取,形成代码片段),用于执行特定的任务或操作。函数是 Go 语言中的基本组件,实现了模块化和复用的机制,让代码更加结构化和可维护。无需声明原型,支持不定参数,支持多返回值,支持命名返回参数,支持匿名函数和闭包函数也是一种类型,可以把一个函数赋值给一个变量原创 2023-08-05 17:02:44 · 1037 阅读 · 0 评论 -
GO学习之 协程(goroutine)
在 Go 语言中,goroutine 是一种非常轻量的执行单元,有 Go 运行是(runtime)进行调度,不是有固定大小的线程来处理的。与传统线程相比,goroutine的创建和切换开销很小,因此可以创建大量的 goroutine 来并行执行任务,而不会造成太大的系统负担。* goroutine 更像是一种高效的协程,它在并发编程中提供了轻量且较高的方式来处理并发,而不需要显式地创建和管理线程池。原创 2023-07-31 15:33:49 · 2171 阅读 · 1 评论 -
GO学习之 通道(Channel)
Go 语言中的通道(Channel)是一种特殊的类型。见名知意,一边进来另一边出去,或者说通道就像一个队列,总是遵循 先入后出(First In Frist Out) 的规则,以便能保证顺序。每个通道都是一个具体类型的管道,也就是在声明的时候需要指定元素的数据类型一样。原创 2023-07-29 18:49:23 · 974 阅读 · 1 评论 -
GO学习之 结构体 操作
此篇博客就来了解 go 语言中是如何进行自定义类型的,就像 JAVA 中可以定一个实体 Bean (class Persion)来封装数据。Go 语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体(struct)。使用 type 和 struct 关键字来定义结构体;类型名:自定义结构体的名称,同一个包内不能重复,就像JAVA 的类名,同一个包原创 2023-07-23 17:20:48 · 441 阅读 · 0 评论 -
GO学习之 Map 操作
什么是 Map 呢?就是一种无序的以 key-value 键值对方式存储的数据结构,在 Go 语言中,Map也一样,类似于哈希或者字典,是引用类型,所以必须初始化才能使用,适用于快速查找和存储键值对的场景。>Map 是一种引用类型,需要 make() 函数来创建, 这样来定义 **map[键类型]值类型**,例如 **map[string]int** 表示键为字符串类型,值为整数类型的 map。原创 2023-07-22 11:12:12 · 471 阅读 · 0 评论 -
GO学习之切片操作
什么是切片呢?切片(Slice)是 Go 语言中的一种动态长度的数据结构,它是对数组的一个连续片段的引用,并且提供了一种方便且灵活的方式来操作和管理一组相同类型的元素。切片的定义:1. 切片由三部分组成:指针、长度 和*容量。2. 指针指向数组的第一个元素,切片的长度表示切片表示当前存储元素的个数,容量表示切片底层数组的长度。原创 2023-07-16 11:28:22 · 28750 阅读 · 3 评论 -
GO学习之入门语法
首先,了解 Go 语言的基本概念和其用途。Go 是一种静态类型、编译型的编程语言,旨在提高软件开发的效率。它特别适用于并发和分布式系统开发。学习 Go 语言的基础语法,包括变量、常量、数据类型、函数、控制结构(如 if-else 和循环)、指针、结构体和接口等。原创 2023-06-24 16:00:52 · 776 阅读 · 0 评论 -
GO学习之Hello World(环境搭建)
行业的发展和技术更新换代的速度,驱使着我们不断的学习新的技术,作为以JAVA为主要吃饭工具的我,如今也不得不在周末花时间看看被 “江湖人” 称后面会是主要流行的 GO 语言。那想要入门一个新的语言,开头总归是经典款 Hello World!GO 语言是在2007年由三个大佬(Robert Griesemer, Rob Pike, Ken Thompson)主导开发,于2009年11月正式开源的一个开源编程语言,上面的这只可爱的地鼠就是GO语言的代言鼠。原创 2023-03-25 19:52:46 · 1044 阅读 · 0 评论