Go 延迟函数 defer 详解

摘要: Go 语言中延迟函数 defer 充当着 try...catch 的重任,使用起来也非常简便,但是当它和 return、返回值一起出现时,你可能会不小心掉进坑里……

Go 语言中延迟函数 defer 充当着 try…catch 的重任,使用起来也非常简便,然而在实际应用中,很多 gopher 并没有真正搞明白 defer、return 和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱!

先来运行下面两段代码:

A. 匿名返回值的情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import (
    "fmt"
)

func main() {
    fmt.Println("a return:", a()) // 打印结果为 a return: 0
}

func a() int {
    var i int
    defer func() {
        i++
        fmt.Println("a defer2:", i) // 打印结果为 a defer2: 2
    }()
    defer func() {
        i++
        fmt.Println("a defer1:", i) // 打印结果为 a defer1: 1
    }()
    return i
}

Golang strconv 包源码剖析

本文是对 Go strconv 包部分源码剖析,我自己收获很多,希望我这篇博文让你也能有收获。

准备工作

基本工作

  • Mac OSX
  • VSCode
  • go_1.9.1

阅读源码方法

  1. 选定要阅读的源码包 strconv
  2. 从上往下顺序阅读,见下图
  3. 从可导出函数到非导出函数(根据逻辑代码来跳转)
  4. 有需要时也要读 _test.go

Golang 的十二条最佳实践

本文是对十二条 Golang 最佳实践的解读,补充了 Rob Pike 给我们整理的 Go 箴言,大家可以学习学习。

  1. 首先避免嵌套处理错误
  2. 尽可能避免重复
  3. 重要的代码先行
  4. 注释代码
  5. 短即是好/越短越好
  6. 具有多个文件的包
  7. 让你的包能够通过 “go get” 得到
  8. 了解你自己的需求
  9. 保持包的独立
  10. 避免在你的方法中内置并发
  11. 使用 goroutines 来管理状态
  12. 避免 goroutine 泄漏

Kafka 入门指南

本文是 Kafka 的入门指南。

kafka(http://kafka.apache.org/) 非常强大,应用场景也很多,性能很好。


基本要求

  1. JDK
  2. zookeeper

单机单点安装测试

第一步:下载解压

下载地址 http://kafka.apache.org/downloads.html

tar -xzf kafka_2.11-0.11.0.1.tgz cd kafka_2.11-0.11.0.1

第二步:启动 zookeeper-server 和 kafka-server

bin/zookeeper-server-start.sh config/zookeeper.properties


bin/kafka-server-start.sh config/server.properties

关于 server.properties 配置文件请参考后文:《server.properties配置文件参数说明

logkit 进阶玩法

本文是我在使用 logkit 过程中遇到的问题总结,希望可以帮助到大家。

logkit(https://github.com/qiniu/logkit) 非常强大,一定要抽时间阅读分析源码。


前情回顾

在上一篇文章中已经介绍了 logkit 的使用,参考运维日志分析 – Nginx 日志分析搭建案例构建日志检索系统。

再来回看一下效果图吧,😜

Kibana 统计

以上图表中的数据均由 logkit 上报所得。

其实 logkit 最核心的就是主配置和 Runner 配置。

Pandora 平台提供的酷炫远不仅于此,你以为 logkit 只能用于日志上报构建日志检索系统吗?那你就错了。

logkit 还可以被用来打点数据

UDB、UDDB 以及 TokuDB 的使用分析总结

本文是我对 UDB, UDDB, TokuDB 的使用分析,以及一些问题总结,希望可以帮助到大家。

TokuDB 非常不错,你值得拥有。


自建数据库和云端数据库

几年前,一般企业可能都是自建数据库吧(至少得配一个 DBA),随着云服务(AWS, AliYun, UCloud)的蓬勃发展,云主机和云数据库都是他们的标配。我们用上云数据库也就顺理成章,也算是明智的选择吧。

不然常规的各种维护都会让你疲于奔命,哪还有人力去做产品,做迭代啊。

一般自建的数据库都存在这么几个问题:

  1. 单点
  2. 物理机故障
  3. 数据库故障
  4. 维护成本不低

鉴于我个人经验,我对 AWS,Aliyun 的产品没有怎么广泛使用,所以也没有什么发言权,今天就只说说我们正在使用的吧。

使用 Pandora 平台轻松玩转大数据

本文是我在使用 Pandora 大数据平台的过程中遇到的问题总结,希望可以帮助到大家。

pic


心动不如行动,赶紧开始使用 Pandora 来构建属于你们自己的大数据平台吧。


大数据是什么?

大数据(英语:Big data),又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。在总数据量相同的情况下,与个别分析独立的小型数据集(Data set)相比,将各个小型数据集合并后进行分析可得出许多额外的信息和数据关系性,可用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等;这样的用途正是大型数据集盛行的原因。【摘自维基百科】

大数据平台又是什么?

我先给大家看看使用 Pandora 大数据平台构建的一些效果图吧。

Grafana 统计监控:

Grafana 统计监控1 Grafana 统计监控2 Grafana 统计监控 24h

配置告警后的告警历史 Grafana 监控告警

触发警戒值之后还会发邮件的哦(带图的哦)

Grafana 邮件告警

日志上报后的查询界面 Kibana 统计

上面这些图表和功能,有没有让你心动呢?


基本介绍

Pandora 潘多拉是一套面向海量数据,以及基础技术人员的,管理大数据传输、计算、存储和分析的大数据平台。

Pandora Arch

Pandora 共包含五个组件级服务:

组件服务 概述
大数据工作流引擎 数据接收,(实时/离线)计算和导出(支持多种数据格式:HTTP,日志检索服务,时序数据库,对象存储);
时序数据库 时间序列数据库(高速存储,聚合和检索);
日志检索服务 海量日志存储和检索;
报表工作室 基于数据快速制作动态/静态报表,生成气象观测台;
XSpark 基于 Spark 和容器云,快速进行海量数据分析与可视化;

如何开始?

目前 Pandora 大数据平台产品处于有限开放、免费试用阶段,你可以联系七牛的销售或客服申请开通试用,也可以发送邮件给 pandora[AT]qiniu.com 注明您的公司名称及联系方式,申请试用。他们在收到申请后一个工作日内为您审核。

  • 申请注册七牛账号,登录之后的界面如下:

七牛控制台

  • 申请 Pandora 大数据平台的相关权限,通过之后登录的界面如下:

七牛控制台-大数据平台

从图中,我们可以看出,侧边栏多了大数据工作流引擎、时序数据库、日志检索,容器应用市场,这是 Pandora 包含的 5 个组件的入口。

  • 容器应用市场

容器应用市场-审核中


准备工作

Pandora 大数据平台的基本流程如下:

  • 通过(logkit/SDK/API )打数据到工作流(workflow);
  • 在 workflow 中,进行数据计算和导出 (可导出到 TSDB/LogDB/HTTP/对象存储);
  • 然后在 TSDB/LogDB 中查询数据,或通过 Grafana 进行图表绘制。

其中几个组件服务的基本情况:

  1. 实时工作流、离线工作流(实时的数据源和消息队列的数据存储时间是2天);
  2. 时序数据库:创建仓库(类比:数据库)、序列(类比:表)[最大的数据存储时限是30天];
  3. 日志检索:创建仓库[数据存储时限:最大可设置为永久]
  4. 容器应用市场:目前官方应用提供有Grafana,Kibana,XSpark;(这 3 个默认是没有开通的,还需要再申请开通),第三方应用暂无;