自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(37)
  • 收藏
  • 关注

转载 Go grpc 与 protobuf

现在很多微服务内部的通信协议都采用rpc,性能高,安全。而grpc则是google退出的rpc plus。protobuf是传输协议,性能高,强大。来一个server client的通信demo,感受一下这2个的魅力。首先,我们要约定好接口和数据结构,起名helloworld.proto:go get -u github.com/golang/protobuf/pro...

2019-06-26 16:51:00 173

转载 Go 初体验 - 错误与异常处理 - recover和panic

先看代码:输出:内建函数panic可以让我们人为地产生一个运行时恐慌。不过,这种致命错误是可以被恢复的。在Go语言中,内建函数recover就可以做到这一点。实际上,内建函数panic和recover是天生的一对。前者用于产生运行时恐慌,而后者用于“恢复”它。不过要注意,recover函数必须要在defer语句中调用才有效。因为一旦有运行时恐慌发生,当前函数以及在...

2019-02-22 15:26:00 133

转载 Go 初体验 - 闭包,数组,切片,锁

我们先假设一个需求,创建一个数组,里面存放 0 - 99 的整数。上代码:输出:然而并不是我们想要的结果,很多重复数值。释义:12行这个闭包函数对 i 的传递并非深拷贝,而是传递了变量指针,也就意味着多个协程访问的时候操作的是同一块内存。当某一个协程修改了i的值,导致多个协程append的时候i的值发生变化,简单的说就是一个更改,多个读取同时存在,很多个协...

2019-02-22 13:13:00 171

转载 beego 初体验 - 上传文件

页面:controller:将form表单文件上传到本地,并保存。转载于:https://www.cnblogs.com/Eysa/p/10417480.html

2019-02-22 11:45:00 125

转载 Go 初体验 - 并发与锁.3 - 竞态

竞态,就是多个协程同时访问临界区,由并发而产生的数据不同步的状态。这个说的有点low,没办法,我就是这么表达的,官方的请度娘。先上代码:输出:为何不是1000?就是因为竞态,发生竞态后,最终的输出是以最后一个协程执行的结果为准,但最后一个协程有一定的随机性,不是先跑先完。改一下代码:输出:因为加了锁,这1000个协程是按照队列的顺序执行12行,...

2019-02-21 19:31:00 93

转载 Go 初体验 - 并发与锁.2 - sync.WaitGroup

sync包里的WaitGroup主要用于协程同步计数主协程创建的子线程 WaitGoup.Add(i)调用清除标记方法WaitGroup.Done()使用WaitGroup.Wait()来阻塞,直到所有子线程(标记=0)执行完毕看代码:代码都有注释,不难理解。看到这里有C#语言基础的童鞋是不是觉得有点像 Task.WaitAll(),没错,思想都是一样的。...

2019-02-21 19:16:00 93

转载 Go 初体验 - 并发与锁.1 - sync.Mutex 与 sync.RWMutex

==== Mutex为互斥锁,顾名思义,被Mutex锁住的代码同时只允许一个协程访问,其它协程进来就要排队如何使用?看代码:输出:释义:并发1000个协程同时更改m的元素,这样会有一部分更改成功,但是还有一部分会出现竟态,造成并发错误,输出结果很明了如何避免:放开26行,30行便可作用是锁住临界区28行,这样就能保证28行同时只有一个协程访问,其他协程...

2019-02-21 18:20:00 110

转载 Go 初体验 - 反射

首先,反射虽强大, 但不可乱用,会有性能损耗直接上代码:输出:代码并不难理解,不做解释转载于:https://www.cnblogs.com/Eysa/p/10412286.html...

2019-02-21 14:24:00 61

转载 Go 初体验 - 常量 与 iota

常量的概念跟大多数语言一样,都是定义一个不可变的数值go 语言支持常量,但没有 C# 中的枚举类型,所以常量在 go 语言里多用于枚举上代码,有注释输出:在来看这个代码:注释已说明结果iota 其实就是常量中的计数器,不管有没有显示的调用 iota,iota 的值都随着常量组中的个数而增长再看:输出:1 6 12 24常...

2019-02-21 13:48:00 58

