
Go
文章平均质量分 76
Chaney不会代码
生活原本郁闷,但跑起来就会有风。
展开
-
Go语言中空struct的用途
2. 空结构体在 channel 中:通过信号量控制并发,无需传输数据。3. 空结构体实现接口:当行为不需要依赖状态时,简化代码结构。1. 空结构体作为集合:节省内存,仅用键判断存在性。原创 2025-05-18 09:03:15 · 498 阅读 · 0 评论 -
Go语言中有线程吗
Go 没有传统意义上的线程,而是使用 goroutine 来实现并发。Goroutine 是由 Go 运行时管理的轻量级执行单元,它们在执行效率和资源占用上比操作系统线程更具优势,因此适用于需要处理大量并发任务的场景。原创 2025-02-05 10:07:17 · 519 阅读 · 0 评论 -
Go泛型-1.18
既然接口定义发生了变化,那么从Go1.18开始接口实现(implement)的定义自然也发生了变化:当满足以下条件时,我们可以说类型 T 实现了接口 I ( type T implements interface I)T 不是接口时:类型 T 是接口 I 代表的类型集中的一个成员 (T is an element of the type set of I)原创 2025-02-02 08:55:24 · 1383 阅读 · 0 评论 -
Go语言历史
加拿大人,曾是贝尔实验室的Unix团队和Plan 9操作计划的成员。(ps:Go语言的图标-gopher 囊地鼠,是Rob Pike老婆制作的)它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。Thompson也发明了C语言、B语言,同时也是C语言的主要发明人。工欲善其事,必先利其器,这里我们选用GoLand做为我们的开发IDE。因为我比较熟悉Goland,但Goland不是唯一选择,我们也可以选择。原创 2025-02-01 15:41:12 · 834 阅读 · 0 评论 -
Redigo
go的redis client用的比较多两个包是redix和redigo,因为beego cache模块里redis使用的是redigo,所以我也就使用这个包了。因为代码内容偏多,结构不清晰,不方便阅读,最后整理成一份思维导图,便于学习。经过学习源码发现,这些顶尖的设计者与我们普通开发者的区别在于,他们包设计非常巧妙,以及只把有必要的内容提供给开发者。提供给开发者使用的内容 (1)变量 (2)常量 (3)新类型 (4)接口 (5)结构体 (6)函数。代码语言:javascript。原创 2025-01-30 14:28:14 · 639 阅读 · 0 评论 -
Go的string类型思考
join会先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数组的情况下,这种效率会很高,但是本来没有,去构造这个数据的代价也不小。golang 里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给 gc 带来额外的负担,所以性能比较差。实现,不像直接运算符这种会产生很多临时的字符串,但是内部的逻辑比较复杂,有很多额外的判断,还用到了。同时存在着一个可变长的数组,这意味着可以传入不限个数的元素。原创 2025-01-29 11:09:33 · 296 阅读 · 0 评论 -
byte和rune类型
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。当需要处理中文、日文或者其他复合字符时,则需要用到。原创 2025-01-29 11:09:01 · 227 阅读 · 0 评论 -
Golang中关于for range 的理解
是遍历 channel 的一种简洁方式,可以自动处理接收数据和检测 channel 是否关闭的问题。这个地方原本存在索引值的for range 循环就回去返回相关的索引值。然而map这样原本就带有key的值的就直接去返回key-value的值。遍历数组、切片、字符串、map 及通道(channel)。这个range的特殊的循环,只能去循环上述的类型。这个地方在我之前一直不是很清楚‘Go的 for range循环。原创 2025-01-29 11:08:26 · 345 阅读 · 0 评论 -
Golang 函数式编程
【代码】Golang 函数式编程。原创 2024-12-30 23:56:56 · 171 阅读 · 0 评论 -
Golang--Groutine
基础理论 IO/file/读/写/权限方法 (系统包提供的、第三方提供的)获取文件信息传输开发一些小工具(dos,接收用户的收入来实现一些功能)B/S 架构(网页和系统打交道)原创 2024-10-11 19:43:47 · 864 阅读 · 0 评论 -
Golang-Channel讲解
/ 定义好通道之后,如果没有 goroutine来使用(必须在两个及以上goroutine),那么就会产生死锁。通道带了一个缓冲区,发送的数据直到缓冲区填满为止,才会被阻塞,接收的也是,只有缓冲区清空,才会阻塞。5、如果存在default,执行该语句,如果不存在,阻塞等待 select 直到某个通道可以运行。// 缓冲区通道,放入数据,不会产生死锁,它不需要等待另外的线程来拿,它可以放多个数据。如果缓冲区空的,读取也会等待,如果缓冲区中有多个数据,依次按照先进先出的规则进行读取。原创 2024-10-11 19:42:45 · 2046 阅读 · 0 评论 -
Golang--I/O流下
所以说 bufio ,提供了一个缓冲区,读和写都先在缓冲区中,最后再一次性读取或者写入到文件里,降低访问本地磁盘的次数。2、如果在文件传递过程中,程序被迫中断(断电、断网、内存满了..),下次重启之后,文件是否还需要重头再传?fmt.Println("temp.txt中记录的值为:", count) // 5120。fmt.Println("file1/2/3 文件连接建立完毕")//fmt.Println("读取到了多少个字节:", n)SeekStart = 0 // 表示相对于文件的开头。原创 2024-10-10 19:22:45 · 983 阅读 · 0 评论 -
Golang-I/O流
电脑中一切,都是以的形式存在的。jpg:010100000010010101001010101010010101010 编码格式,还原为一个图片展示到计算机显示器i:input 输入o:output 输出。原创 2024-10-10 19:15:52 · 538 阅读 · 0 评论 -
golang. - time 时间
/ 其他地方的时区格式:https://www.zeitverschiebung.net/cn/all-time-zones.html。fmt.Println(now.Format("2006-01-02 15:04:05")) // 24小时制。fmt.Println(now.Format("2006-01-02 03:04:05 PM")) // 12小时制。// 获取时间的时区 // "Asia/Shanghai" 必须要大写 手动构建 ,如果不对,会报未知的时间错误。原创 2024-10-10 19:10:31 · 838 阅读 · 0 评论 -
常用包讲解--异常panic
/ 1、先执行导入包的init函数,单个go文件中是顺序执行的,所有go中的init函数执行完毕后,才会到main包。// 3、在同一个包下的go文件如果有多个,都有init的情况下,按照文件排放顺序来执行对应的init函数()fmt.Println("---------程序已恢复----------")//. "math/rand" // 简便模式:可以直接调用该包下的函数,不需要通过包名。fmt.Println(strings.Split(str3, "-")) // 用的最多。原创 2024-10-10 10:27:01 · 930 阅读 · 0 评论 -
Golang错误与异常
import ("errors""fmt"// 自己定义一个错误// 都会返回 error 对象, 本身也是一个类型if age_err!= nil {// 方式二errInfo1 := fmt.Errorf("我是一个错误信息:%d\n", 500)//errInfo2 := fmt.Errorf("我是一个错误信息:%d\n", 404)= nil {// 处理这个错误// 设置年龄的函数,一定需要处理一些非正常用户的请求。原创 2024-10-10 09:58:59 · 781 阅读 · 0 评论 -
Golang面向对象编程
// 方法:可以理解为函数多了一个调用者// 方法可以重名,不同的对象,调用的结果是不一样的age int// 方法定义, func 方法调用者 方法名()// 1、方法可以重名,只需要调用者不同// 2、如果调用者相同,则不能重名age int// 创建一个对象name: "旺财",age: 2,// 方法的调用,通过对应的结构体对象来调用dog.eat()cat := Cat{name: "喵喵", age: 1}原创 2024-10-10 09:41:56 · 674 阅读 · 0 评论 -
Golang指针与结构体
定义变量 var定义结构体 type User struct {}// 定一个结构体 type User structage int// 通过结构体创建对象, 以前的类型都是用的基本类型,自己定义类型了type,Struct// 定义了结构体对象,不赋值,默认都是这个结构体的零值 {"",0,""}// 给结构体对象赋值。xxx.属性 = 值user1.name = "张三"user1.sex = "女"// 获取这个人的名字// 创建对象的方式二。原创 2024-10-10 08:44:01 · 950 阅读 · 0 评论 -
切片和map Golang
// map 集合,保存数据的一种结构// 创建一个map,也是一个变量,数据类型是 mapvar map1 map[int]string // 只是声明了但是没有初始化,不能使用 nil// 更多的时候使用的是make方法创建var map2 = make(map[string]string) // 创建了map// 在创建的时候,添加一些基础数据// 关于map的类型,就如定义的一般 map[string]int// 类型主要是传参要确定。原创 2024-10-10 08:25:57 · 1145 阅读 · 0 评论 -
Golang的数组
一组数数组需要是相同类型的数据的集合数组是需要定义大小的数组一旦定义了大小是不可以改变的。// 定义切片arr := [4]int{1, 2, 3, 4} // 定长var s1 []int // 变长,长度是可变的// 切片的空判断,初始的切片中,默认是 nilfmt.Println("切片是空的")s2 := []int{1, 2, 3, 4} // 切片 变长。原创 2024-10-10 08:00:46 · 669 阅读 · 0 评论 -
Golang的函数
最后该函数返回,特别是当你在进行一些打开资源的操作时i/o 流,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题如果有很多调用 defer,那么 defer 是采用 后进先出(栈) 模式。// defer 作用:处理一些善后的问题,比如错误,文件、网络流关闭等等操作。// 特点,多个defer的问题// 你可以在函数中添加多个defer语句,当函数执行到最后时,这些defer语句会按照逆序执行f("1")defer存在传递参数:。原创 2024-10-10 07:43:40 · 1244 阅读 · 0 评论 -
Golang的函数
函数就是一段代码的集合go语言中至少要有一个 main函数函数需要有一个名字,独立定义的情况下。见名知意函数可能需要有一个结果,也可能没有函数和方法完全是不一样的东西,面向对象里面才有方法无参无返回值有一个参数的函数有两个 or 多个参数的函数有一个返回值的函数有两个 or 多个返回值的函数/*- 无参无返回值- 有一个参数的函数- 有两个 or 多个参数的函数- 有一个返回值的函数- 有两个 or 多个返回值的函数*//*原创 2024-10-09 21:06:21 · 905 阅读 · 3 评论 -
Go流程控制
昨日回顾:注释变量 var name 数据类型常量 constiota(了解)基本数据类型布尔类型 bool true false整型 int byte 255浮点型 float64 (精度稍微高一点)string (字符编码、定义字符和字符串)数据类型的转换 A = A(B),同类型 (数字类型.)运算符算术运算符 (+-*/% ++ --)关系运算符 ( > < =!= )原创 2024-10-09 20:28:53 · 810 阅读 · 0 评论 -
Go基础语法
1、回顾了变量的定义2、新学习了iota常量计数器 (了解即可)3、数据类型布尔数据类型数字、浮点 (数据类型的转换 = B= B(A) )字符串4、运算符(算术:结果、关系:布尔值)逻辑运算符 && ||!(必须需要在下面搞懂这个问题)写一些简单的计算题(可以掌握程序接收键盘的输入,我们就可以写一个自己的计算程序了)原创 2024-10-09 19:54:28 · 552 阅读 · 0 评论 -
Go语言基础语法
程序 : 我们向电脑说了一段话,需要电脑才能理解 (沟通机制 ,xxx语言 -- 汇编 -- 机器码)电脑实际上识别的是机器码 : 0 1 1 1 0 1 (高低电频)机器码 : 穿孔纸带汇编:早些时候,现在的很多机器硬件底层代码,都是汇编人能读懂的代码:英文、中文将我们的语言和机器进行对接 (C、Java、Go ---> 编译器 --> 计算机中去执行:无需理解的,我们只需要写我们能看懂的代码即可 )我们理解的世界、和计算机的世界要一一对应:定义:一切都是需要去定义的。原创 2024-10-09 19:46:46 · 910 阅读 · 0 评论 -
Go语言基础
(u)int就是根据操作系统来,也可以自己去指定。complex64 128 复数。rune就像char 32位的。()int:无符号的。原创 2024-08-17 19:21:25 · 125 阅读 · 0 评论