- 博客(87)
- 资源 (24)
- 收藏
- 关注
原创 goland远程调试k8s上容器
goland远程调试k8s上容器 上次也遇到过一次需要在k8s的容器里debug程序的情况,当时找了个偷懒的办法绕过去了,这回绕不过去了,老老实实整一把。主要还是用dlv配合goland的远程调试功能。
2022-09-01 20:16:10
89510
原创 一个小技巧:修改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
4639
原创 5分钟用kubeadm部署k8s
kubeadm部署k8s玩了两年rke,想试试原生k8s,没想到部署起来还挺容易的,直接上干货,有问题留言。文章目录kubeadm部署k8s配置主机安装依赖kubeadmdocker配置kubeadm并拉起k8s使用kubectl添加Node添加网络插件清理排障etcd容器报错: pkg/flags: conflicting environment variable "ETCD_ADVERTISE_CLIENT_URLS" is shadowed by corresponding command-lin
2021-01-02 09:59:52
5723
翻译 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
7886
原创 go语言interface设计的一点思考
昨天到公司看到有人在群里把go跟java的interface做比较,提出go宣称的“非侵入式”好像也没那么好用,甚至跟java差不多。但实际上go语言的接口设计并不只是语法本身,也包含了开发流程跟思维方式在里面,下面把当时在群里的回答整理一下放出来。其实可以这样来理解:Java语言的开发风格是设计先行,即先定义规范,然后去挨个实现(就是先定义有什么方法,然后再写出来方法体)。而go语言是“先做再说”,即先把功能实现,然后抽取出接口。在实际开发流程中,早先的从文档到代码的流程,确实Java更符合。但是
2020-06-23 11:28:12
269
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
14057
翻译 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
2288
原创 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
20041
原创 golang的map为什么不设计成同步(安全)的
map可能是其他比较大的数据结构或者算法的一部分,而这些数据结构或者算法可能已经是同步的了。这种情况下如果map本身也保证同步的话,就需要每个map本身都维护一个锁,毫无疑问这样会在同步方面多此一举的同时拖累程序。需要注意的是,正因为map采取了这样的设计,所以在用map的时候一定注意,如果异步做修改操作会导致程序崩溃。(异步读数据没问题)另外,有时候线程安全的map还是需要的,除了自己加锁之外,可以用sync.Map,具体用法源码及其注释已经介绍的很清楚了。对其实现感兴趣的可以看下它的Store方
2020-05-21 21:55:53
3073
原创 golang为什么用协程而不是线程
当协程阻塞的时候,运行时会自动将统一操作系统线程上的其他协程移动到另一个可运行的线程上,这样这些协程就不会阻塞,并且这个操作对开发人员来说是透明的。调用协程的开销很小,大概只在内存的栈区用几KB,而且通常几KB就够用了。即便不够用,运行时也会自动在栈区多分配点。每次方法调用平均只占用3个CPU指令。数据来源:https://golang.org/doc/faq...
2020-05-21 21:24:15
2460
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
1955
翻译 发布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
1482
翻译 迁移到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
1918
翻译 使用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
2120
原创 在gitlab通过webhook触发Jenkins的job中用script获取当前分支
文章目录webhook给jenkins发了什么找对分支名了吗第一种方法调整分支第二种方法调整分支感谢webhook给jenkins发了什么gitlab触发jenkins的job是通过webhook完成的,也就是一次http请求,请求体在jenkins的job的ConsoleOutput中可以看到。长这样子(网页上的json是一坨,这里format了一下):GenericWebhookEnvi...
2020-03-18 21:13:26
3843
1
原创 【个人笔记】rancher远程调试搭建
rancher远程调试搭建文章目录rancher远程调试搭建配置主机(关防火墙,关SELinux)安装docker安装go环境下载go配置环境变量安装dlv拉代码配置goland远程代码远程调试运行docker运行rancher-ui安装nodejs安装 yarn拉代码启动访问dockerfile说句闲话:这本是一篇笔记,本来没想发出来,但是突然有道云这个坑货,将另一篇笔记的内容完全覆盖了这一...
2020-01-03 15:48:11
1584
原创 Windows10访问Ubuntu子系统(WSL)的桌面环境
Windows10下访问Ubuntu子系统(WSL)的桌面环境文章目录Windows10下访问Ubuntu子系统(WSL)的桌面环境Why Linux ?Why WSL ?开始WSLUbuntu换源更新与升级安装桌面环境xubuntu安装远程桌面服务xrdp配置xrdp端口配置xsession此时建议重启一下电脑启动xrdp远程连接汉化安装chrome安装中文输入法美化结语Why Linux ...
2019-05-14 19:44:52
71831
33
原创 当macaron的session配了redis并且遇上了websocket——一个session“不”更新的bug
文章目录排错过程解决方案上个月刚好是go语言9周年,忽然发现入坑go语言也两年了,把最近一次遇到的bug分享一下,后面有时间再把这两年的基类慢慢倒出来。着急解决问题的直接点上面“解决方案”排错过程功能描述:点击项目名称切换项目。实现逻辑:前端调用后端切换项目接口,后端更新session中的项目ID,前端收到返回后刷新页面。问题描述:点击项目名称,等待刷新后出现原项目页面。我在这首...
2018-12-03 20:35:35
1180
原创 微信小程序初步认识
微信小程序初步认识微信小程序初步认识代码结构appappjsappjsonappwxsspagewxmljs数据绑定wxssjson库写在前面:本文不是官方文档的照搬,也不是官方文档的简写。而是笔者写了几个demo后的一些感受与总结,按照笔者的思路进行介绍。例如会在介绍app与page时拿android作对比,介绍数据绑定时拿vue作对比,来方便初次接触微信小程序的开发者快
2017-07-02 18:28:47
2087
原创 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
1526
原创 go基本语法
go基本语法go基本语法变量基本类型定义变量数组slicemapstruct自定义类型常量语句函数面向过程的函数定义函数函数返回值变长参数传值与传指针函数作为类型与变量方法面向对象的方法方法的继承重写继承的方法interface接口作为参数接口定义变量comma-ok接口继承代码分组规则defer并发通信channelselectrunt
2017-06-20 08:26:58
4197
原创 C#之xml操作
创建XML文档对象创建根节点读取根节点根据名称获取子节点创建普通节点给节点设置属性获取指定节点的某个属性值保存xml创建XML文档对象XmlDocument xmlDoc = new XmlDocument();创建根节点XmlElement root = xmlDoc.CreateElement("root");xmlDoc.AppendChild(root);读取根节点XmlE
2016-08-09 17:51:17
1497
原创 WPF之UI知识总结
文件夹选择框在程序集中内置资源打开新窗口弹出提示框TextBox多行文本TextBlock多行文本文本显示控件文字颜色下拉选择框控件设置背景色设置点击事件设置控件z轴顺序文本对齐方式从父控件移除文件夹选择框System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowser
2016-08-09 17:50:09
693
原创 Java语言实现六种排序算法
Java语言实现六种排序算法Java语言实现六种排序算法冒泡排序插入排序归并排序快速排序希尔排序选择排序C语言版点此穿越冒泡排序从左到右依次比较相邻两个元素,如果大的在左边则交换这两个元素。 如果在依次遍历中执行过交换操作,则再次遍历,直到不发生元素交换。public static int[] sort(int[] num){ int length=num.length;
2016-07-15 11:50:09
868
翻译 AsyncTask官网API翻译
官方API翻译AsyncTask使开发者可以更轻松的使用UI线程。这个类使开发者无需操作Thread或Handler便可执行后台操作并将结果返回到UI线程。 AsyncTask被设计为一个围绕Thread和Handler的辅助类,并且不构成通用线程框架。理论上AsyncTask应该被用于几秒钟的短作业,如果线程需要运行一段时间,强烈建议使用java.util.concurrent包下的Excuto
2016-07-14 20:15:36
1115
原创 【Android自助餐】Handler消息机制完全解析(五)鸟瞰与总结
Android自助餐Handler消息机制完全解析(五)鸟瞰与总结Android自助餐Handler消息机制完全解析五鸟瞰与总结MessageMessageQueueHandlerLooper总结Message用于发送的消息本身。常用字段有what、obj等。这里没什么好说的,无非是一些消息内容及其getter、setter。要说有点营养的就是那些botain()方法了,具体内容可以看A
2016-07-13 20:54:30
8656
原创 【Android自助餐】Handler消息机制完全解析(四)Looper解析
Android自助餐Handler消息机制完全解析(四)Looper解析Android自助餐Handler消息机制完全解析四Looper解析Looper初始化prepare提供looper获取接口myLooper处理消息队列loopLooper如果你搞过Arduino,那么你肯定知道这个loop()方法。没接触过也没关系,这个方法就是一个通过死循环来重复做某件事的方法。区别是Arduion
2016-07-13 20:53:48
10249
原创 【Android自助餐】Handler消息机制完全解析(三)Handler解析
Android自助餐Handler消息机制完全解析(三)Handler解析Android自助餐Handler消息机制完全解析三Handler解析Handler构造方法创建消息obtainMessage发送消息sendMessage移除消息removeMessage处理消息dispatchMessageHandler这便是我们平时直接使用的主角。继承Handler重写其handleMes
2016-07-13 20:53:03
9060
原创 【Android自助餐】Handler消息机制完全解析(二)MessageQueue的队列管理
Android自助餐Handler消息机制完全解析(二)MessageQueue的队列管理[toc] 关于这个队列先说明一点,该队列的实现既非Collection的子类,亦非Map的子类,而是Message本身。因为Message本身就是链表节点(见Android自助餐Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉)。 队列中的Message
2016-07-13 20:51:01
13862
2
原创 【Android自助餐】Handler消息机制完全解析(一)Message中obtain()与recycle()的来龙去脉
提供obtain回收recycle提供obtain()在obtain的所有重载方法中,第一行都是Message m = obtain();,即调用空参的方法。 先来看一下这个空参方法public static Message obtain() { synchronized (sPoolSync) { if (sPool != null) { Mes
2016-07-13 20:42:31
15102
2
原创 Android自助餐之大图片加载
Android自助餐之大图片加载原理使用BitmapFactory.decodeStreeam()方法,该方法会调用native层代码来创建bitmap(两个重载都会调用)使用带BitmapFactory.Options参数的方法,改参数可指定生成bitmap的大小思路根据View尺寸或Window尺寸来确定bitmap的尺寸将确定好的尺寸放入BitmapFactory.Options调
2016-07-11 19:26:00
5630
原创 C语言实现六种排序算法
C语言实现六种排序算法C语言实现六种排序算法冒泡排序插入排序归并排序快速排序希尔排序选择排序下载完整源代码冒泡排序从左到右依次比较相邻两个元素,如果大的在左边则交换这两个元素。 如果在依次遍历中执行过交换操作,则再次遍历,直到不发生元素交换。int * sortByMaopao(int * num,int length){ bool flag=true; while(f
2016-07-02 13:58:54
5254
1
原创 Android自助餐之RxJava手册
Android自助餐之RxJava手册Android自助餐之RxJava手册下载完整源代码观察者被观察对象方法封装类型转换线程控制下载完整源代码观察者Observer onNext()onCompleted();onError();Subscriber 继承ObserveronStart();在开始发送事件前subscriber.unsubscribe();取消订阅被观
2016-06-23 18:53:18
1592
原创 Android自助餐之notification
通知栏各种玩法NotificationSample网上各种玩法的demoSimpleNotificationDemo简单的通知实现CustomNotificationDemo自定义通知栏demo,实现自定义view与动态更新通知内容知识点Notificationnotification.bigContentView = view;这么做可以自定义通知的高度,但最大为200,最小为普通通知高度。如果
2016-06-18 01:24:37
1983
原创 Android自助餐之Jni(六)NDK入门
Android自助餐之Jni(六)NDK入门Android自助餐之Jni六NDK入门Android自助餐专栏Android自助餐之Jni一最简单的运行Android自助餐之Jni二静态导入so文件Android自助餐之Jni三动态导入so文件Android自助餐之Jni四在线导入so文件Android自助餐之Jni五进阶用途步骤Androidmk文件内容ndk已定义变量modu
2016-06-18 01:12:40
1596
翻译 Retrofit官网翻译
RetrofitAndroid和Java平台下类型安全的HTTP客户端简介Retrofit将HTTP API转换为Java接口public interface GitHubService{ @GET("user/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user);}Retrofit类生成GitHu
2016-06-16 20:41:39
3205
原创 Android自助餐之解析zip
Android自助餐之解析zipAndroid自助餐之解析zip获取文件的所有节点游标遍历每个节点处理一个节点解压文件思路解压某个ZipFile到指定目标路径直接用的代码获取文件的所有节点游标Enumeration entries = zipFile.entries();//ZipFile为java.util.zip.ZipFile遍历每个节点while(entries.hasMoreEl
2016-06-16 20:40:17
5589
原创 回看当年写的数独游戏重温WPF
毕业以来一直从事Android开发,很多在学校期间自学的东西都快忘了。今天拉肚子没上班,借此机会整理一下当时做的数独游戏用到的WPF相关知识点。会过,就不能让它忘了! [toc]重温WPF下载完整源代码窗口布局文件xaml根节点为<Window>表示当前窗口 WindowStyle设置为None表示不要标题栏AllowsTransparency设置为True表示允许透明WindowStar
2016-06-12 19:19:36
1752
JavaIo流分析图
2015-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人