- 博客(97)
- 资源 (3)
- 收藏
- 关注
原创 # Go切片传递:小心,你的修改可能不会留下痕迹!
现在你已经知道了如何在Go中巧妙地处理切片,在函数内部进行修改而不留下遗憾。记住,Go的世界充满了魔法和惊喜,掌握了这些技巧,你就能更自信地驾驭它。别让你的切片修改像幽灵一样消失了!祝你编程愉快!
2024-04-19 12:06:03
431
原创 Golang中处理map和list的初始化问题
处理Go语言中的map和slice就像是处理厨房里的菜刀和气球。确保你的菜刀(map)在使用前已经磨好刃(被初始化),而对于那些看似空无一物但实际上充满潜力的气球(slice),记得你可以随时用append这台神奇的吹风机把它们吹起来。只要记住这些小技巧,你就能在Go语言的世界里大展厨艺,而不是在处理数据时手忙脚乱了。
2024-03-09 21:32:50
785
1
原创 Go使用unixSocket实现进程间传递文件描述符
描述因为项目需要接触了相关实现, 以此补足了这方面的知识.实现代码receiver先启动, 监听指定unix sock, 读取传递的文件并打开, 打印文件内容.sender负责进程内打开文件,并发送到指定unix sock中.文件内容为简单一行文本: hello chris.receiver实现package mainimport ( "fmt" "net" "os" "syscall")const ( // socksPath unixsock文件所在地址 sock
2020-09-07 19:52:00
1953
原创 [源码分析]go-graceful如何shutdown gracefully
概述服务的优雅关闭是指在关闭服务进程时, 不影响还在处理中的逻辑.总体上的要点只有两个:服务处于关闭中状态, 不再接收新的请求.等待还在处理中的请求, 可设置超时机制.经典应用场景进程接收到突发的中断信号平滑升级源码解析//graceful.gofunc (srv *Server) Serve(listener net.Listener) error { if srv.ListenLimit != 0 { listener = LimitListener(listener
2020-08-14 17:58:30
1436
原创 golang的闭包内引用值和range实现
问题描述一个简单的遍历功能func demo0(){ // 顺序遍历, i,a 地址不变, 值变化 arr := []string{"dog", "cat", "mouse"} for i, a := range arr{ fmt.Printf("func %d get %s\n", i, a) }}输出:func 0 get dogfunc 1 get catfunc 2 get mouse然后想要通过goroutine来完成并发func demo2(){ arr :=
2020-08-04 20:12:24
640
原创 【问题解决】Go1.14出现json: invalid number literal, trying to unmarshal "\"\"" into Number
问题描述在go 1.14中使用json.Number类型, 在json.Unmarshal时会返回错误json: invalid number literal, trying to unmarshal “\”\"" into Number解决方法暂时不要用go 1.14使用interface{}类型替代json.Number错误示例package mainimport ( /...
2020-04-30 15:34:42
2663
原创 golang并发http请求几种方式
概述go中方便的协程写法, 让并发变得很简单, 让开发者很多时候不需要关心协程(线程)管理的问题, 不过也是有值得注意的地方.下面以一个http请求的例子, 请求的服务是进制数据-手机号码归属地查询.(找了很久才找到方便学demo的免费API, 想跑demo的朋友注册一下即可)并发方式平时常用到两种方式做并发请求.简单一点, 一次请求开一个线程, 线程中完成请求与响应处理.严格一点,...
2020-04-05 17:20:57
20792
原创 golang在defer中处理异常error的方式
问题描述golang中异常需要自己判断并处理, 代码中常常会有很多如val, err := GetVal(key)if err != nil{ //handle err}之类的代码,但是当同一个函数内的代码中有多处处理异常, 并且处理方式统一时 , 可以用defer处理.这时常常犯一个错误.错误代码:package mainimport ( "fmt")func ...
2020-04-02 01:19:46
6006
1
原创 全局唯一键的一种生成方案(golang)
概述主要是两部分内容:设计一种不易冲突的唯一键生成方案.一次唯一键冲突的解决实录1. 设计一种不易冲突的唯一键生成方案.一句话说明使用纳秒数做36进制转换后得到的数字与字母组合成的值作为唯一键.足以应付中等并发量的服务(QPS约等于120).var num2char = "0123456789abcdefghijklmnopqrstuvwxyz"//10进制转16或36进制...
2020-03-23 01:05:47
1264
原创 问题解决方法: gin-contrib/cors给group路径下添加cors时,OPTIONS请求得到404响应
问题描述使用gin-contrib/cors想给gin的路由router添加CORS支持时, 如果只把cors中间件添加在某个group中, 会对浏览器发来的OPTIONS跨域请求返回404, 使跨域请求无法进行.问题代码package mainimport ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "ne...
2020-03-09 00:31:21
3669
原创 Python生成随机不重复数组
GolangPythondef get_random_list(start,stop,n): ''' 生成范围在[start,stop], 长度为n的数组. 区间包含左右endpoint ''' arr = list(range(start, stop+1)) shuffle_n(arr,n) return arr[-n:]def s...
2020-02-17 01:32:18
3283
1
原创 select配合time.After实现超时控制
package mainimport( "fmt" "time")func main(){ ch := make(chan string) go HeavyOperation(ch) // 函数耗时3s, 输出timeout // go LightOperation(ch) // 函数耗时1s, 输出light operation done select { ...
2020-01-02 15:22:39
688
原创 Error: use of .(type) outside type switch..(type)只能在switch中使用
.(type)判断类型只能在switch当中使用package mainimport( "fmt")func main(){ into := 0 checkType(into)}func checkType(into interface{}){ switch into.(type){ case int: fmt.Println("int") // int case...
2019-12-30 20:29:18
1148
5
原创 Golang判断元素是否存在数组中
个人常用函数func IsContain(items []string, item string) bool { for _, eachItem := range items { if eachItem == item { return true } } return false}使用方法:var word := "my"var sentence := "my wo...
2019-12-16 21:46:20
42143
1
原创 Golang中encoding/json关于omitempty的坑
一句话概括omitempty标签并不是省略空值, 而是省略变量类型对应的零值. 如果刚好赋值为零值, 会被json.Marshal方法省略掉. (我认为是bug)发现问题type TestStruct struct { BoolVar bool `json:"bool_var,omitempty"` IntVar int `json:"...
2019-12-16 21:25:51
6021
2
转载 go语言string、int、int64互相转换
#string到intint,err:=strconv.Atoi(string)#string到int64int64, err := strconv.ParseInt(string, 10, 64)#int到stringstring:=strconv.Itoa(int)#int64到stringstring:=strconv.FormatInt(int64,10)...
2019-12-09 10:46:33
465
原创 Go函数接收可变参数
package mainimport( "fmt" "reflect")func receiveSlice(manyints ...int) { //该函数可接收多个int参数, 打包为[]int类型slice fmt.Println(reflect.TypeOf(manyints), len(manyints), cap(manyints)) fmt.Printf("%#v \...
2019-12-03 21:24:16
697
原创 Golang拼接字符串的5种方法及其效率
package mainimport( "fmt" "time" "bytes" "strings")var loop = 100000func main(){ var s string s1 := "hello" s2 := "world" var start time.Time //加号+连接 start = time.Now() for i := 0; i&...
2019-12-03 10:42:24
4348
4
原创 Golang错误解析"runtime error: invalid memory address or nil pointer dereference"
概述从刚上手golang时就经常遇到这个错误, 三个月之后对golang有些了解, 开始理清一下原因.问题原因var p *Obj某个指针变量声明之后, 还没有经过赋值时默认指向nil, 直接调用指针就会报错runtime error: invalid memory address or nil pointer dereference示例package mainimport(...
2019-10-22 10:58:47
33076
原创 关于Go的零值
Go 语言之旅零值没有明确初始值的变量声明会被赋予它们的 零值。零值是:数值类型为 0,布尔类型为 false,字符串为 “”(空字符串)。实践在json反序列化时, 缺少的键值就会按零值处理.package mainimport "fmt"func main() { var i int var f float64 var b bool var s string...
2019-08-19 11:23:43
642
原创 【问题解决】go run无法拉取gitlab上的模块问题
问题描述go run .\main.gogo: finding gitlab.xxx.cn/xxx/xxx v1.3.9go: gitlab.xxx.cn/xxx/xxx@v1.3.9: unknown revision v1.3.9内部gitlab上 发现go mod无法拉取模块 一开始提示是unknown revision, 但是发现也不是版本问题执行基本的git clone发现也...
2019-08-15 16:48:22
2534
原创 关于Golang中defer执行顺序与运用的简明示例
不废话了,从例子中更好总结eg1: 执行与return位置自底向上大多数教材说defer方法是先进后出的栈结构, 但我认为从return位置向上找defer更直观package mainimport( "fmt")func main(){ example()}func example() { defer func(){ fmt.Println("1") }() ...
2019-08-09 11:36:46
349
原创 【问题解决】使用redis-go出现“invalid expire time in set“错误
问题描述err = client.Set(UserId, Bstr, 300).Err()提示invalid expire time in set问题解决与原因引入time moduleimport time改为err = client.Set(UserId, Bstr, 300*time.Second).Err()即可正常设置Set方法的定义如下:func (c ...
2019-07-25 13:12:22
4810
原创 【问题解决】go-gin使用c.JSON()返回JSON为空
问题描述今天使用c.JSON(), 返回前fmt.Println()可以正常输出, 但是c.JSON()一直返回为空.代码示例type Msg struct{ name string `json:"user"` message string number int}r.GET("/moreJSON", func(c *gin.Context) { // 直接...
2019-07-25 09:41:21
8133
原创 sublime+golang build配置go运行环境
安装sublime text 3http://www.sublimetext.com/3安装 Sublime Text 3 的 Package Control这是用来安装各种插件的入口. 我也不理解为什么不整合在一起.参考https://packagecontrol.io/installation#st3ctrl + ` 在下方输入import urllib.request,os,ha...
2019-07-22 11:45:27
3161
原创 Golang-goroutine实现筛法求素数(附性能测试)
算法原理参考自今日头条Go建千亿级微服务的实践 举出的goroutine例子代码//参数n, 找到(0,n)以内的素数func get_prime(n int) { origin, wait := make(chan int), make(chan struct{}) go FilterPrime(origin, wait) for i := 2; i <= n; i++ {...
2019-06-18 02:17:30
890
原创 Golang实现生产者消费者模型
代码package mainimport ( "fmt")func main() { c := make(chan int) go Producer(c) Consumer(c)}func Producer(c chan int) { for i := 0; i < 10; i++ { fmt.Println("Produce:", i) c <- ...
2019-05-30 20:46:02
1300
原创 Golang实现常用六大排序算法
使用Golang实现了以下排序算法:冒泡排序选择排序插入排序快速排序归并排序堆排序主函数package mainimport ( "fmt" "math/rand" "sort" "time")const ( num = 10000 // 测试数组的长度 rangeNum = 100000 // 数组元素大小范围)func main() {...
2019-05-30 19:50:25
3401
原创 Golang实现睡眠排序(SleepSort)
睡眠排序睡眠排序原理就是为一个长度为n的待排序数组创建一个长度为n的线程向量,将待排序数字作为线程sleep函数的参数,sleep完成后输出数字,那么数字越大sleep时间越长,就排到越后面.联想到Golang特点之一就是使用goroutine处理多线程情景, 因此做了尝试.多个goroutine休眠时间以数字大小成正比, 休眠结束后放入管道channel, 管道内数字排序即为数组升序排...
2019-05-26 01:44:04
2009
原创 从Python到Golang学习笔记
从本科学过C/C++和java,但是实际项目中用的多的是python. 因此python深刻影响了我的编程思维, 从python转到Go, 让我总结了一些学习笔记.静态/动态如果你在python之前没有C或JAVA等静态语言的代码量积累, 接触go之后, 编程习惯上最大的各种不同基本都可以归根于动态语言与静态语言的区别.简单来说,两门语言各自的编译解释的方式不同,造成了编程时思维的不同.py...
2019-05-23 04:01:06
1051
原创 大白话总结类《王者荣耀》等MOBA游戏中的网络同步机制
案例游戏:《英雄联盟》 《王者荣耀》等PVP游戏实际解决方案:同步机制:不锁步的帧同步网络:传输层的UDP配合应用层的可靠性检验以下从问题出发讨论解决方案。主要问题:1. 性能1) 服务端性能:具体表现为延迟,影响用户体验。2) 客户端性能:具体表现为卡顿。总结下来,与任何C/S应用一样,性能由服务端计算效率+网络延迟+客户端计算效率三部分决定。其中,网络延迟我们只能在so...
2019-03-13 22:21:50
5479
原创 先直播平台后抖音——不要再问用户需要什么
标题可能并没有多少热度,至今(2019.3.2),直播平台和抖音短视频媒体已经不是什么新鲜事物,甚至前者已经处在资本收敛期,难以称为大繁荣。此短文仅记录在应用发展过程中,个人在产品思维上的感悟。第一次写产品经验的博文,如果有任何让你的阅读感到不适,希望指出,谢谢。用户需要什么很经典的话题,似乎过去10年里产品的需求分析都在打算解决这个问题。微博的繁荣,一定程度上取决于合理的发布/订阅模式——...
2019-03-02 03:27:45
340
原创 阻碍程序员发展的那些糟糕翻译(持续更新)
回想学习历程中, 总有15%-20%的精力白白浪费在一些翻译造成的弯路上. 有时甚至因为一两个名词的失败翻译而影响对整体概念的理解, 回看英文解释都会有豁然开朗的感觉. 令人费解的, 中文互联网里充斥着各种糟糕翻译.句柄(Handler)比如文件句柄, 就像handler一样是一个扳手或者门把一样的东西.给你一个门把你就可以开门而不需要在意门的形状大小材质. 比如,得到一个文件句柄,进程就可...
2019-03-02 00:53:36
579
1
原创 服务注册与发现-学习笔记
学习文章: 分布式(一) 搞定服务注册与发现直觉方法:)使用redis更新<服务,ip-port>的字典,并由客户端定时更新.缺点:更新并不频繁,导致客户端发出浪费大量的更新请求.定时更新无法取代实时更新.服务非正常down掉时,没法及时更新redis,从此服务的错误地址没法被正常删除.Dubbo的解决方法(红框中):以发布/订阅模式, 注册处保留订阅了服务的客...
2019-01-24 17:43:44
300
原创 python实现观察者设计模式
参考文章:观察者模式 | 菜鸟教程教程由java实现, 本文以python实现.功能相同.1. 观察者模式实现效果Subject类为主, 当subject对象的值改动时.发布通知到各个注册了的观察者对象当中. 观察者接受通知并分别输出值的二进制,十进制,十六进制.2. 关键逻辑subject中维护一个观察者列表observers, 观察者主动注册, 通知时遍历列表.观察者类继承于同...
2019-01-17 18:13:14
364
原创 为什么要写技术博客
我从2017年年底开始写博不会轻信信息源了. 这点是非常明显的,因为一旦开始写博客,你就是信息的创造者,会经历一些写作者的心理历程, 最简单地说, 一些概念你会试着用一个生造的名词来表达. 那么当你以后再次阅读到某个非常做作的名词时,以前的第一反应是觉得自己的知识储备没有跟上po主的思维,但现在只会觉得作者在把一个简单的概念复杂化....
2019-01-05 03:08:30
147
转载 反向索引,为什么称之为反向索引?
目录 正向索引:从文档到单词。 反向索引:从词到文档。 现实世界中的索引 问题 搜索引擎如何创建索引? 结论 Reference &lt;p&gt;在谈论搜索引擎的索引时,会涉及到两个概念正向索引(forward index)和反向索引(inverted index)。&lt;/p&gt;听上去,它们...
2018-12-24 00:31:34
2303
原创 2019迅雷校园招聘后端工程师面试总结
复试复试总结复试可以说是很有质量了. 面试面多了其实会知道面试官有个套路:就是先从一个简单的问题开始试探,从你的表达就可以知道继续问多深了. 但复试几乎连试探都没有, 对着简历开始提问. 知识点都不是网上刷面试题见到的. 答起来很吃力, 大概只有一半的题目是我这一年里有专门准备过的. 全程更像是一场一个多小时的程序员技术交流, 对于我不懂的问题也给出了解答.另一半都是凭印象或者自己的理解...
2018-10-25 00:12:46
966
转载 Django 多线程问题是怎么回事?
作者:Pegasus Wang链接:https://www.zhihu.com/question/56472691/answer/292510026来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。简单的说就是服务端监听 socket 每次 accept 一个新的请求后,开一个线程处理 这个 socket 客户连接。如果你对底层实现原理感兴趣,可以继续看下去,从...
2018-10-24 10:14:45
3129
NotoSansCJK-Regular.zip
2020-02-14
[人民邮电出版社]推荐系统实践-项亮
2018-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人