转载 Go 初体验 - 错误与异常处理

错误处理是学习任何编程语言都需要考虑的一个重要话题go 内置的 error 接口是这样的:先上代码:输出:释义:我们首先定义9行的自定义错误类型30行再实现 error 接口34定义打开文件的方法输出结果就是执行了31行我们自定义的 Error 方法,返回值为 nil另外还有 panic() 和 recover() 方法,本文不做解释还...

2019-02-21 12:56:00 86

转载 Go 初体验 - 闭包的几种情况

闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。很抽象吧?go 语言中闭包有3种先来看第1种闭包的代码:这是调用:输出:释义:...

2019-02-20 18:34:00 78

转载 Go 初体验 - channel.2 - 超时机制

channel 虽然很好用,但是我们也要考虑异常情况,比如:超时go 语言怎么解决这个超时问题呢?可以利用 select 语句:select 的用法与 switch 语言非常类似,由 select 开始一个新的选择块,每个选择条件由 case 语句来描述。与 switch 语句可以选择任何可使用相等比较的条件相比,select 有比较多的限制,其中最大的一条限制就是每...

2019-02-20 17:21:00 156

转载 Go 初体验 - channel.1 - 基本用法

channel 分为两种:1. 无缓冲 channel2. 缓冲 channel无缓冲 channel 的使用必须遵循一个原则:推送和读取必须同时存在,否则就发生死锁先上代码:这里定义了一个 int 型的信道 c1,然后通过辅助协程并行给 c1 推送 v(就是 i)然后又在主协程读取。输出:有缓冲 channel 必须遵循一个原则:要确保 ...

2019-02-20 14:24:00 1105

转载 Go 初体验 - 死锁的几种情况

go 语言里,channel 是一个重要的对象和概念,它是通信的基础实现如何实例化:ch := make(chan int)由 channel 通信引起的死锁共有3种:第一种是因为给 ch 推送消息而没有读取,这时会阻塞当前携程,如果是 main,那么编译就报错 deadlock第二种是因为读取 ch1 时 ch1 又在读取 ch2,而 ch2 并没有推送消息,故...

2019-02-20 14:05:00 158

转载 Go 初体验 - 令人惊叹的语法 - defer.4 - defer 对宿主函数返回值的影响

defer 函数可以影响宿主函数的返回值看代码:调用:输出:结果又让人意外了。coo1:因为传引用,return 时 i = 100, return 返回的也是 100,return 执行之后执行 defer 将 i 变为 300,故,i = 300,r = 100coo2:因为传引用,return 时 i = 100, return 执行后 defe...

2019-02-20 13:46:00 111

转载 Go 初体验 - 令人惊叹的语法 - defer.3 - defer 函数参数计算时机

defer 函数的参数计算时机定义一个 defer 函数,接收参数 n:调用:输出:有点惊讶,为什么不是 100 200 200?go 语言里,defer 函数的参数是在定义位置被计算的,也就是说 defer 函数在哪,它的参数值就是那时的结果,不管后面还有什么算法,defer 函数的参数值都不会再改变,或许这是一种缓存吧。转载于:https:/...

2019-02-20 13:19:00 183

转载 Go 初体验 - 令人惊叹的语法 - defer.2 - 如何提前执行?

上一文中讲到 defer 会在宿主函数 return 之前调用,那么我们就是想在宿主函数执行到中间调用,怎么办呢?1. 改变宿主函数逻辑,分成多个函数,需要的那个函数里 defer。2. 使用匿名函数,将 defer 包在匿名函数里:调用:输出:可以看到,defer 的那个 unlock 实在匿名函数执行完成之前被调用的,已经跑到了 exit inner...

2019-02-20 13:03:00 81

转载 Go 初体验 - 令人惊叹的语法 - defer.1 - 基本概念和用法

在我们编程时,难免遇见 流、远程连接、文件等 io 操作,为了高性能,我们不得不打开和关系这些 io 对象。在 java、C# 语言里这些打开和关闭的操作都需要程序员自己选择操作时机,一般是在 io 操作完成之后就关闭它。但是在 go 语言里提供了一种更优雅的方式:defer。翻译为:延迟。先上代码:输出:因为 defer 关键字 foo2 中的 foo1 被...

