请注意,Zanblog并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome

Go语言defer的使用

Go,编程语言 24 views

Go语言中没有类似于java中的try…catch…finally的语句块,但是却有一个非常优雅的defer。

defer关键字用来标记最后执行的Go语句,一般用在资源释放、关闭连接等操作,会在函数关闭前调用。

多个defer的定义与执行类似于栈的操作:先进后出,最先定义的最后执行。

在defer的使用中,碰到过许多坑,尤其是在defer与匿名函数搭配使用的时候,本文就来讲讲这些坑。

请先看下边几段代码,然后判断一下各自输出内容:

#示例代码一:
func funcA() int {
	x := 5
	defer func() {
		x += 1
	}()
	return x
}
#示例代码二:
func funcB() (x int) {
	defer func() {
		x += 1
	}()
	return 5
}
#示例代码三:
func funcC() (y int) {
	x := 5
	defer func() {
		x += 1
	}()
	return x
}
#示例代码四:
func funcD() (x int) {
...							
阅读全文 0

Go语言defer的使用

5-19 24 views

Go语言中没有类似于java中的try…catch…finally的语句块,但是却有一个非常优雅的defer。 defer关键字用来标记最后执行的Go语句,一般用在资源释...
阅读全文 0

博客开张

点滴记事 16 views

断断续续的折腾几天,总算把CSDN博客上个人感觉还值得留念的文章统统搬到新博客。

为何突然想到要成立一个新博客?不是因为CSDN博客站不好,最近各种网站门户频频出现密码泄露时事件,不可避免地殃及到兄弟这条小鱼,CSDN账号密码居然被人窃取了,并登陆到网站上发了一大堆乱七八糟的垃圾广告神马,结果被管理员把博客给封掉了,在我发现后虽然及时找管理员要回账号密码,但是还是有几篇文章被删掉了或者有的文章我也不记得到底是发在CSDN还是没发,不想麻烦管理员查找恢复文章,因为不知道是自己的疏忽还是CSDN网站数据泄露造成,认了,CSDN上没有数据备份功能,所以就想到了还是自己做一个博客站比较稳妥,所以就有了这个《VF的部落格》。

写博客是个好习惯,每天都有学习新东西,范围广,知识杂,俗话说好记性不如烂笔头,诚如是!即使再熟练熟悉的内容,经过一段时间的遗忘,再加上新知识的填充,经常引起思维混乱,所以,还是写点东西...

阅读全文 0

博客开张

5-15 16 views

断断续续的折腾几天,总算把CSDN博客上个人感觉还值得留念的文章统统搬到新博客。 为何突然想到要成立一个新博客?不是因为CSDN博客站不好,最近各种网站门户...
阅读全文 0

Ubuntu配置Goagent

其他文章 9 views

1、注册App Engine账号
使用Goagent必须拥有一个Google App Engine账号,在未翻墙的情况下可以先用VPN连接申请。申请地址为:http://appengine.google.com,至于申请步骤,网上很多,就不详细说明了,可以百度。
2、下载Goagent软件
发布地址:http://code.google.com/p/goagent/
软件地址:https://nodeload.github.com/goagent/goagent/legacy.zip/3.0
3、配置Goagent
解压ZIP软件包到用户目录,如:unzip goagent-goagent-v3.1.5-30-g2783fec.zip -d ~
修改两个文件:
编辑:~/goagent-goagent-2783fec/server/gae/app.yaml

application: xxxxx   
version: 1  
runtime: python27  
api_version: 1  
threadsafe: true  

编辑:~/goagent-goagent-2783fec/local/proxy.ini...

阅读全文 0

Ubuntu配置Goagent

5-15 9 views

1、注册App Engine账号 使用Goagent必须拥有一个Google App Engine账号,在未翻墙的情况下可以先用VPN连接申请。申请地址为:http://appengine.google.com,...
阅读全文 0

十步完全理解SQL

其他文章 11 views

很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言)。

我们每天都在写 SQL 并且应用在开源软件 jOOQ 中。于是我想把 SQL 之美介绍给那些仍然对它头疼不已的朋友,所以本文是为了以下读者而特地编写的:

1、 在工作中会用到 SQL 但是对它并不完全了解的人。

2、 能够熟练使用 SQL 但是并不了解其语法逻辑的人。

3、 想要教别人 SQL 的人。

本文着重介绍 SELECT 句式,其他的 DML (Data Manipulation Language 数据操纵语言命令)将会在别的文章中进行介绍。

10个简单步骤,完全理解SQL

1、 SQL 是一种声明式语言

首先要把这个概念记在脑中:“声明”。 SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果。这是不是很棒?

(译者注:简单地说,SQL 语言声明的是结果集的属性,计算机会根据 SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。)

SELECT first_name, last_name FROM employees WHERE salary > 100000  

上面的例子很容易理解,我们不关心这些雇员记录从哪里来,我们所需要的只是那些高薪者的数据(译者注: salary>100000 )。
我们从哪儿学习到这些?

如果 SQL 语言这么简单,那么是什么让人们“闻 SQL 色变”?主要的原因是:我们潜意识中的是按照命令式编程的思维方式思考问题的。就好像这样:“电脑,先执行这一步,再执行那一步,但是在那之前先检查一下是否满足条件 A 和条件 B ”。例如,用变量传参、使用循环语句、迭代、调用函数等等,都是这种命令式编程的思维惯式。
...

阅读全文 2

十步完全理解SQL

5-15 11 views

很多程序员视 SQL 为洪水猛兽。SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管...
阅读全文 2

Cinder中的iscsitarget和tgt的使用

OpenStack,云计算 8 views

OpenStack中的Cinder-volume组件的iSCSI target volume可以通过iscsitarget或者tgt提供支撑的,通常情况下使用iscsitarget,但是有的时候会出现一些问题,比较常见的就是cinder-volume无法启动、或者无法创建volume,而解决问题的时候甚至都搞不清楚自己用的到底是tgt还是iscsitarget,因为两个软件都安装了,本文就给大家大概的介绍下这两个软件的安装和出现问题时的解决办法。

环境说明:Ubuntu 12.04+OpenStack Grizzly
组件说明:tgt和iscsitarget使用不同的管理工具,tgt使用的是tgtadm,iscsitarget使用的是ietadm,体现在步骤5中的iscsi_helper属性。
ietadm: iSCSI Enterprise Target Administration Utility ———- iscsitarget
tgtadm: Linux SCSI Target Administration Utility ———- tgt

一、安装步骤

1、安装软件

apt-get install -y cinder-api cinder-scheduler cinder-volume  

说明:使用默认的tgt,只需要安装以上软件即可,并且跳过步骤3,直接进入步骤4。

apt-get install -y cinder-api cinder-scheduler cinder-volume iscsitarget open-iscsi iscsitarget-dkms  

说明:使用iscsitarget,软件列表中虽然没有tgt组件,但是会通过依赖自己安装上。
2、创建数据库

CREATE DATABASE cinder;  
GRANT ALL ON cinder.* TO 'cinderUser'@'%' IDENTIFIED BY 'cinderPass';  

...

阅读全文 0

Cinder中的iscsitarget和tgt的使用

5-15 8 views

OpenStack中的Cinder-volume组件的iSCSI target volume可以通过iscsitarget或者tgt提供支撑的,通常情况下使用iscsitarget,但是有的时候会出现一些问题,比...
阅读全文 0