golang
文章平均质量分 62
learning golang notes
甄齐才
倚楼听风雨,淡看江湖路。qiucode.cn
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用CSS计数器,在目录名称前加上了序号,让目录看起来更加井然有序
目录(缩写为TOC),其实就是一篇文章的概要或简述。这好比,去书店买书,先是被这本书的标题所吸引,而后我们才会,翻开这本书目录,看看这本书主要是在讲些什么?我们在看目录的同时,脑中也在不停的思衬,”这本书到底值不值得买呢?但是没有什么实战内容耶!原创 2024-04-01 15:44:50 · 956 阅读 · 0 评论 -
使用 golang 以及 Gin 框架,将上传的图片在不保存至本地的情况下添加水印,并上传至阿里云 OSS
正如标题所述,使用golang对上传图片添加水印,以及将图片上传到阿里云OSS,网上一搜索,便有你想要的结果了,可是,他们却先将上传图片添加水印后保存在本地,而后再将添加了水印的图片上传到阿里云OSS。这无疑是暂时占用了你电脑的磁盘空间(这里说是暂时,因为你可以通过程序对上传到阿里云OSS成功的图片进行删除),即便是这样,它也是消耗了磁盘读写操作,虽然人类是察觉不到这么细微的变化。然而,作为技术人员的我们(不介意我这么称呼自己吧!),使能够Review出这段程序的问题。原创 2024-03-30 20:36:40 · 1772 阅读 · 0 评论 -
hugo-theme-kiwi V0.0.2 博客主题上新了时间轴
至此佳节,我在此给正在屏幕前浏览本文的您和您的家人,恭祝元旦快乐,虽然,这声祝福是晚了,但却不妨碍我我由内心深处对您和您的家人的诚挚祝福!新的一年,从这一天逐渐步入我们的生活,让我们抖擞精神,去开启新的旅途!新年新气象,希冀不光是元旦这一天会带给您欢乐,往后的每一天,我们都保持着一颗开怀的心。作为新生儿的,也冲着新年这波热闹劲,上新了时间轴页面。原创 2024-01-01 22:36:00 · 1002 阅读 · 1 评论 -
一套由 Hugo 驱动的博客主题 hugo-theme-kiwi 开源啦
自没再为云服务器续费那会儿起,便选用了由Hugo驱动的博客主题,来迁移上的所有文章,然而,在众多Hugo博客主题之列,竟找不出一套属于自己想要的风格的主题,故而,也只能暂且套用了一个还算可以的博客主题。那套没有博客风格的主题,终究是会被替换的,一切都只是时间问题。可没想到的是,暂时选用那套博客主题,竟然暂时了这么久,这一搁就是好几个月了。还记得,云服务器到期是在 6 月 20 日,那是一个盛夏的季节,可如今呢,却是一个寒冬腊月、冷风凌冽、大雪纷飞的残冬时节,我不禁感叹,时间真的过的好快啊!原创 2023-12-24 23:27:16 · 1517 阅读 · 1 评论 -
把握住golang中的template,方能驾驭得了Hugo主题的template
不置可否,```Hugo```的```template```同样是使用```golang```的标准库```html/template```。为了能实现一个属于自己独特的```Hugo theme```,或是修改他人的主题,都得对其```模板语法```有所知晓,方能改的称心如意,亦或是制作出一套即简约,又不失典雅的```Hugo theme```。原创 2023-07-09 13:41:57 · 980 阅读 · 0 评论 -
是时候回答【我为什么要学习 Go 语言(golang)】这个问题了
而那 34 篇是涵盖 golang 的基础语法,虽然 golang 版本使用的是 1.19,但却没能在那 三十来篇里讲述早在 golang 1.18 就出现的新功能。任何人、组织/机构都可参与进来,且链上的所有数据记录公开、透明,任何人都能与之共识过程,不受任何机构控制,是完成。每种语言都有优缺点,不能拿另一个语言中有的功能,来质疑golang怎么没有呢,吐槽golang最厉害莫过于说它没有异常处理,这不就是那其他语言来比较吗!,乍然间,友人们无不张口结舌,双目紧盯着您,不错过任何细节,让您把这趣事讲完。原创 2022-12-02 22:42:22 · 1222 阅读 · 0 评论 -
Go 语言中的 Moduels 管理(Let‘s Go 三十四)
在Go 1.11以前使用包管理一直被开发者所诟病。既然GOPATH这种包管理引起了一线开发者的一片骂声,所以,Go官方体恤一线开发者对GOPATH这种包管理的情绪,一直致力努力提供对一线开发者友好的包管理解决方法而奋斗。从最初的GOPATH到GO VENDOR,再到现在最新的GO MODULES,这期间,Go 官方不免走了很多弯路,但展现在我们跟的GO MODULES已是很像样的模块管理了。在命令行窗口输入go env命令,可以看到,多了个变量,111是代表Go 1.11版本提出来的。off、on、原创 2022-11-11 21:45:59 · 822 阅读 · 0 评论 -
Go 语言中的包(Let‘s Go 三十三)
Go语言的包借助了目录树的组织形式,一般包的名称就是其源文件所在目录的名称,虽然Go语言没有强制要求包名必须和其所在的目录名同名,但还是建议包名和所在目录同名,这样结构更清晰。包可以定义在很深的目录中,包名的定义是不包括目录路径的,但是包在引用时一般使用全路径引用。比如在下定义一个包 c。在包 c 的源码中只需声明为package c,而不是声明为,但是在导入 c 包时,需要带上路径,例如。-原创 2022-11-07 20:41:53 · 448 阅读 · 0 评论 -
Go 语言中的错误处理(Let‘s Go 三十二)
除了上面的 errors.New 用法之外,我们还可以实现 error 接口自定义一个 Error() 方法,来返回自定义的错误信息。return fmt . Sprintf("出现错误:%.0f 为负数" , e . Num) } func Sqrt(f float64)(float64 , error) {= nil {原创 2022-11-03 19:13:18 · 208 阅读 · 0 评论 -
Go 语言中的带有缓冲 Channel(Let‘s Go 三十一)
因此,限制信道的长度有利于约束数据提供方的供给速度,供给数据量必须在消费方处理量+信道长度的范围内,才能正常地处理数据。同理,如果缓冲通道中有数据,接收时将不会发生阻塞,直到信道中没有数据可读时,信道将会再度阻塞。这导致有缓冲的信道和无缓冲的信道之间的一个很大的不同:无缓冲的信道保证进行发送和接收的 goroutine 会在同一时间进行数据交换;前几篇文章我们使用 make 创建出来的信道 Channel,并没有传入第二个参数,也就是说,没有传入第二个参数创建的信道 Channel,便是无缓冲信道咯。原创 2022-10-31 19:31:39 · 1163 阅读 · 0 评论 -
Go 语言中的单向 Channel(Let‘s Go 三十)
通过上篇文章,我们知道该怎么声明信道 Channel,以及发送和读取数据。,也就是声明出来的信道Channel,此刻的Channel信道便是只能发送或读取数据。来声明一个只能发送数据的信道,其信道变量的类型则为。,可单向信道Channel到底是怎样的呢?声明出来的信道便是只能接受数据,类型则是。要声明单向信道Channel,可以使用。原创 2022-10-29 18:56:24 · 369 阅读 · 0 评论 -
Go 语言中的 Channel(Let‘s Go 二十九)
接上篇,要想在 goroutine 间进行通信,则需通过 Channel 信道传递消息。Channel 是进程内的通信方式,因此通过 channel 传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用分布式系统的方法来解决,比如使用 Socket 或者 HTTP 等通信协议。Go 语言对于网络方面也有非常完善的支持。Channel 是类型相关的,也就是说,一个 Channel 只能传递一种类型的值,这个类型需要在声明 Channel 时指定。原创 2022-10-27 20:48:37 · 684 阅读 · 0 评论 -
Go 语言中的并发编程(Let‘s Go 二十八)
goroutine 是一种非常轻量级的实现,可在单个进程里执行成千上万的并发任务,它是Go语言并发设计的核心。说到底 goroutine 其实就是线程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,而且Go语言内部也实现了 goroutine 之间的内存共享。使用 go 关键字就可以创建 goroutine,将 go 声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 goroutine。原创 2022-10-24 19:17:01 · 364 阅读 · 0 评论 -
Go 语言中的空接口(Let‘s Go 二十七)
空接口是接口类型的特殊形式。所谓空接口就是没有方法集,以至于任何类型都可实现它,换言之,也就是空接口可以保存任意类型的值。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C。原创 2022-10-23 21:29:40 · 320 阅读 · 0 评论 -
Go 语言中的类型断言(Let‘s Go 二十六)
Go中使用空接口来表示可以是任意类型,以至于这样,需要检测该变量类型,那便要类型断言。必须是一个借口类型的变量,否则编译报错。Type是一个具体的类型。该断言表达式返回一个val和一个布尔类型ok,根据ok判断varl是否属于Type类型。原创 2022-10-22 21:30:40 · 359 阅读 · 0 评论 -
Go 语言中的接口(Let‘s Go 二十五)
中的接口,类型实现接口方法集的方法,其类型实现的方法签名必须要与接口中的方法集中方法签名一样。类型不需要显式声明它实现了某个接口:接口被隐式地实现。多个类型可以实现同一个接口。接口类型可以包含一个实例的引用, 该实例的类型实现了此接口(接口是动态类型)。实现某个接口的类型(除了实现接口方法外)可以有其他的方法。等纯面向对象编程语言那样,它是没有。(只有方法声明,没有方法实现体)。一个类型可以实现多个接口。这个关键字用来实现接口。这种面向对象的概念。原创 2022-10-21 20:23:55 · 310 阅读 · 0 评论 -
Go 语言中的方法(Let‘s Go 二十四)
Go中的方法是一种特殊的函数,通过接受者将函数绑定在一起,这样便可以模拟面向对象那样。}要将函数与某个类型绑定在一起,只需在函数名称前加需要绑定的类型。原创 2022-10-19 21:34:34 · 239 阅读 · 0 评论 -
Go 语言中的结构体(Let‘s Go 二十三)
Go中的结构体与c/c++语言中是差不多,然而对没有接触过c/c++语言的话,对在看到结构体这一复合类型是新鲜事物。varName , varName2 , varName3 Type } // 使用 type struct 关键字定义结构体,原创 2022-10-14 21:37:15 · 290 阅读 · 0 评论 -
Go 语言中的延迟执行【defer】(Let‘s Go 二十二)
函数可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。语句可将跟随其后的语句进行延迟处理。原创 2022-10-12 20:11:52 · 411 阅读 · 0 评论 -
Go 语言中的闭包和可变参数(Let‘s Go 二十一)
闭包是一个函数值,可以引用其函数体外的变量,也就是可以访问或赋予该引用变量的值。换句话讲,原本普通函数体变量的作用域是该普通函数结束,函数体内变量也就跟着销毁。函数,你可能没有特别注意到,就是我们可以传入任意参数。而这种可以接受任意实参的函数,函数的形参极有可能是。改用```切片````,其最终效果是一样的,这只是一种语法糖。是可以传入任意数量的参数,但是很明显,传入的参数收到了约束。如果想传入任意类型的可变参数,那又该怎么解决呢?,但必须是形参列表的最后一个。,即可传入任意类型。原创 2022-10-05 21:14:49 · 357 阅读 · 0 评论 -
Go 语言中的函数变量与匿名函数(Let‘s Go 二十)
一上来乍一看,函数变量?这究竟是什么意思呢?你函数就函数,变量便是变量,这两者搞在一块,到底是几个意思呢?也是一种类型,既然是类型,那就可以向其它类型一样,给变量定义类型啊!的用处还是很广泛的,它可以在作为一个函数的形参,而后进行。等面向对象编程语言的经验,对。还可以对某些操作进行封装。定义出来的变量可不就是。说到匿名函数,想必有过。的哦,在前面我们谈到了。原创 2022-10-04 20:54:23 · 360 阅读 · 0 评论 -
Go 语言中的函数详解(Let‘s Go 十九)
若一组形参或返回值有相同的类型,其实是不需要为每个参数都带上类型的,只需在这组相同类型的形参或返回值最后一个形参或返回值带上类型即可,这段话看起来似乎有点绕,其实意思就是下面这般。以上三种写法是等同的,返回值如果定义了返回参数,在函数体最后一行需要加上。语言一样,对于声明函数也有属于自己的一套规则。在前面几篇文章,接触到的最多的是。,且函数返回可以返回多个值。原创 2022-10-03 19:33:10 · 315 阅读 · 0 评论 -
Go 语言中的 goto、break 以及 continue 语句(Let‘s Go 十八)
代码说明:第 16 行将结束当前循环,开启下一次的外层循环,而不是第 12 行的循环。一样,可以跟上标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的。作为保留关键字,不建议使用,但如果你非要使用,谁人可阻止呢?编程世界里,你大可放心的去用,不必担心代码的可读性之类的。可是编程语言界破坏代码可读性的罪魁祸首啊!一样加标签,表示开始标签对应的循环,并且仅限在。并无不同,只是多加了一个功能,那就是也可以像。,想必很多人都心有余悸吧,毕竟。或类 c 的编程语言,都将。原创 2022-10-01 19:33:48 · 1287 阅读 · 0 评论 -
Go 语言中的 switch 结构(Let‘s Go 十七)
不提供任何被判断值时,其实际上默认为判断是否是。分支中进行判断不同的表达式,直至任何一个结果为。后面不仅仅跟着常量,还可以像。时,该分支的代码才会被执行。表达式可以是任何类型的噢!原创 2022-09-30 21:00:27 · 551 阅读 · 0 评论 -
Go 语言中的 for 循环结构(Let‘s Go 十六)
一样的效果,便去掉条件表达式,直接写个。来遍历数组、切片、字符串、分支结构一样,可以省略。原创 2022-09-29 20:09:24 · 278 阅读 · 0 评论 -
Go 语言中的分支结构(Let‘s Go 十五)
真的是,```G哦·``就是要特立独行。大致相同,只是可以省略。还提供一种简短的写法。原创 2022-09-28 22:12:00 · 325 阅读 · 0 评论 -
Go 语言中的列表(Let‘s Go 十四)
列表插入函数的返回值会提供一个 *list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,从列表中删除元素时,需要用到这个结构进行快速删除。列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等。声明有两种方式,首先需要导入。原创 2022-09-27 22:10:24 · 907 阅读 · 0 评论 -
Go 语言中的字典【map】(Let‘s Go 十三)
并没有关于清空元素、清空所有元素的函数。当中所有元素怎么办呢?唯一的办法就是重新用。对应的无序集合,又称为。原创 2022-09-27 20:47:08 · 261 阅读 · 0 评论 -
Go 语言中的切片(Let‘s Go 十二)
其实啊,切片就好像一个完整的蛋糕,你用刀切了一小块,而这一块就是从那完整的蛋糕切了下来。除了可以从数组或切片中生成切片外,还可以声明一个新的切片,其声明与数组声明方式很相似。切片是动态结构,只能与 nil 判定相等,不能互相判定相等。声明新的切片后,可以使用。是对数组的某一个连续片段的引用,当然咯,这个片段也可以是整个数组。,只是能提前分配空间,降低多次分配空间造成的性能问题。都被忽略时,生成的切片与没有生成的对象一致。指的是为这个类型分配多少个元素,首先,需要了解的是,到底什么是。是指切片的元素类型,原创 2022-09-26 20:45:04 · 556 阅读 · 0 评论 -
Go 语言中的数组(Let‘s Go 十一)
默认情况下,数组的每个元素都会被初始化为元素类型对应的零值,对于数字类型来说就是 0,同时也可以使用数组字面值语法,用一组值来初始化数组。数组没有设置第三个元素,所以就是用了该类型的默认值进行初始化,由于。其实,数组的长度可以根据初始化值的个数进行推算出来的,在上面。语言一样,数组的每个元素可以通过。开始到数组长度减去1的位置。可以返回数组中元素的个数。数组在定义数组长度时可用。内置函数 len()声明多维数组的格式。原创 2022-09-25 20:56:43 · 298 阅读 · 0 评论 -
Go 语言中的类型定义与类型别名(Let‘s Go 十)
其实,类型定义与类型别名很相似,两者只差一个等号,怎一个等号了得。类型定义是没有等号的,来看一个实例,或许你会有所了解。package main import "fmt" // 将NewString定义为string类型 type NewString string // 将string取一个别名叫StringAlias type StringAlias = string func main() {原创 2022-09-25 19:26:31 · 584 阅读 · 0 评论 -
Go 语言中的指针(Let‘s Go 九)
其实,每个变量在运行时,在内存都有属于自己的内存地址,而这个地址就是代表着变量在内存的位置。虽说,指针操作效率是相当的快,可一旦把握不好,就会造成可怕的错误。语言一样,要想获取变量在内存的地址,只需在变量前面加个。操作符对普通变量取地址,在得到变量的指针后,接着使用。操作符对普通变量进行取值,也就是。指针不仅可以取值,还可以修改值。,曾几何时,让人望而却步!根据地址取出地址指向的值。说到指针,想必很多人会。变量 v 的内存地址。指针 a 指向的变量。而是 a 指向的变量。指针 b 指向的变量。原创 2022-09-25 15:45:20 · 423 阅读 · 0 评论 -
Go 语言中的关键字与标识符(Let‘s Go 八)
它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用。通俗的讲就是凡可以自己定义的名称都可以叫做。和其它语言一样,关键字不能够作标识符使用。,则表示它只能在本包中使用 (类似于。,其实前面几篇文章也或多或少的出现些。对各种变量、方法、函数等命名时使用的。,则表示它可以被其它的包访问(类似于。作为一门编程语言,也同样的保留了些。作为变量对其它变量进行赋值或运算。名称的首字母也可以大写,如果。原创 2022-09-24 20:40:51 · 265 阅读 · 0 评论 -
Go 语言中的常量定义(Let‘s Go 七)
Go中定义常量与C语言一样,也是使用const关键字来定义常量的。,其中typeName(类型)可省略!常量可以是字符、字符串、布尔值或数值。常量不能用:=语法声明。const site string = "https://qiucode.cn" const siteName string = "秋码记录"和变量一样,也是可以批量进行声明的。const(site = "https://qiucode.cn" siteName = "秋码记录")原创 2022-09-24 19:43:11 · 1305 阅读 · 0 评论 -
Go 语言中的类型转换以及类型推导(Let‘s Go 六)
其实,类型推导前面几篇以及本文实例都有涉及到,只是你没有注意到而已。不过当右边包含未指明类型的数值常量时,新变量的类型就可能是。在声明一个变量而不指定其类型时(即使用不带类型的。表达式语法),变量的类型由右值推导得出。有两种方式,一种是使用。(int32)来转换,另一种则是使用。原创 2022-09-24 15:59:42 · 375 阅读 · 0 评论 -
Go 语言中的字符串(Let‘s Go 五)
使用双引号""来定义字符串,而且字符串内可以使用转义字符来格式化字符串,常用转义字符\n:换行符\r:回车符\t:tab 键\u 或 \U:Unicode 字符\:反斜杠自身var str = "一个神奇的网站:https://qiucode.cn\n" fmt . Printf(str) }其实,字符串是字节的定长数组,所以可以使用数组索引(也可以称为下标)来操作字符串。获取字符串的第一个字节: str[0]获取字符串最后一个字节: str[len(str) - 1]原创 2022-09-24 14:29:55 · 1592 阅读 · 0 评论 -
Go 语言中的多变量同时赋值、匿名变量以及变量作用域(Let‘s Go 四)
它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。原创 2022-09-22 22:03:32 · 769 阅读 · 0 评论 -
Go 语言中的基本类型以及变量声明与初始化(Let‘s Go 三)
刚才只是声明了变量,并没有给他赋值,虽然可以只是只声明变量,而后赋值也是可以的。但可以在声明变量是并初始化变量,也就是给变量赋初始值。同样byte也是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是一个小的整数。使用关键字 var 和圆括号,可以将一组变量定义放在一起。也有属于自己的一套基本类型,好了,闲话少扯,那就来看看。若你觉得每行声明变量比较繁琐,可以使用批量声明变量的。很显然,在函数外部声明,编译报错。也和其他同是编程语言一样,是声明变量的关键词,是要定义的变量名称,原创 2022-09-21 21:47:23 · 767 阅读 · 0 评论 -
使用集成开发环境来开发Go项目
工欲善其事,必先利其器。好的集成开发环境(IDE)能让你事倍功半,好了,废话少扯,下来介绍几种能开发Go项目的IDE。1、GolandGoland 是由 JetBrains 公司开发的一个新的商业 IDE,旨在为 Go 开发者提供的一个符合人体工程学的新的商业 IDE。Goland 整合了 IntelliJ 平台(一个用于 java 语言开发的集成环境,也可用于其他开发语言),提供了针对Go语言的编码辅助和工具集成。2、LiteIDE。原创 2022-09-20 21:32:55 · 1052 阅读 · 0 评论 -
Window安装Go语言最新版
可有人又要说了,这还用命令行查看,下载以及安装的时候,不是知道版本了吗?的确,是知道你当前安装的。命令行窗口怎么会有这个命令呢?反正新版本不需要配置环境变量了。在此之前,或许有人会说,你环境变量还没配置啊!其实可以从以下几个地方下载Go语言开发包。点击``OK```后,又回到上一步界面。或者直接点击右上角红叉关闭它。使用以下命令查看当前安装的。其实与第二个是一样的。next```下去。原创 2022-09-19 23:36:43 · 542 阅读 · 0 评论
分享