2019-02-20 12:02:00 148

转载 beego 初体验 - 参数与传值

beego 支持 restful 风格的 url传值分为路由传值和表单传值,表单传值可以绑定实体对象1行 :id/:date 就是路由传值2.3行是表单传值的路由配置后台如何接收?这是controller:还是很方便的转载于:https://www.cnblogs.com/Eysa/p/10399514.html...

2019-02-19 10:26:00 341

转载 beego 初体验 - 基础模块 - session, cookie

beego 内建 session 模块首先,需要在项目中开启 Session,两种方式,以编码的方式或配置这是代码实现:配置文件:这是调用:转载于:https://www.cnblogs.com/Eysa/p/10397415.html...

2019-02-18 19:32:00 85

转载 beego 初体验 - 基础模块 - config, httplibs, logs

beego 的基础模块支持了一些web开发常用的功能。配置,http操作库,日志配置模块:这是我的配置文件如何读取:httplibs:这是一个利用 httplibs 发起 get 请求的示例logs:logs.NewLogger(1) 这行代码是获取 log 对象以及设置缓冲区大小,图中为1,即,产生一条日志就存储over转载于:h...

2019-02-18 19:14:00 103

转载 beego 初体验 - 路由

beego 的路由系统写的很精简直接将 url 和要映射的 controller 类关联起来就OK:然后再放一张 login 的 controller 实现,刚好展示下同一个 url 映射到不同方法:转载于:https://www.cnblogs.com/Eysa/p/10395998.html...

2019-02-18 15:46:00 94

转载 beego 初体验 - orm - 增删改查

本文记录一下 beego orm 简单的增删改查,大牛请绕道。首先,注册4个增删改查的路由:其次,在 views 文件夹下增加对应的模板(页面):controller 类里写上增删改查的方法:这样就可以啦。转载于:https://www.cnblogs.com/Eysa/p/10395228.html...

2019-02-18 13:54:00 602

转载 beego 初体验 - orm

goland Terminal运行命令:go get github.com/astaxie/beego/orm安装go mysql驱动:go get github.com/go-sql-driver/mysql添加实体模型,配置orm启动方法,运行bee run名称生成数据库架构:连接字符串自行设置,另外需要在main.go文件添加orm启动包:至此,...

2019-02-18 12:02:00 90

转载 beego 初体验 - 环境搭建

首先,安装go运行时和beegobeego,在git bash 运行命令:gogetgithub.com/beego/beegogetgithub.com/astaxie/beegogo new MyFirstBeegoDemo注意环境变量里面的配置。这是生成项目的目录结构:ide我用的是GoLand,然后打开Terminal,运行bee r...

2019-02-18 11:15:00 139

转载 .NET 黑魔法 - 自定义日志扩展

我们开发程序时避免不了要有日志系统,我们希望有一个通用的、不夹杂任何方言的调用方式,简单地说就是保留微软日志框架的注入方式和使用方式。比如我们希望这样调用:我们不希望有个 IAbcLogger, IMyLogger, IWhosLogger,这样会给使用者造成一定的学习成本。那么,在.net平台下可以使用微软的日志扩展及依赖注入首先,需要buget引用这2个:...

2019-02-13 11:14:00 68

转载 C# 去重处理字符大小写

本文展示了如何对集合去重并且处理大小写转载于:https://www.cnblogs.com/Eysa/p/10118563.html

2018-12-14 11:41:00 136

转载 javascript 面向对象之路.2 - 小蜜蜂

接着上篇文章继续.要实现上篇中gif图片的效果, 我们要写js, 算法并不是很复杂, 本次也仅仅展示了实现功能的代码, 并没有从面向对象的角度去构思或重构代码.这里, 我们定义了一些变量, 用来定义图形界面各个元素的尺寸以及其他参数.实现的功能就是捕获用户的键盘事件, 39.37代表了键盘的左方向键和右方向键, 左右键按的时候改变comberLeftTimes值, 进而改...

2018-12-14 11:40:00 84

转载 C# 如何批量修改集合元素的属性值?

