
go语言
文章平均质量分 61
go语言
-_-void
这个作者很懒,什么都没留下…
展开
-
goland远程调试k8s上容器
goland远程调试k8s上容器 上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,这回绕不过去了,老老实实整一把。主要还是用dlv配合goland的远程调试功能。原创 2022-09-01 20:16:10 · 89562 阅读 · 1 评论 -
一个小技巧:修改swagger源码让postman更好用
本文假设你知道swagger,并且会用go:generate swagger generate spec -o swagger.json生成json。首先生成的swagger.json是可以直接导入到postman的,其中的example会导入到postman的example。// SignInParameter// swagger:parameters SignIntype SignInParameter struct { // required: true // in: body Data原创 2021-01-03 11:35:00 · 4654 阅读 · 0 评论 -
Go并发模型:流水线与取消(Pipelines and cancellation译文)
Go并发模型:流水线与取消 (Go Concurrency Patterns: Pipelines and cancellation)本文不只是简单的翻译,有些地方根据自己的理解用中文习惯重新组织了语言,所以可能会有局部的顺序不同,但是读起来更通顺。所以如果对文中任何部分有疑问可以直接体温,保证知无不言。英文原版: https://blog.golang.org/pipelines简介go语言的并发机制可以使CPU及IO更高效的处理数据流。本文展示几个例子来介绍下流水线以及执行操作失败时的细节,翻译 2020-06-23 15:27:07 · 7906 阅读 · 0 评论 -
go语言interface设计的一点思考
昨天到公司看到有人在群里把go跟java的interface做比较,提出go宣称的“非侵入式”好像也没那么好用,甚至跟java差不多。但实际上go语言的接口设计并不只是语法本身,也包含了开发流程跟思维方式在里面,下面把当时在群里的回答整理一下放出来。其实可以这样来理解:Java语言的开发风格是设计先行,即先定义规范,然后去挨个实现(就是先定义有什么方法,然后再写出来方法体)。而go语言是“先做再说”,即先把功能实现,然后抽取出接口。在实际开发流程中,早先的从文档到代码的流程,确实Java更符合。但是原创 2020-06-23 11:28:12 · 276 阅读 · 1 评论 -
Go并发实践
Go并发实践废话不多说,先来几行代检验下你是否适合本文,如果你发现看不懂建议先去看看简单点的东西。go f()go f("abc", 123)ch := make(chan int)go func() { c <- 123}()fmt.Println(<-ch)简单的例子ok,下面假设这样一个场景,有一家新闻媒体会持续向官方网站输出最新消息,刚好他们的后端提供了一个api可以获取指定分类的最新消息以及该类别预计下次有新消息的时间。我们再假设一下,他们还提供了一个SDK来帮助我们原创 2020-06-18 19:02:08 · 14064 阅读 · 0 评论 -
Go并发模型:超时,继续(Timing out, moving on译文)
Go并发模型:超时,继续 (Go Concurrency Patterns: Timing out, moving on)英文原版: https://blog.golang.org/concurrency-timeouts并发编程有它自己的特点,比如超时。虽然go语言的channel没有直接支持,但是这些特点很容易被实现出来。假设我们想从一个channel读取数据,并且最多等他1秒钟,首先可以创建一个带信号的channel然后开一个goroutine先sleep1秒再往channel发数据:timeo翻译 2020-06-15 16:07:43 · 2313 阅读 · 0 评论 -
golang从channel读数据的各种情况
文章目录用var定义channel且不make用var定义channel且make直给写操作加for直给读操作加for读写都加for读channel的第二个返回值关闭channel继续读写完然后关闭channel再开始读加个selectchannel未及时关闭总结用var定义channel且不makewg := sync.WaitGroup{}var ch chan stringread := func() { fmt.Println("reading") s := <-ch fmt.原创 2020-05-22 15:18:37 · 20080 阅读 · 0 评论 -
golang的map为什么不设计成同步(安全)的
map可能是其他比较大的数据结构或者算法的一部分,而这些数据结构或者算法可能已经是同步的了。这种情况下如果map本身也保证同步的话,就需要每个map本身都维护一个锁,毫无疑问这样会在同步方面多此一举的同时拖累程序。需要注意的是,正因为map采取了这样的设计,所以在用map的时候一定注意,如果异步做修改操作会导致程序崩溃。(异步读数据没问题)另外,有时候线程安全的map还是需要的,除了自己加锁之外,可以用sync.Map,具体用法源码及其注释已经介绍的很清楚了。对其实现感兴趣的可以看下它的Store方原创 2020-05-21 21:55:53 · 3089 阅读 · 0 评论 -
golang为什么用协程而不是线程
当协程阻塞的时候,运行时会自动将统一操作系统线程上的其他协程移动到另一个可运行的线程上,这样这些协程就不会阻塞,并且这个操作对开发人员来说是透明的。调用协程的开销很小,大概只在内存的栈区用几KB,而且通常几KB就够用了。即便不够用,运行时也会自动在栈区多分配点。每次方法调用平均只占用3个CPU指令。数据来源:https://golang.org/doc/faq...原创 2020-05-21 21:24:15 · 2479 阅读 · 4 评论 -
GoModule:v2及新版本(Go Modules: v2 and Beyond译文)
GoModule:v2及新版本英文原版:https://blog.golang.org/v2-go-modules介绍这是系列文章的第一部分1-使用GoModule2-迁移到GoModule3-发布GoModule4-GoModule: v2及新版本(当前)随着项目中新需求的添加,之前的功能和设计可能不太合适。开发者可能移除废弃的function,重命名type、或者将package分割...翻译 2020-03-21 11:19:37 · 1990 阅读 · 0 评论 -
发布GoModule(Publishing Go Modules译文)
发布GoModule英文原版:https://blog.golang.org/publishing-go-modules介绍这是系列文章的第二部分1-使用GoModule2-迁移到GoModule3-发布GoModule(当前)4-GoModule: v2及新版本本文讨论如何编写和发布module,以便其他module可以依赖它们。请注意:这篇文章涵盖了v1及以下版本的开发...翻译 2020-03-20 22:54:18 · 1494 阅读 · 0 评论 -
迁移到GoModule(Migrating to Go Modules译文)
迁移到GoModule英文原版:https://blog.golang.org/migrating-to-go-modules介绍这是系列文章的第二部分1-使用GoModule2-迁移到GoModule(当前)3-发布GoModule4-GoModule: v2及新版本Go项目使用多种依赖管理策略,像dep和glide这种vendor模式的工具很流行,但是他们的行为有很大差异,...翻译 2020-03-20 21:43:25 · 1934 阅读 · 0 评论 -
使用GoModule(Using Go Modules译文)
使用GoModule英文原版:https://blog.golang.org/using-go-modules介绍这是系列文章的第一部分1-使用GoModule(当前)2-迁移到GoModule3-发布GoModule4-GoModule: v2及新版本Go1.11和Go1.12包含了初步的GoModule支持,这是一种新的依赖管理系统,它能够更简单精确地管理依赖包的版本信息。...翻译 2020-03-20 16:35:45 · 2132 阅读 · 0 评论 -
当macaron的session配了redis并且遇上了websocket——一个session“不”更新的bug
文章目录排错过程解决方案上个月刚好是go语言9周年,忽然发现入坑go语言也两年了,把最近一次遇到的bug分享一下,后面有时间再把这两年的基类慢慢倒出来。着急解决问题的直接点上面“解决方案”排错过程功能描述:点击项目名称切换项目。实现逻辑:前端调用后端切换项目接口,后端更新session中的项目ID,前端收到返回后刷新页面。问题描述:点击项目名称,等待刷新后出现原项目页面。我在这首...原创 2018-12-03 20:35:35 · 1190 阅读 · 0 评论 -
glide包管理
glide包管理glide包管理工程根目录新建一个文本文件命名为glideyaml编辑内容大致如下字段含义工程根目录新建一个文本文件命名为glide.yaml编辑内容大致如下:package: package/nameignore:- package/name/need/ignoreimport:- package: package/name/1 version: 1.0.0- pac原创 2017-06-20 08:51:28 · 1533 阅读 · 0 评论 -
go基本语法
go基本语法go基本语法变量基本类型定义变量数组slicemapstruct自定义类型常量语句函数面向过程的函数定义函数函数返回值变长参数传值与传指针函数作为类型与变量方法面向对象的方法方法的继承重写继承的方法interface接口作为参数接口定义变量comma-ok接口继承代码分组规则defer并发通信channelselectrunt原创 2017-06-20 08:26:58 · 4220 阅读 · 0 评论