随笔分类 -  go

golang
摘要:前言 在这篇文章中碰巧看到了Go边界检查消除相关的讨论. 我也借此简单聊聊. 有这样一段代码, 非常简单, 就是一段求向量点积的程序: func sum(a, b []int) int { if len(a) != len(b) { panic("must be same len") } ret : 阅读全文
posted @ 2024-02-25 14:00 烟草的香味 阅读(7) 评论(0) 推荐(0) 编辑
摘要:前段时间, redis作者不是整了个c语言版本的聊天服务器嘛, 地址, 代码量拢共不过百行. 于是, 心血来潮下, 我也整了个Go语言版本. 简单来说就是实现了一个聊天室的功能. 将所有注释空行都去掉, 刚好100行实现. 废话不多说, 先上代码: package main import ( "fm 阅读全文
posted @ 2023-12-16 22:11 烟草的香味 阅读(15) 评论(0) 推荐(0) 编辑
摘要:前言 先提出问题, 再说明原因. 有如下一段代码: 当执行go test测试时, 会报如下错误: main.test /var/folders/55/47pl3jxx6rg7m0r6xvn4f7wr0000gn/T/go-build2769402238/b001/_testmain.go:13:8: 阅读全文
posted @ 2023-04-15 22:57 烟草的香味 阅读(85) 评论(0) 推荐(0) 编辑
摘要:前言 在Go中, map这个结构使用的频率还是比较高的. 其实在所有的语言中, map使用的频率都是很高的. 之前在使用中, 一直都知道map的内存在元素删除的时候不会回收, 但一直没有仔细的研究为什么. 今天就来好好揣摩揣摩. func main() { m := make(map[int][12 阅读全文
posted @ 2023-03-25 17:25 烟草的香味 阅读(380) 评论(0) 推荐(0) 编辑
摘要:前言 如果我们的应用在启动的时候需要对数据库进行初始化(比如建表等), 可以通过读取.sql文件内容直接执行. 但是, 这样会带出一个问题: 在发送可执行文件的时候, 需要连带着附件文件, 并且相对路径还不能出错. 这样太麻烦了 有时我们并不希望附件的内容被使用者看到 处于种种原因, 我们不希望这部 阅读全文
posted @ 2023-03-11 13:52 烟草的香味 阅读(80) 评论(0) 推荐(0) 编辑
摘要:前言 在日常开发中, 经常会使用chan来进行协程之间的通信. 对chan的操作也无外乎读写关. 而本次, 就是从chan的关闭而来. 假设我们对外提供的方法如下: type Chan struct { ch chan int } func (c *Chan) Close() { close(c.c 阅读全文
posted @ 2023-02-19 15:56 烟草的香味 阅读(26) 评论(0) 推荐(0) 编辑
摘要:前言 很久以前就听过过内存逃逸这个词, 最近了解了一下, 才发现是个很简单的概念. 只要把前言部分看完, 就已经了解了. 来吧... 在介绍内存逃逸之前, 我们先用C语言来引出这个概念. 我们的进程在内存中有栈内存和堆内存的概念, 栈内存是函数执行的局部内存, 会随着函数的结束而全部释放, 而堆内存 阅读全文
posted @ 2023-01-15 17:41 烟草的香味 阅读(35) 评论(0) 推荐(0) 编辑
摘要:前言 在开始之前, 先来引出问题. 有这样一段go代码: func main() { var wg sync.WaitGroup wg.Add(2) var x, y int go func() { defer wg.Done() x = 1 fmt.Println(fmt.Sprintf("y=% 阅读全文
posted @ 2022-12-24 23:41 烟草的香味 阅读(46) 评论(0) 推荐(0) 编辑
摘要:前言 在Go的编程中, error的使用场景数不胜数, 主要就是用来处理各种异常情况. 长久以来, 我的使用方式都是这样的: err := errors.New("fail") if err != nil{ //do somethine... } 简单易懂. 但是, 如果我们的调用链是这样的func 阅读全文
posted @ 2022-12-11 23:00 烟草的香味 阅读(63) 评论(0) 推荐(0) 编辑
摘要:前言 有这样一段代码: func main() { // 捕捉异常 defer func() { if err := recover(); err != nil { fmt.Println(err) } }() go func() { fmt.Println("start goroutine") p 阅读全文
posted @ 2022-10-09 19:48 烟草的香味 阅读(91) 评论(0) 推荐(0) 编辑
摘要:在Go中, 有这样一个数据结构sync.Map, 他的出现是为了提供一个并发安全的map. Map 在了解sync.Map之前, 我们有必要知道为什么map不是并发安全的, 这里一笔带过了. map这个数据结构在各个语言中都有实现, 基本上大同小异, 大部分都是通过数组+链表来实现的, 在Go中也不 阅读全文
posted @ 2022-09-14 09:12 烟草的香味 阅读(145) 评论(0) 推荐(1) 编辑
摘要:问题 小提示, 若想直接查看原理, 可从接口原理开始查看. 有这样一段GO代码: func main() { var obj interface{} fmt.Printf("obj == nil. %b\n", obj == nil) type st struct{} var s *st obj = 阅读全文
posted @ 2022-08-03 17:33 烟草的香味 阅读(121) 评论(0) 推荐(0) 编辑
摘要:前言 在写Golang程序调用各种第三方库的时候, 经常会传一个叫做Context的参数. 之前基本上见到接Context, 根本不管是干什么用的, 直接无脑context.Background(). 但是, 传着传着就不免发生一些小疑问, 这个参数到底是干什么用的呢? 这么多库都在使用, 至少说明 阅读全文
posted @ 2022-06-18 15:53 烟草的香味 阅读(82) 评论(0) 推荐(0) 编辑
摘要:前言 之前在写GO单元测试的时候, 使用了这个结构testing.T. 进来无事翻了翻, 发现testing包中还有一些其他的结构体, 想来是不同用处. 没想到GO的testing包竟然默默做了这么多支持, 之前竟然不知道. 在testing包中包含一下结构体: testing.T: 这就是我们平常 阅读全文
posted @ 2022-05-28 10:12 烟草的香味 阅读(176) 评论(0) 推荐(0) 编辑
摘要:前言 最近突然发现golang更新版本1.18了, 于是迫不及待的来看看这个版本加了些什么新特性. 没准就有之前困扰很久的问题, 在新版本被官方解决了呢. 先简单概述一下都有些什么变化, 后面再细说: 增加泛型的支持 系统库方法增加 修复 bug 另外, 像"系统内核更新"这种, 我们在实际开发中根 阅读全文
posted @ 2022-03-19 23:36 烟草的香味 阅读(174) 评论(0) 推荐(0) 编辑
摘要:前言 反射是什么? 我们平常也是经常用到, 而且这名词都用烂了, 这里就不再详细介绍了. 简单说, 就是有一个不知道是什么类型的变量, 通过反射可以获取其类型, 并可操作属性和方法. 反射的用途一般是用作生成工具方法, 比如你需要一个ToString方法, 要将变量转为字符串类型, 如果没有反射, 阅读全文
posted @ 2021-10-29 22:05 烟草的香味 阅读(134) 评论(0) 推荐(0) 编辑
摘要:定义常量在各个语言中都是不可或缺的语法了. 而有些语言在常量的基础上, 增加了枚举类型, 比如C. enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; 上面的枚举, 对应的值依次为0到6. 阅读全文
posted @ 2021-06-12 14:10 烟草的香味 阅读(128) 评论(0) 推荐(0) 编辑
摘要:前言 之前遇到过这样一个情况(发现问题的结构体并不长这样, 不过为了引出问题, 改了一下): type Test struct { b bool i3 int32 i8 int8 i64 int64 by byte } func main() { t := Test{} fmt.Printf("%d 阅读全文
posted @ 2020-11-21 00:30 烟草的香味 阅读(287) 评论(5) 推荐(0) 编辑
摘要:前言 之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php, java, Python, js, c等等, 都没有这玩意, 第一次见面, 难免勾起我的好奇心. 所以就想着看一看它具体是什么东西. 很明显, 管道是go实现在语言层面的功能 阅读全文
posted @ 2020-10-11 14:05 烟草的香味 阅读(309) 评论(0) 推荐(0) 编辑
摘要:之前用 go 写一个小工具的时候, 用到了多个协程之间的通信, 当时随手查了查, 结果查出来一大坨, 简单记录一下. golang中多个协程之间是如何进行通信及数据同步的嘞. 共享变量 一个最简单, 最容易想到的, 就是通过全局变量的方式, 多个协程读写同一个变量. 但对同一个变量的更改, 就不得不 阅读全文
posted @ 2020-09-30 22:53 烟草的香味 阅读(1849) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