我们往往会遇到要批量修改集合中元素的值,最笨的办法就是foreach循环,但本文介绍几种优雅的方法。首先,我们准备好元素类和初始集合:下面就是几种方法,目前并没有对性能做进一步的测试,有兴趣的童鞋可以测试下:转载于:https://www.cnblogs.com/Eysa/p/10118560.html...

2018-12-14 11:40:00 2040

转载 javascript 面向对象之路.1 - 小蜜蜂

写这个系列文章是想通过几个案例来学习javascript html5 css3,其实这个小游戏谁都能做出来,但对于一个作为后端.net程序员的我来说还是有学习的必要,毕竟javascript的面向对象跟C# 截然不同,在接触javascript时,第一个感觉就是太灵活了,这是弱类型语言的弊端也是优势,灵活,意味着强大!只是调试起来很痛苦,记得在若干年前,调试javascript就等于慢性...

2018-12-14 11:39:00 100

转载 .NET 黑魔法 - asp.net core 日志系统

asp.net core 里如何记录日志呢?这要从asp.net core的依赖注入说起,在asp.net core里的依赖注入真是无所不在,各种面向切面的接口与事件。好吧,来点干货。首先,我们希望有这样一种调用方式(或者说asp.net core集成的日志功能只能用这种方式):在asp.net core里,框架内的很多功能都是依赖注入,不需要new XXX(),只需...

2018-12-14 11:38:00 122

转载 C# 语言 - 一个优雅的分页实现

这篇文章介绍分页对象的封装,如何优雅的对数据进行分页。先上调用代码:我们希望能在一个Enumerable对象后面直接.ToPagedList(pageIndex,pageSize)这样优雅的调用分页代码。 从图中可以看到,代码并没有报错,说明这是可以哒。下来就来详细说说这个.ToPagedList()方法背后的"男人"。首先我们需要一个返回值的接口定义,IPagedLis...

2018-12-14 11:37:00 184

转载 .NET 黑魔法 - asp.net core 身份认证 - Policy

身份认证几乎是每个项目都要集成的功能,在面向接口(Microservice)的系统中,我们需要有跨平台,多终端支持等特性的认证机制,基于token的认证方式无疑是最好的方案。今天我们就来介绍下在.Net Core版本中如何做一个自己的身份认证系统。首先,本篇文章介绍的方式是基于Policy。我们希望有一个这样的方式来给Controller或Action添加身份认证,将它灵活的添加...

2018-12-14 11:36:00 282

转载 .NET 黑魔法 - asp.net core 自定义格式的响应

这篇文章介绍的是一个黑魔法。我们知道,在我们项目开发中,对Response需要定制化的数据结构,比如需要一个字段 Status 用来表示响应的状态码;字段Message 用来表示请求的消息,字段Data表示数据。 简单的讲,就是所有的响应都按照我们想要的数据结构来,统一的响应有助于我们项目的顺利进展,因为这涉及前后端工程师的配合,代码的统一又给了工程师简单、直接的编程思想。比如,...

2018-12-14 11:36:00 120

转载 .NET 黑魔法 - asp.net core 配置文件的"对象存储"

来,全都是干货。 我们都知道在Framework版本的mvc项目中,配置数据是通过web.config里的appSettings节点配置,我们不得不写一些读取配置文件字符串的类,比如保存在静态的变量中。而在mvc core中,这种不优雅的读取字符串的方式得到了进化,以json数据写入和读取的方式很优雅,省了很多代码,这个思想有点现在流行的对象存储。来,上代码:这是一个...

2018-12-14 11:34:00 143

转载 lumisoft.net 邮件管理系列文章 - 如何判断附件为内嵌式还是附加式

如果要区分邮件里面的附件是内嵌图片附件还是真正的附件,那么可以通过下面代码进行判断,如果是MIME_DispositionTypes.Attachment的就是普通附件,MIME_DispositionTypes.Inline的就是内嵌正文的附件。entity.ContentDisposition.DispositionType == MIME_DispositionTypes....

2016-09-14 16:03:00 129

转载 本人负责任的告诉你,从博客看不出什么东东来。

爱鸟一枚转载于:https://www.cnblogs.com/Eysa/archive/2013/06/08/3127622.html

2013-06-08 21:12:00 54

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除