- 博客(556)
- 收藏
- 关注
原创 Go进阶概览 -【7.1 反射机制与动态编程】
反射是Go语言的一项强大特性,使得程序可以在运行时检查和修改自身的结构和行为。反射机制的使用在一些动态编程场景中非常重要,但同时也带来了一定的性能开销。本节我们将深入解析Go的反射机制,探讨其在动态编程中的应用,以及反射对性能的影响。
2024-09-18 16:01:59 456
原创 Go进阶概览 -【第6章 Go程序的性能优化与调优】
在之前的学习中,其实我们已经基本将性能相关的内容讲的差不多了。所以在本章中,我们更多的是做一个总结,我们将探讨如何通过各种手段优化Go程序的性能。我们将介绍性能分析工具,讨论内存管理与CPU性能优化的方法,最后探索并发环境下的性能优化技巧。
2024-09-17 14:12:29 960
原创 Go进阶概览 -【5.5 并发编程中的常见模式与最佳实践】
在现代编程中,并发编程是提高程序性能和响应速度的关键技术之一。Go语言以其轻量级的协程和强大的并发支持,成为了处理并发任务的理想选择。本节将介绍Go语言中常见的并发编程模式,并探讨如何编写高效可靠的并发代码。
2024-09-16 17:31:35 457
原创 Go进阶概览 -【5.3 select的底层实现及工作原理】
select语句是Go语言中用于处理多个通道操作的一个强大工具,它能够在多个通道上同时进行非阻塞的选择操作。这对于实现并发程序的灵活性和复杂性处理非常有帮助。本节我们将详细探讨select的内部实现及工作原理。
2024-09-14 09:51:32 725
原创 Go进阶概览 -【5.2 channel的底层实现】
通道在并发编程中是比较常用的一个内容,在我们进行实际业务开发时会大量使用到。本节我们将针对通道的底层实现原理进行探讨学习,包括底层的结构、处理机制等内容
2024-09-14 09:49:15 883
原创 Go进阶概览 -【5.1 协程与调度器】
Go语言的协程是它的一大特性,通过协程可以快速实现并发,提高了开发者的工作效率。本节我们将深入探讨协程的底层实现原理以及调度实现,我们将了解到并发到底是怎么实现的、多个协程是怎么配合的。本节我们将以:服务员点餐的例子进行并行、并发、协程及调度器的讲解。
2024-09-13 11:14:34 1153 1
原创 Go进阶概览 -【4.3 编译器的优化与调试】
编译器优化在之前的章节我们有提到过,当时我们讲解了局部优化。本节我们将进行更多的讲解,了解编译器的优化也可以帮助我们提高开发效率,在开发中即解决一些使用问题。
2024-09-13 10:56:16 581
原创 Go进阶概览 -【4.2 Go语言的链接与加载】
Go语言中,链接与加载是将编译后的多个目标文件组合成一个可执行文件,并最终在运行时加载该文件到内存中执行的过程。在上节我们提到了汇编与链接,本节我们将详细探讨Go的链接与加载机制。
2024-09-12 10:50:56 656
原创 Go进阶概览 -【4.1 从代码到二进制:Go程序的编译过程】
本节我们将一起探索,Go程序在编译的时候都发生了什么、都做了哪些工作?通过本节的学习将对我们的日常编程规范、习惯起到一个正向的作用。关于编译过程,我们将会从词法分析、语法分析、语义分析以及中间代码生成等多个方面进行讲解。
2024-09-12 10:33:13 750
原创 Go进阶概览 -【3.4 内存模型与并发安全】
在很多文章中对于内存模型的描述都很抽象,看起来不知道说的是什么,大多都是直译过来的。一组规则或规范。这些规则的作用是:定义了在并发环境中,不同线程或协程对共享内存的操作顺序、可见性和一致性。它们确保了在多线程或多协程程序中,内存操作的行为是可预测和可靠的。所以如果内存模型这几个字不好理解的话,我们记为并发规则或者并发架构也不是不可以。
2024-09-11 14:08:11 1506 1
原创 Go进阶概览 -【3.3 Go语言的垃圾回收机制】
垃圾回收(Garbage Collection,简称GC)是自动管理内存的一种机制,目的是回收不再使用的内存,以避免内存泄漏。在Go语言中,GC主要用于管理堆内存,堆内存主要用于动态分配的数据,比如通过newmake等操作分配的内存。在C/C++等语言中,内存的分配和释放是由开发者手动管理的。而在Go语言中,GC机制会自动回收不再使用的内存,从而减少了手动管理的复杂性和错误的可能性。
2024-09-11 13:53:49 775
原创 Go进阶概览 -【3.2 内存逃逸与堆栈管理】
内存逃逸是我们比较容易遇到的一个问题,与程序的性能也息息相关,决定了程序的内存分配效率、内存占用情况。在之前的章节中我们讲解过了堆栈相关的知识,了解到了内存分配的机制。本节我们将针对内存逃逸、分析、优化等内容进行详细的讲解。
2024-09-10 14:23:10 1239
原创 Go进阶概览 -【3.1 内存分配与栈帧管理】
本节是本章后续学习的基础,在本节我们将会针对内存分配、栈与堆、栈桢等内容进行讲解。后续的内存逃逸分析、垃圾回收、并发安全等都会与本节密切关联,所以这一节需要我们进行一个详细的了解。
2024-09-10 14:14:40 1001
原创 Go进阶概览 - 【2.6 类型系统的安全与限制】
在之前的章节中,我们讲到了基础数据类型的内存布局、动态类型的底层结构及内存分配、切片及`map`的底层结构及原理。本节我们将针对类型系统的安全及限制进行探讨,主要针对设计原则、安全性、灵活性以及局限性进行探讨。
2024-09-09 11:34:42 673 1
原创 Go进阶概览 -【2.5 Map的工作原理】
map基本在每一种编程语言中都存在,并且他们的实现方式也是大同小异,底层原理也是有一些共通之处。本节将针对map的底层实现、性能优化等方面进行一个详细的讲解。在学习本节前,如果对哈希表还不了解,建议先去看一下哈希表的知识。
2024-09-09 11:33:29 835
原创 Go进阶概览 -【2.4 切片的结构与内存管理】
切片是我们日常使用比较多的一个结构,深入的了解它的结构对于我们提高程序性能也有比较大的帮助。本节我们将针对切片底层结构、扩容机制、底层数组进行讲解。
2024-09-08 21:55:39 1262
原创 Go进阶概览 -【2.3 接口与动态类型】
接口多用于框架开发、第三方对接等场景,使用接口我们可以灵活的实现一些动态的功能场景。本节我们将主要针对动态类型、接口内部实现机制、接口表与动态调用等内容进行讲解。本节代码存放目录为。
2024-09-06 09:59:42 1036
原创 Go进阶概览 -【2.2 结构体与方法集的实现】
结构体是我们在实际运用中使用比较多的一个概念,Go语言封装的比较简单,我们在使用的时候不需要关注太多的东西。但是如果对于性能有要求、需要开发框架时,我们还是需要对结构体进行一个深入的了解。本节我们将针对结构体的内存布局、接口实现及面向对象编程等进行讲解。
2024-09-06 09:58:38 1398
原创 Go进阶概览 -【2.1 基础类型与内置类型详解】
本节我们将对数据类型做一个整理,同时我们会针对基础数据类型的内存分配进行讲解。本节代码存放目录为 lesson1基础数据类型也就是在 语言中是由编译器直接支持的,具有确定的内存表示方式及操作符。基础类型的值通常是不可分割的(即原子的),并且它们直接与计算机硬件的基本操作相关。下表所示为 语言中的基础数据类型统计:内置类型指的是 语言标准库中直接提供的类型,包括所有基础类型以及一些更复杂的类型和数据结构。这些类型在语言中是 的,意味着它们无需用户自己定义,编译器和运行时环境直接支持它们。
2024-09-05 15:44:43 515
原创 Go进阶概览 -【1.2 Go语言的特性与简洁性】
在本节中,我们将从语言简洁性、并发支持以及内存管理三个方面来进行讲解。这三个东西基本上算是Go语言最为显著的特性,也是与其他语言最大的区别。
2024-09-05 15:43:27 549
原创 Go进阶概览 -【1.1 Go语言的设计初衷与发展历程】
Go语言是怎么产生的?Go语言的发展怎么样?两个方面进行探讨。通过本节的学习帮助我们了解Go语言的前世今生,也便于我们之后对于Go语言的理解。
2024-09-05 15:42:29 412
原创 Go进阶概览 -【序言】
一年前我基于初学者的角度,以自己的使用经验总结并编写了《Go,你也可以的!这本书主要是一本入门类的书籍,讲解了Go语言的一些基本知识及使用方法。继这本入门指南之后,我结合读者的反馈以及考虑到实际情况,我决定推出下一本书籍《Go进阶概览》。本书主要集中讲解了Go语言的各种底层原理以及实现方式,比较适合那些已具备Go语言基础并希望提高其在系统架构和性能优化方面能力的开发者。本书是您学习的一个引子,您将了解到关于Go语言的一些核心理念以及一些高效的设计模式。本书致力于帮助读者更加深入的了解Go。
2024-09-05 15:40:17 322
原创 【通用】- 工厂模式与策略模式的区别
目的不同:工厂模式主要是为了创建对象,让对象的创建与使用分离,支持灵活的扩展和替换对象;策略模式主要是为了隔离算法,提供相同行为的不同实现策略,并使得算法可以独立于客户端独立变化。应用场景不同:工厂模式常用于对象创建过程中业务逻辑较复杂的情况;策略模式常用于多种类似行为需要动态选择的情况。实现方式不同:工厂模式通过继承或接口实现,隐藏创建细节;策略模式通过定义接口或抽象类,封装一系列算法或行为。
2024-08-31 23:40:47 464
原创 【Android】- 秒开WebView:安卓性能优化攻略
在移动开发中,WebView是一个非常实用的组件,允许开发者在Android应用中嵌入网页。WebView的加载速度常常成为用户体验的瓶颈。本文将探讨如何优化WebView的启动速度,实现秒开的效果。
2024-08-31 23:32:35 389
原创 【Linux】- Linux性能调优技巧
在Linux系统管理中,性能调优是一项关键任务,旨在最大化资源利用效率,确保应用和服务运行顺畅。以下是一些基本的Linux性能调优技巧,可以帮助我们优化服务器性能。
2024-08-30 10:06:50 178
原创 Go,你也可以的!-【第9章 附录】
附录主要记录一些工具及开源库,这些库都是笔者开发/维护的。所以你可以使用这些库进行学习,当有问题时笔者也可以更快的进行解答。
2024-08-30 09:34:03 255
原创 Go,你也可以的!-【8.3 简单的命令行操作】
在大部分语言中,都会有命令行交互的场景。比如我实现了一个在Linux终端运行的小程序,那么我执行程序后需要我输入一些内容,之后进行一些计算及业务逻辑。
2024-08-29 10:51:16 358
原创 Go,你也可以的!-【8.2 简单的TCP示例】
`TCP`在我们的实际开发中也是必不可少的东西,我们的大部分业务都需要使用`TCP`实现。比如聊天软件、聊天室等,在`Go`语言中使用TCP也比较简单,我们接下来直接以代码示例进行说明。
2024-08-29 10:50:15 380
原创 Go,你也可以的!-【8.1 登录注册接口】
登录注册在我们的实际业务中是特别常见的东西,本节我们将从需求分析、需求实现等方面与您一起实现一个登录注册的业务流程。在这之前,如果您还没有接触过前后端的接口开发,那么我们建议您先去了解一下前后端分离的处理流程、请求流程。
2024-08-28 09:55:44 458
原创 Go,你也可以的!-【7.4 recover】
在前面的章节我们讲过了`panic`、`defer`,在其他语言中还会有一个概念,那就是防崩溃的东西。在`Go`语言中同样具有这样的概念,那就是`recover`。`recover`主要用于在程序`panic`时进行恢复,保证程序不会崩溃掉。
2024-08-28 09:54:20 730
原创 Go,你也可以的!-【7.3 defer】
有这样一种场景,就是我们需要在函数执行结束之后进行一些操作。比如我们通过代码打开了文件,那么我们需要保证在读取完文件以后,将文件进行关闭,这时候我们就会使用到`defer`。那么可能我们会有疑问,直接在读取完成以后直接关闭就可以了,为什么还要使用`defer`呢?我们思考一种情况:当读取函数执行到一半的时候,发生`panic`导致了程序崩溃,这时候函数最后的关闭代码就肯定不会被执行了。这种情况下,就可能会出现一些未知的问题。所以出现了`defer`,使用`defer`就可以保证文件关闭代码一
2024-08-27 09:50:41 354
原创 Go,你也可以的!-【7.2 panic】
`panic`就是`Go`语言中的崩溃,崩溃也就是程序不可用,这在实际的业务中基本是最严重的`BUG`。在大部分语言中,产生崩溃的原因基本是差不多的,大多都是访问了空指针、数组越界、内存溢出等。基本可以总结为,发生崩溃都是与系统进行了非法的内存或资源操作。
2024-08-27 09:49:36 700
原创 Go,你也可以的!-【7.1 错误处理】
很多时候我们都会遇到错误的情况,比如类型转换、请求第三方、连接数据库等出现错误。这时候就需要我们对异常进行进一步的处理,避免影响正常的业务逻辑。比如在类型转换时,从`string`转换为`int`,转换出错了。那么这时候我们就不能继续进行下一步的业务逻辑处理,因为这可能会导致我们的业务错误。
2024-08-26 09:31:23 603
原创 Go,你也可以的!-【6.3 select】
`select`一般是与`goroutine`、`channel`一起使用的。它的主要作用是用来从多个`channel`中读取数据。相当于使用一个`goroutine`通过`select`来读取多个`channel`的数据。如果所有`channel`都没有数据,那么就会阻塞,直到其中一个`channel`有数据为止。如果多个`channel`都有数据,那么就会随机从其中一个先读取数据。
2024-08-26 09:30:43 786
原创 Go,你也可以的!-【6.2 channel】
在并发编程中,共享变量一直都是一个大问题,也是经常容易出问题的地方。那么在`Go`语言中就提出了`channel`,也就是通道的概念,用以解决协程间的通信问题。
2024-08-24 16:14:30 357
原创 Go,你也可以的!-【6.1 goroutine】
`Go`语言中,使用的是`协程`的概念,也就是`goroutine`,可以理解为就是一个轻量级的线程。协程的开销极低,所以我们可以开启大量的协程支持我们的业务实现,这对于并发要求较高的系统是非常友好的。
2024-08-24 16:13:20 380
原创 Go,你也可以的!-【5.3 循环语句】
循环语句一般用于遍历数组、切片、`MAP`等,同时也用于一些循环逻辑执行。`Go`语言的循环与其他语言差不多,只不过都是通过`for`关键字来实现。在前面关于数组、切片的学习中我们已经讲解过了`for`循环的使用,本节我们将进行进一步的讲解。
2024-08-23 11:15:32 259
原创 Go,你也可以的!-【5.2 条件语句】
在实际的项目开发中,我们是一定会用到判断的。比如判断`a`、`b`两个数字的大小,如果`a`大于`b`执行逻辑`1`;如果`a`小于`b`那么执行逻辑`2`。类似上面的这种操作在我们实际使用时是很常见的。与大多数语言一样,`Go`语言也是使用`if`、`else`、`else if`来进行判断。
2024-08-23 11:14:35 448
原创 Go,你也可以的!-【5.1 函数】
函数可以说是各个编程语言都具备的东西,而在使用方面也是大同小异。函数在我们的实际应用中是必须的一个东西,可以说是我们程序的重要组成部分。
2024-08-22 09:08:08 540
原创 Go,你也可以的!-【4.7 类型转换】
我们已经在之前的章节中学习过了`Go`语言的基本数据类型。在实际的应用场景中,我们很多时候都会需要进行类型转换。这一节我们将针对类型转换进行详细的介绍。
2024-08-22 09:06:45 686
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人