深入理解golang的defer

defer 估计是每个 Gopher 每天写代码都会写,那么你是不是真正的理解了 defer 呢?不妨看一下下面这个代码片段,这个是我之前给 UC 那边一个 team 做 Golang 培训的时候想的例子。 package main func f() int { i := 5 defer func() { i++ }() return i } func f1() (result int) { defer func() { result++ }() return 0 } func f2() (r int)

  • 0
  • 0
  • 阅读 ( 263 )

【GoLang】panic defer recover 深入理解

唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲!   我认为知乎上说的比较中肯的:     1. The key lesson, however, is that errors are values and the full power of the Go programming language is available for processing them. 2. Use the language to simplify your error handling. But

  • 0
  • 0
  • 阅读 ( 245 )

深入浅出Go语言的库源码文件

你用过 Go 语言编写小命令(或者说微型程序)吗?当你在编写“Hello, world”的时候,一个源码文件就足够了,不过这种小玩意儿没什么用,最多能给你一点点莫名的成就感。 我之前有提到过,除了命令源码文件,你还能用 Go 语言编写库源码文件。库源码文件不能被直接运行,它仅用于存放程序实体。只要遵从 Go 语言规范,这些程序实体就可以被其他代码使用。这些“其他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。 程序实体是什么?在 Go 语言中,它是变量、常量、函数、

  • 0
  • 0
  • 阅读 ( 238 )

深入浅出Go语言Map

