Golang
Golang学习
王大队长
这个作者很懒,什么都没留下…
展开
-
channel实战中的使用
之前学channel都是学一些基本的语法、规则和注意事项,但是任何知识只是强硬的给你灌输该怎么用,而不知道什么时候用,什么地方用的话,肯定是不行的。今天在看一个项目的源码的时候,就发现乐channel在这个项目中作为接受信号中断、接受错误来使用!先看这段代码,这段代码先定义了一个中断信号,三个case分别用来接受信号和错误,第一个signal.Notify是内置函数,目前对channel,携程应用场景还不是很熟悉,希望以后加深理解了一定会写一篇从语法到具体应用场景的详细文章!原创 2022-12-24 12:54:26 · 261 阅读 · 0 评论 -
Slice的坑
我的本意是将*track append到*result中,但是直接append结果不对,result不变,然而copy一遍后再append到*result的话就对了,所以显然不是第一条slice的容量的坑,目前还没发现原因,夜已深,后面找到原因了再填坑。1、Slice容量不够时,再append就变成新生成的一个slice了。在leetcode的46题,我的代码如下。2、append时结果不变。原创 2022-12-14 00:04:27 · 103 阅读 · 0 评论 -
返回值列表已定义了返回变量则if中别用:=再声明这个变量
代码的主要逻辑就是根据id值在数据库查找社区community,关键在26行,我本意是如果db.Get从数据库没有拿到了community并且是sql.ErrNoRows错误,那么err自然就是ErrorInvalidID,自然也就不为nil,由于我们在返回值列表中声明了err,那么返回的err也就是nil,那么上一层调用了这个函数发现了err不为空自然会给出对应的错误逻辑,但是上一层并没有那么做,也就是说我们返回的err并不是nil!细心的你一定发现了26行的err是绿的,没错!原创 2022-12-02 20:23:11 · 222 阅读 · 0 评论 -
实现map有序输出
上面代码就是定义并初始化了一个map,定义了一个空切片sli,并遍历map将map的键都存进切片sli里,并对sli进行排序就得到了有序的键,最后只需要从切片sli里取出键即可。我们知道golang里的map是无序的,不像python里的字典还可以对键值对顺序反序啥的。所以我们下面手动实现map的有序输出,其实原理很简单!这里遍历map只取出键没取出值,这是因为知道键就能根据map直接得到值,所以提升了一点效率!原创 2022-11-15 22:17:20 · 1153 阅读 · 0 评论 -
切片和map遍历的优化
下面代码中定义了两种遍历切片的方式 RangeSlice_norm和RangeSlice_fast,快速方式在于遍历的时候不用每次都给value赋值而是通过已经拿到索引的条件下通过索引取值。可以看到在切片长度很大的情况下效率还是有一些提升的!原创 2022-11-11 09:34:13 · 223 阅读 · 0 评论 -
对slice进行append但切片容量不够
我们在上面结果可以看到,cap和len都是3,说明cap是不够的,因此是重新分配一个array!可以看到结果返回false,说明slice与newSlice第一个元素地址并不一样。哦吼,如果容量不够的话会重新分配一个array,而并不是我们想的原地追加。先看上面这段代码,你觉得结果是多少?原创 2022-11-08 10:35:10 · 111 阅读 · 0 评论 -
两种for循环效率比较
可以看到,它的for循环遍历中,初始化变量初始化了两个,一个i一个遍历的长度,确实妙,这样就不用每次for循环计算len(t)了。好家伙,快了10倍,学到了学到了!那我们也试试这样到底能快多少呗。原创 2022-11-03 20:32:54 · 381 阅读 · 0 评论 -
windows下go+vscode
右下角会出现让你安装一下module的弹窗,直接点install all。等待安装完成后,ctrl+s保存文件,然后运行,一定要保存在运行!然后打开Vscode,新建一个hello.go。原创 2022-10-08 19:20:01 · 205 阅读 · 0 评论 -
Ubuntu环境下安装VSCode以及Golang语言环境
本来想一步步全都写下来的,但是个人比较懒并且写这篇博客的主要目的就是方便自己以后安装,因此如果你哪一步不会可以私信我。需要注意的是Go官方要求要设置代理才能安装 Go Module的包。因此,我们在这一步结束后。转载 2022-10-08 18:54:49 · 321 阅读 · 0 评论