Golang入门及进阶
文章平均质量分 85
Golang入门及进阶
BoringError
字节跳动后端工程师 | 持续学习,保持敬畏
展开
-
Golang:微服务常用代码分层结构
代码分层结构是一个老生常谈的话题,好的代码结构能够使得系统易于理解、开发及维护,如果代码结构很混乱就会使得不同层级的代码块耦合,导致难以维护和拓展。原创 2023-09-02 17:57:50 · 1828 阅读 · 0 评论 -
Golang:reflect反射的使用例子
reflect包定义了“反射”相关能力,“反射”在计算机学中是指计算机程序在运行时(runtime)可以访问、检测和修改它本身状态或行为的一种能力。基于反射特性可以通用化地解决一些需要频繁修改代码及硬编码问题,但是执行效率会被降低。原创 2023-02-20 09:22:55 · 521 阅读 · 0 评论 -
Golang原理分析:闭包及for range延迟绑定问题原理及解决
当一个函数引用了环境的变量,被引用的变量与该函数同时存在组成的系统,被称为闭包。原创 2022-12-17 18:32:54 · 1104 阅读 · 0 评论 -
Golang原理分析:切片(slice)原理及扩容机制
Go切片的特性:切片的本质是引用底层数组头指针+当前切片长度+底层数组大小:即array、len和cap:使用时通过make关键字来进行初始化切片分配一个新的底层数组,或者是基于指定的数组进行切片化。原创 2022-12-04 19:17:02 · 2118 阅读 · 0 评论 -
Golang开发习惯:变量、常量声明&使用惯例
Golang开发中,可遵守简单且一致的命名原则,力求命名精简、易懂和一致。变量声明已存在类型信息时,不要重复类型信息:使用驼峰形式来声明变量,而不是下划线形式:常量声明使用驼峰形式来声明变量,而不是下划线形式:对于专有名词或特定常量,可使用全大写形式:原创 2022-12-04 12:29:26 · 698 阅读 · 0 评论 -
Golang源码分析:golang/sync之singleflight
golang/sync库拓展了官方自带的sync库,提供了errgroup、semaphore、singleflight及syncmap四个包,本次分析singlefliht的源代码。singlefliht用于解决单机协程并发调用下的重复调用问题,常与缓存一起使用,避免缓存击穿。原创 2022-11-06 16:18:02 · 578 阅读 · 0 评论 -
Golang源码分析:golang/sync之errgroup
golang/sync库拓展了官方自带的sync库,提供了errgroup、semaphore、singleflight及syncmap四个包,本次先分析第一个包errgroup的源代码。errgroup提供了类似于WaitGroup的组织子任务运行的能力,但是提供了错误处理和通过ctx取消子任务的能力。原创 2022-10-30 17:41:16 · 772 阅读 · 0 评论 -
Golang源码分析:本地缓存库cache2go
cache2go是一款由golang实现的本地缓存库,提供并发安全的读写操作,具有过期时间控制等特性。原创 2022-10-19 12:27:06 · 1100 阅读 · 0 评论 -
Golang-go mod download 出现 dial tcp 34.64.4.17:443: i/o timeout
go mod 是 golang 1.12 推出的包管理工具,具有包依赖管理、版本管理、打包等功能,类似于 Java 生态中的 Maven (不得不说 Maven 真好用)。在使用的过程中遇到了 go mod download 时的 dial tcp 34.64.4.17:443: i/o timeout 问题,这里记录下解决的过程。原创 2020-10-16 15:35:24 · 7287 阅读 · 0 评论 -
Golang-使用Starter模式来实现项目全局配置初始化
最近在学习慕课网上的一门Golang实战课程,学到了一种类似于Java SpringBoot的Starter的项目编程结构,使用这种结构来作为项目的启动模板可以很方便地使用全局配置文件(yaml、properties等)配置和管理所需要的框架配置,所以重新把代码梳理了一下,下次有需要时可直接作为脚手架用于构建项目。原创 2020-11-11 19:06:37 · 1645 阅读 · 0 评论 -
Golang:gomonkey ApplyMethod 失效解决方式
记录一次gomonkey ApplyMethod 失效问题的解决方式。原创 2021-09-15 16:47:38 · 8711 阅读 · 5 评论 -
Golang并发编程:GPM协程调度模型原理(源码解析)
Golang如何调度百万级协程的?协程如何创建,如何运行?万字长文源码解析为你解惑。原创 2021-08-15 15:29:15 · 736 阅读 · 0 评论 -
Golang-go mod 是如何管理依赖的?一些常见问题的解决方式
Go modules依赖构建的过程是依赖图深度优先遍历的过程,首先会以第一层直接依赖作为起始遍历节点,假设一个go modules依赖情况如下,那么会从A 1开始遍历,找到A 1的go.mod文件中定义的包名和版本号:B 1.2以及C 1.2,接着顺着B 1.2的go.mod找到D 1.3,借助C 1.2的go.mod找到D 1.4,然后找到E 1.2,就可以得到依赖关系,如文中所示。原创 2021-08-09 23:01:21 · 2639 阅读 · 2 评论 -
Golang并发编程-Channel的使用场景分析
Channel是Go中重要且独特的一种并发编程原语,借助其线程安全和阻塞的特性,可以实现信息传递、信号通知、互斥锁、任务编排等场景。原创 2021-07-25 11:20:53 · 2018 阅读 · 2 评论 -
Golang并发编程-GPM协程调度模型原理及组成分析
Golang为了减少操作系统内核级线程上下文切换的开销以及提升调度效率,提出了GPM协程调度模型,GPM模型借助了用户级线程的实现思路,通过用户态的协程调度,能够在线程上实现多个协程的并发执行。GPM三个字母分别表示的是Goroutine、Processor及Machine。Goroutine代表着Golang中的协程,通过Goroutine封装的代码片段将以协程方式并发执行,是GPM调度器调度的基本单位。Processor代表执行Goroutine的上下文环境及资源,是GPM调度器中关联内核级原创 2021-06-05 19:20:04 · 2642 阅读 · 1 评论 -
Golang表格驱动测试
一、单元测试1.0 go testgo test命令是一个按照一定的约定和组织来测试代码的程序。在包目录内,所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。在*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻...原创 2019-11-07 23:24:52 · 734 阅读 · 0 评论 -
Golang与Java各方面使用对比(上)
本文只对比Golang与Java的基本情况、基本使用、结构体函数及指针三块内容,下一篇文章会对比面向对象、异常处理、并发编程及垃圾回收的差异。原创 2020-10-04 16:42:54 · 16566 阅读 · 8 评论 -
Golang与Java各方面使用对比(下)
本文是Golang与Java对比的第二篇,主要对比Golang与Java在面向对象、异常处理、并发编程及垃圾回收方面的差异。原创 2020-10-05 17:25:01 · 5999 阅读 · 4 评论 -
Golang核心知识总结
第一篇:Go语言简介及特性原创 2018-11-09 20:29:27 · 2110 阅读 · 0 评论 -
Golang(3)-变量与常量的定义
文章目录一、变量1.1、变量声明1.2、变量初始化1.3、变量赋值1.4、匿名变量二、常量2.1、字面常量2.2、常量定义2.3、预定义常量更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页变量是几乎所有编程语言中最基本的组成元素。从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块...原创 2018-11-10 11:24:19 · 1591 阅读 · 0 评论 -
Golang(4)-数据类型
文章目录一、布尔类型二、整型三、浮点型四、字符串4.1、字符串操作4.2、字符串遍历五、数组5.1、元素访问5.2、值类型六、数组切片6.1、创建数组切片6.2、元素遍历6.3、动态增减元素6.4、追加元素七、map7.1、map声明7.2、创建7.3、元素赋值7.4、元素删除7.5、元素查找更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页Go语言内置以下这...原创 2018-11-10 12:02:43 · 773 阅读 · 0 评论 -
Golang(5)-函数和错误处理
可能很多习惯用C或Java的朋友发现,Add方法是以大写开头的,这并不符合驼峰式方法命名的规范,但在Go语言中,**以名字以大写开头的函数表示可被包之外的代码去调用,而以小写开头的函数则表明只能被本包调用,相当于Java中的private关键字的作用。**错误处理是学习任何编程语言都需要考虑的一个重要话题。在早期的语言中,错误处理不是语言规范的一部分,通常只作为一种编程范式存在,比如C语言中的 errno 。但自C++语言以来,语言层面上会增加错误处理的支持,比如异常(exception)的概念和 try-原创 2018-11-10 23:20:31 · 882 阅读 · 0 评论 -
Golang(2)-类型系统
文章目录一、什么是类型系统1.1、Go语言的类型系统1.2、Java语言的类型系统二、为类型添加方法2.1、为基本类型添加方法2.2、传递指针参数和值参数的区别三、结构体3.1、结构体的定义3.2、结构体的初始化3.3、可见性更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页对于面向对象编程的支持Go 语言设计得非常简洁而优雅。简洁之处在于,Go语言并没有沿...原创 2018-11-11 16:45:59 · 760 阅读 · 0 评论 -
Golang(6)-协程和通道
文章目录一、协程1.1、goroutine简单使用二、并发通信2.1、传统并发通信方式2.2、Go的并发通信方式三、channel3.1、基本语法3.2、select3.3、缓冲机制3.4、超时机制3.5、关闭channel四、同步锁和读写锁更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页优雅的并发编程范式,完善的并发支持,出色的并发性能是Go语言区别于其他语...原创 2018-11-13 18:00:07 · 1597 阅读 · 1 评论 -
Golang(5)-接口
文章目录一、其他语言的侵入式接口二、 Golang的非侵入式接口三、 接口判断四、类型查询五、接口组合六、Any 类型更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页一、其他语言的侵入式接口Go语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。在Go语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声明你的...原创 2018-11-11 21:02:31 · 797 阅读 · 0 评论 -
Golang(7)-net/http包的使用
文章目录一、net/http包1.1、Get请求1.2、Do方法1.3、Post请求1.4、PostForm方法更多关于Golang核心编程知识的文章请看:Golang核心编程(0)-目录页golang可以快速方便地实现简单的爬虫,本次我将使用net/http包、goquery库,具体的使用大家可以查询文档说明,本文只做一个简单的介绍。最后以一个爬取CSDN的推荐文章列表的爬虫来演示go...原创 2018-11-15 23:08:06 · 2608 阅读 · 0 评论 -
Golang(8)-goquery库的使用
文章目录一、goquery库的安装二、goquery的使用三、爬取CSDN首页文章3.1、需求分析3.2、分析当前页面的html文档四、爬虫完整程序goquery是golang的一个爬虫常用第三方库,它主要的作用是处理html文档,将其我们需要的内容进行筛选处理。goquery是golang领域的jquery,它的使用和jquery的选择器有十分相似,如果你学过jquery,那么将十分容易...原创 2018-11-16 11:44:52 · 3183 阅读 · 0 评论 -
Golang(1)-简介及特性
文章目录一、Golang简介1.1、什么是Golang1.2、使用Golang完成的著名项目1.3、Golang的特性二、Golang的特性概述2.1、自动垃圾回收2.2、丰富的内置类型2.3、函数多返回值2.4、错误处理2.5、匿名函数和闭包2.6、类型和接口2.7、并发编程2.8、反射2.9、语言交互性2.10、丰富开源库支持Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针...原创 2018-11-09 13:32:50 · 3990 阅读 · 0 评论