随笔分类 -  Go

摘要:24.Context 24.1 Context 定义 在学习 Context 定义之前,我们先来看看一组生活中很平常的对话。 - A: 你有看过上周的比赛吗? - B: 嗯,看了。 - A: 比赛很精彩,我相信他们一定会赢得下一场比赛的。 - B: 是吗?我赌 1 块钱 从上面的示例可以得知 A 和 阅读全文
posted @ 2026-03-03 21:10 Surpassme 阅读(4) 评论(0) 推荐(0)
摘要:23.测试 23.1 测试基础 Go语言自带了一个强大的测试框架,且该测试框架是使用Go语言编写,因此不需要再单独学习另一种语法,所以在Go程序中创建和理解测试比在其他语言要容易一些。 与其他静态类型语言一样,编译器会捕获很多Bug,但依然不能保证业务逻辑合理或没有Bug,Go语言提供了一些工具来确 阅读全文
posted @ 2026-02-09 21:43 Surpassme 阅读(10) 评论(0) 推荐(0)
摘要:22.1 TCP/IP协议栈 TCP/IP(Transmission Control Protocol/Internet Protocol),中文翻译为传输控制协议/因特网互联协议。它是一个包含很多工作在不同层的协议族,其中最著名的两个协议分别是TCP和IP协议。TCP/IP协议一共定义了四层:网络 阅读全文
posted @ 2025-11-10 00:27 Surpassme 阅读(22) 评论(0) 推荐(0)
摘要:Go 语言内置包 database/sql 为所有数据库提供了通用接口,也就是说所有数据库的增删改查操作在 database/sql 中都有对应的方法实现,不同的数据库只需要更换相应的数据库驱动即可,无须修改代码。例如当前使用的SQLite数据库,若要修改为MySQL,则只需要导入MySQL数据库驱 阅读全文
posted @ 2025-11-10 00:26 Surpassme 阅读(29) 评论(0) 推荐(0)
摘要:在Go语言中,通道(Channel)是一种强大的并发编程工具,主要用于在不同的Goroutine之间传递数据。通过通道,可以轻松实现在Goroutine之间的通信和同步,避免手动加锁的复杂性。Channel底层是一个先进选出的环形队列(固定大小环形数组实现),示意图如下所示: 通道具备以下特点: f 阅读全文
posted @ 2025-10-26 22:17 Surpassme 阅读(22) 评论(0) 推荐(0)
摘要:在学习并发编程之前,我们先来了解一下一些相关的术语:进程、线程、并行、并发、同步、异步、阻塞、非阻塞、协程等概念。 19.1 进程/线程 进程是计算机中的程序在某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。例如一个运行的QQ软件就是一个进程。 线程是操作系统能 阅读全文
posted @ 2025-09-25 00:32 Surpassme 阅读(27) 评论(0) 推荐(0)
摘要:18.日志 18.1 自带log包 在日常项目,在出现问题之后需要排查,一种比较主要的排查方式是通过日志。所以在代码的关键地方,需要打印相应的日志。在Go语言中log包提供了简单的日志功能,其输出格式如下所示: 打印 格式化打印 换行打印 备注 log.Print() log.Printf() lo 阅读全文
posted @ 2025-09-21 00:49 Surpassme 阅读(41) 评论(0) 推荐(0)
摘要:17.时间处理 日期和时间是日常编程常用的功能之一。如果没有日期和时间,会导致很多功能无法实现,例如日志记录、定时任务、时间延迟等。Go标准库提供了操作日期和时间的方法。 在提到时间,还需要注意不同地区的时间会不一样,所以这里还需要考虑到不同时区、不同历法等带来的影响。目前使用较多的两种时间GMT( 阅读全文
posted @ 2025-09-15 00:14 Surpassme 阅读(52) 评论(0) 推荐(0)
摘要:16.目录与文件 任何编程语言在运行时都依赖于操作系统,所以程序在运行时会对系统文件、目录等执行一些相应操作,例如文件读写、执行系统命令、创建新的目录等。在Go语言中,可以使用内置包os实现了多种操作系统的操作指令,如主机、用户、进程、环境变量、目录与文件操作、终端执行等。 16.1 路径操作 存储 阅读全文
posted @ 2025-09-07 17:11 Surpassme 阅读(35) 评论(0) 推荐(0)
摘要:15.1 模块化 用任何语言开发,如果软件规模扩大,会编写大量的函数、结构体、接口等。而这些代码不可能全部写在同一个文件中,因此就会产生大量的文件。如果这些文件是杂乱无章,则会造成名称冲突、重复定义、难以检索、无法引用、共享不便、版本管理、代码如何复用等一系列问题。因此需要有方案来解决类似问题,Go 阅读全文
posted @ 2025-09-07 17:10 Surpassme 阅读(19) 评论(0) 推荐(0)
摘要:Go语言自带有一套完整的命令行操作,可以在终端中执行go来进行查看,如下所示: Go is a tool for managing Go source code. Usage: go <command> [arguments] The commands are: bug start a bug re 阅读全文
posted @ 2025-08-30 18:13 Surpassme 阅读(37) 评论(0) 推荐(0)
摘要:本节主要来学习Go语言中存在一些独有特性 13.1 值类型/引用类型 Go语言中针对不同的数据类型可以分为值类型和引用类型变量,两者描述如下所示: 值类型变量是变量直接存储数据,内存通常在栈中分配,对应的数据类型整型、布尔型、浮点型、字符串、数组等 引用类型变量是变量存储的是一个内存地址,在内存地址 阅读全文
posted @ 2025-08-30 18:12 Surpassme 阅读(18) 评论(0) 推荐(0)
摘要:Go语言在v1.18版本添加。其中泛即通用的意思。 12.1 泛型函数 如果没有泛型,同一种类型需要使用重载功能,但Go又不支持重载功能。如果写一个简单的加法计算函数,我们只能定义出如下所示的代码: func AddInt(a, b int) int { return a + b } func Ad 阅读全文
posted @ 2025-08-26 00:22 Surpassme 阅读(29) 评论(0) 推荐(0)
摘要:11.异常处理 在大部分的编程语言都支持异常处理机制,例如比较常见的try...catch...finally。但Go语言的设计者认为其他语言的异常处理太过消耗资源,且设计和处理比较复杂。导致使用者不能很好的处理错误,甚至觉得处理麻烦,从而忽视或忽略错误,导致程序崩溃。为了解决这些问题,Go将错误处 阅读全文
posted @ 2025-08-26 00:21 Surpassme 阅读(12) 评论(0) 推荐(0)
摘要:在学习接口时,已经接触了一些面向对象的概念,在这个章节中,我们来重点学习一下面向对象的相关概念。 面向对象程序设计(OOP:Object-oriented programming)是一种具有对象概念的编程典范,同时也是一种程序开发的抽象方针,包含数据、特性、代码与方法。主要涉及两个核心概念。 类(C 阅读全文
posted @ 2025-08-17 23:59 Surpassme 阅读(20) 评论(0) 推荐(0)
摘要:9.接口 Go语言提供了一种称为接口(interface)的数据类型,用于表示一组行为规范,即定义一组未实现的函数声明。谁调用接口谁负责参照接口的方法负责实现它们。 在Go语言中,使用组合实现对象特性的描述。对象内部使用结构体嵌套组合对象应该具有的特性,对外则通过暴露接口,让其他对象进行访问。Go语 阅读全文
posted @ 2025-08-17 23:58 Surpassme 阅读(16) 评论(0) 推荐(0)
摘要:8.结构体 Go语言的结构体有点像面向对象编程语言中的"类",但也不完全是。 面向对象是一种对现实世界理解和抽象的一种方法,通过抽象把相关的数据和方法组织为一个整体来看待,从高层次进行系统建模。更贴近事物的自然运行模式。例如:人类就是一个抽象的类,而小明,则代表了一个具体人。在其他语言中,类一般使用 阅读全文
posted @ 2025-08-11 23:51 Surpassme 阅读(19) 评论(0) 推荐(0)
摘要:7. 函数 7.1 函数定义 在Go语言中,函数是若干语句组成的语句块、函数名称、参数列表、返回值构成,是组织代码的最单元。使用函数的主要作用如下所示: 结构化编程是对代码的最基本的封装,一般按照功能组织一段代码 使用函数封装,可提高代码复用,减少冗余代码 使用代码可使代码简洁美观,增加代码的可读性 阅读全文
posted @ 2025-08-11 23:50 Surpassme 阅读(27) 评论(0) 推荐(0)
摘要:6. 容器类型 6.1 数组 数组是一个固定长度的特定相同类型元素组成的序列。其元素个数可以为>=0个。 在Go语言中,由于数组长度是固定,且缺乏一定的灵活性,在Go语言一般较少使用,通常都是使用切片 6.1.1 数组定义 Go语言的数组定义如下所示: // 方式一:在定义时即指定长度 var na 阅读全文
posted @ 2025-07-26 23:03 Surpassme 阅读(16) 评论(0) 推荐(0)
摘要:5.指针 5.1 指针概念 指针是一个指向内存地址的变量。示意图如下所示: 在定义变量的时候,计算机会为变量自动分配内存地址,指针则是用来存储这些变量的内存地址。为什么在 Go 语言定义变量必须声明数据类型?因为不同的数据占用不同的存储空间,导致内存分配大小各不相同,所以指针只能存放同一类型变量的内 阅读全文
posted @ 2025-07-22 15:58 Surpassme 阅读(26) 评论(0) 推荐(0)