Map在Go语言中一般被称为“字典”,他跟我们传统的哈希表差别并不是很大,但是也有些地方的设计和使用值得我们注意下,下面我们开始讲解~ 1 使用方式 func NewMap () { //初始化方式1 map1 : = map [ string ] int { "A" : 1 , "B" : 2 } //初始化方式2 map2 : = make ( map [ string ] int , 10 ) //初始化方式3 map3 : = new ( map [ string

  • 0
  • 0
  • 阅读 ( 260 )

深入浅出Go语言通道chan类型

首先引用一句名言: Don’t communicate by sharing memory; share memory by communicating. (不要通过共享内存来通信,而应该通过通信来共享内存。)-Rob Pike 我是这样理解的: 1 简介 通道(chan)类似于一个队列,特性就是先进先出,多用于goruntine之间的通信 声明方式: ch : = make ( chan int ) 放入元素: ch <- 0 取出元素: elem1 : = <- ch 遍历元素: for

  • 0
  • 0
  • 阅读 ( 205 )

使用javap深入理解Java整型常量和整型变量的区别

我下图代码第五行和第九行分别定义了一个整型变量和一个整型常量: static final int number1 = 512; static int number3 = 545; Java程序员都知道两者的区别。 下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。 使用命令行javap -c constant.ConstantFolding查看.class文件反编译出来的字节码: 结果: 这些字节码指令的说明,在wikipedia里有说明: wiki: ht

  • 0
  • 0
  • 阅读 ( 279 )

深入浅出Nginx

前言 Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 架构图 上图基本上说明了当下流行的技术架构,其中Nginx有点入口网关的味道。 反向代理服务器? 经常听人说到一些术语,如反向代理,那么什么是反向代理,什么又是正向代理呢? 正向代理: 正向代理示意图 反向代理: 反向代理示意图 由于防火墙的原因,我们并不能直接访问谷歌,那么我们可以借助×××来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理“代理”的是客户端,而

  • 0
  • 0
  • 阅读 ( 793 )

结合商业项目深入理解Go知识点

这篇文章比较硬核,爆肝5千字,把之前整理的知识点都串起来了。建议先收藏,慢慢看。 前言 上一篇文章 #【Go WEB进阶实战】开源的电商前后台API系统 很受大家欢迎,有好多小伙伴私信我问题:“gtoken真不错,能不能再多讲讲?”、“接口怎么设计Cache好?”、“代码规范讲一下吧”、“这个系统有没有前端页面?”,等等.... 那我就再写一篇作为补充喽,小伙伴们还有什么问题欢迎在评论区留言。 之前整理过一篇 可能是全网最用心的「Go学习建议和资料汇总」 ,也深受大家好评,大家可以先收藏慢慢学。 这篇文章

  • 0
  • 1
  • 阅读 ( 361 )

TCP长连接和短连接-深入浅出(还在总说http长连接吗)

查阅了一些资料,站在前人的肩膀上看世界会很美好。 什么是长连接和短连接 1.官方解释 长连接(long connnection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。 短连接(short connnection),是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。 2.通俗一点 长连接 :连接->传输数据->保持连接 -> 传输数据-

  • 0
  • 0
  • 阅读 ( 209 )

深入理解 Python 异步编程

原文地址: 点击打开链接 来源:阿驹(微信公号:驹说码事)  如有好文章投稿,请点击 → 这里了解详情 前言 很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现各种古怪的问题难以解决。而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask、Django等传统的非异步框架。 从上两届 PyCon 技术大会看

  • 0
  • 0
  • 阅读 ( 276 )

python asyncio理解_深入理解Python中的asyncio

asyncio介绍 熟悉c#的同学可能知道,在c#中可以很方便的使用async和await来实现异步编程,那么在python中应该怎么做呢,其实python也支持异步编程,一般使用asyncio这个库,下面介绍下什么是asyncio: asyncio 是用来编写 并发 代码的库,使用async/await语法。 asyncio 被用作多个提供高性能Python异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择

  • 0
  • 0
  • 阅读 ( 297 )

LC3微服务Workshop | 深入解读ServiceComb

Apache基金会孵化项目ServiceComb将于LC3大会期间,6月27日(星期三)上午11点至下午17点30分在国家会议中心举办为期一天的开放日Meetup活动—Apache ServiceComb (incubating) Day。 本次开放日将主要聚焦在以下几个方面,和企业、用户及开源爱好者一同探讨微服务技术及方向。 Apache 社区解读 企业微服务商用案例实践分享 ServiceComb的社区概况和技术分享 微服务领域驱动设计方法 活动日期/时间        2018 年 6 月 27 日

  • 0
  • 0
  • 阅读 ( 178 )

LC3大会微服务Workshop来袭 | 深入解读ServiceComb

Apache基金会孵化项目ServiceComb将于LC3大会期间,6月27日(星期三)上午11点至下午17点30分在国家会议中心举办为期一天的开放日Meetup活动—Apache ServiceComb (incubating) Day。 本次开放日将主要聚焦在以下几个方面,和企业、用户及开源爱好者一同探讨微服务技术及方向。 Apache 社区解读 企业微服务商用案例实践分享 ServiceComb的社区概况和技术分享 微服务领域驱动设计方法                               

  • 0
  • 0
  • 阅读 ( 194 )

读猿码系列——4. 从filebeat和go-stash深入日志收集及处理(go-stash篇)

go-stash是一个高效的从Kafka获取,根据配置的规则进行处理,然后发送到ElasticSearch集群的工具。它属于go-zero生态的一个组件,是logstash 的 Go 语言替代版,它相比于原先的 logstash 节省了2/3的服务器资源。 项目地址:https://github.com/kevwan/go-stash 先从yaml配置中看整体系统设计(stash/etc/config.yaml)其中kafka作为数据输入端,ElasticSearch作为数据输出端,filter 抽象了数

  • 0
  • 0
  • 阅读 ( 178 )

深入剖析Redis客户端Jedis的特性和原理

一、开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎。Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式。 Redis的Java生态的客户端当中包含Jedis、Redisson、Lettuce,不同的客户端具备不同的能力是使用方式,本文主要分析Jedis客户端。 Jedis客户端同时支持单机模式、分片模式、集群模式的访问模式,通过构建Jedis类对象实现单机模式下的数据访问,通过构建ShardedJedis类对象实现分片模式的数据访问,通过构建JedisCluster类对象实现

  • 0
  • 0
  • 阅读 ( 260 )

SpringCloud的入门学习之深入理解Eureka注册中心

1、 Eureka 注册中心三种角色。   答:a、Eureka Server,注册中心,通过 Register、Get、Renew 等接口提供服务的注册和发现。     b、Application Service (Service Provider),服务提供方,把自身的服务实例注册到 Eureka Server中。     c、Application Client (Service Consumer),服务调用方,通过 Eureka Server获取服务列表,消费服务。 2、Erueka的架构图,如下

  • 0
  • 0
  • 阅读 ( 224 )

深入学习Go-1 基本数据类型及大数计算

基本数据类型 布尔型:     bool,存储占1位,但是8位对齐所以占1个字节 数值型:     无符号整型: uint8,  存储占8位,  1个字节 uint16,存储占16位, 2个字节 uint32,存储占32位,4个字节 uint64,存储占64位,8个字节     有符号整型: int8,  存储占8位,  1个字节 int16,存储占16位, 2个字节 int32,存储占32位,4个字节 int64,存储占64位,8个字节     浮点型: float32,存储占32位,4个字节 floa

  • 0
  • 0
  • 阅读 ( 147 )

从程序员的角度深入理解MySQL

前言 作为一名工作了4年的程序猿,今天我将站在程序员的角度以MySQL为例探索数据库的奥秘! 数据库基本原理 第一,数据库的组成:存储 + 实例 不必多说,数据当然需要存储;存储了还不够,显然需要提供程序对存储的操作进行封装,对外提供增删改查的API,即实例。 一个存储,可以对应多个实例,这将提高这个存储的负载能力以及高可用;多个存储可以分布在不同的机房、地域,将实现容灾。 第二,按Block or Page读取数据 用大腿想也知道,数据库不可能按行读取数据(Why?   ^_^)。实质上,数据库,如Or

  • 0
  • 0
  • 阅读 ( 187 )

深入理解Golang包导入

Golang 使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang 中包的定义和使用看起来十分简单: 通过package关键字定义包: package xxx 使用import关键字,导入要使用的标准库包或第三方依赖包。   import "a/b/c"  import "fmt"  c.Func1()  f

  • 0
  • 0
  • 阅读 ( 166 )

Go通关11:并发控制神器之Context深入浅出

协程如何退出 一个协程启动后,一般是代码执行完毕,自动退出,但是如果需要提前终止怎么办呢? 一个办法是定义一个全局变量,协程中通过检查这个变量的变化来决定是否退出。这种办法须要加锁来保证并发安全,说到这里,有没有想的什么解决方案? select+channel来实现: packagemain import( "fmt" "sync" "time" ) funcmain(){ varwgsync.WaitGroup stopWk:=make(chanbool) wg.Add(1) gofunc

  • 0
  • 0
  • 阅读 ( 309 )