文章是翻译自Go官方博客的文章:http://blog.golang.org/errors-are-values随便翻译的一下,给自己参考,有需要的同学也可以参考参考,翻译的不好的地方或者难以理解的地方请参考原文。本人英语本身也不怎么样!所有有可能会有理解错误,用词不当,语言组织不当的地方,请见谅!该怎么样去处理错误(errors),是go程序员特别是刚学go的人之间的一个共同讨论点。讨论经常会随着下面这段程序出现的次数越来越多而变成抱怨。if err != nil {     return err }我们最近扫描了所有我们能够找到的开源项目,发现重复出现这段代码的次数是每页或者每两页只出现了一次,是不是比你想象中的要少很多。然而,如果你还是感觉必须到处写if err != nil,那一定是哪里出了问题,并且会认为问题很明显是出在go自己身上。很不幸,这是错误的,而且这很容易去纠正。假如一个新手go程序员去提问这发生了什么,“怎么会只有一个错误处理?”,其实你应该学习这种模式,并且保持它。在其他编程语言里面,一种可能方式是使用try-catch块或者其他类似原理的方式去处理错误(err...
 发布日期: 2015-05-24    分类: Go    浏览量: 3914   0条评论  
go有一个官方包来操作json格式的数据,包位于encoding/json。JSON编码func Marshal(v interface{}) ([]byte, error)返回用JSON编码v之后的值。类型转换规则:boolean值会编码成JSON的boolean;float,integer会编码成JSON的number;string值会编码成UTF-8JSON字符串,无效的字节用Unicode替换,"<"和">"编码成"\u003c" and "\u003e","&"编码成"\u0026";array和slice会编码成JSON array,[]byte编码成base64字符串,空的slice编码成null;struct会编码成JSON object。空值是指false,0,空指针或者空interface,任何长度为0的array,slice,map或者string。json对象默认的key字符串是strut的字段名,也可以自己指定名字,方法是在每个字段最后用“json”标签指定名字:比如:type Personal struct {     Name stri...
 发布日期: 2015-05-20    分类: Go    浏览量: 9764   0条评论  
yii2.0的ActiveRecord是可以嵌套子查询的。比如从一个子查询里面筛选数据。首先实例化出来一个Query对象,代表子查询。$subQuery = new \yii\db\Query(); $subQuery->from('tableA')->where(['>=', 'id', 10]);假如UserModel是一个AR:$list = UserModel::find()->from(['tmpA' => $subQuery])->all();from里面传数组,数组KEY是临时表的名字,值是Query对象。同样的如果是AR的join里面也要用到子查询,参数方式是一样的。...
 发布日期: 2015-04-24    分类: PHP    浏览量: 9165   0条评论  
本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对单元测试),包括基本技术、高级技术(并发测试、mock/fake、竞争条件测试、并发测试、内/外部测 试、vet工具等)等,感觉总结的很全面,这里整理记录下来,希望能给大家带来帮助。原Slide访问需要自己搭梯子。另外这里也要吐槽一 下:Golang官方站的slide都是以一种特有的golang artical的格式放出的(用这个工具http://go-talks.appspot.com/可以在线观看),没法像pdf那样下载,在国内使用和传播极其不便。转载自:http://tonybai.com/2014/10/22/golang-testing-techniques/一、基础测试技术1、测试Go代码Go语言内置测试框架。内置的测试框架通过testing包以及go test命令来提供测试功能。下面是一个完整的测试strings.Index函数的完整测试文件://strin...
 发布日期: 2015-04-10    分类: Go    浏览量: 3504   0条评论  
其实这样的程序随便搜一下一大把!这里纯粹练习用的,然后模仿的和windows上面的Ping程序一模一样。这里参考了这篇博文:http://my.oschina.net/ybusad/blog/300155ping程序发的是icmp包,这个协议和tcp、udp协议是在同一层的。包结构如下:    0                   1                   2                   3     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |     Type      |     Code      |          Checksum             |    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |           ...
 发布日期: 2015-04-10    分类: Go    浏览量: 3584   0条评论  
文章只是实现了消费功能。主要的代码清单如下:<?php /** * @link  http://www.360us.net/ * @author dyllen_zhong@qq.com */ class UnionPay { /**  * 支付配置  * @var array  */ public $config = []; /**  * 支付参数,提交到银联对应接口的所有参数  * @var array  */ public $params = []; /**  * 自动提交表单模板  * @var string  */ private $formTemplate = <<<'HTML' <!DOCTYPE HTML> <html> <head>     <meta charset="utf-8"> <title>支付</title> </head> <body> <div style="text-align:cen...
 发布日期: 2015-03-26    分类: PHP    浏览量: 8816   0条评论  
这里讲的是微信开放平台移动应用里面的微信支付功能。开放平台的微信支付和公众号的微信支付是不一样的。然后是我下面的代码仅仅是做了基本的消费功能。基本流程如下:1、获取access token。2、提交预支付订单信息,拿到prepayid。3、组成包括prepayid在内的相关信息数据返回给客户端发起支付请求。在提交预支付订单之前需要先获取到access token才行。这个token是公用的有效期是7200秒。具体获取方法可以看下面的WechatAppPay类。去拿这个access token不是凭公众号的appid和secret去拿而是用微信开放平台移动应用的appid和secret去拿的。这里我写了一些个专门做微信支付的操作的类,有需要的可以拿去参考。下面的代码我都实际测试通过了。开放平台文档版本是V1.7。WechatPayBase类,主要就是一些基础公用功能的方法,代码清单如下:<?php namespace common\services\WechatPay; /** * @link http://www.360us.net/  * @author dyllen_zho...
 发布日期: 2015-03-03    分类: PHP    浏览量: 16067   0条评论  
最近把支付宝、银联和微信支付全都做了一遍,目前做的都还只涉及到消费的功能。做下来感觉就是各个平台的支付流程都是大同小异,签名方式也是一样的。这里主要总结一下微信支付公众号支付的一些东西。微信公众号支付的主要流程如下:1、生成我们自己系统的订单。2、调用微信支付的统一下单接口把订单信息推给微信。3、在第二部会返回一个预支付会话标识,然后凭这个标识用JS去调用支付操作。关于支付页面的url问题,微信要求是最后必须要有“/”,我看到很多文章说不适合MVC结构的程序,我的情况是否定的,MVC结构一样可以。比如url是这个:http://www.example.com/payment/wechatpay/ ,url里面payment是controller,wechatpay是action,这有问题吗?一样可以访问,可以支付,是不是一个真正的目录,在微信看来就是,实际上其实不是。好,下面进入正题。微信支付配置如下:$config = [     'mch_id' => '1234455666', //商户号     'signType' => 'MD5', //签名方式,目前只有MD5...
 发布日期: 2015-02-28    分类: PHP    浏览量: 6642   0条评论  
依赖注入英文全称是dependency injection,简称DI。它还有个名字叫控制反转(Inversion of Control),英文简称IOC。这些都是来自于Java的东西。yii的依赖注入器就是一个知道如何去实例化和配置对象及其依赖对象的一个对象。依赖注入yii是通过类yii\di\Container来提供依赖注入特性的。它支持如下种类的依赖注入方式:构造方法注入。Setter和属性注入。回调函数注入。构造方法注入通过构造函数参数类型提示注入。当创建一个新对象的时候,类型提示可以告诉注入器那些类或者接口是它所依赖的,注入器会尝试去得到被依赖类或者接口的实例,然后通过构造函数注入到新的对象里面去。例如:class Foo {     public function __construct(Bar $bar)     {     } } $foo = $container->get('Foo'); // 等价于下面的代码: $bar = new Bar; $foo = new Foo($bar);Setter和Property注入 setter和property注入是...
 发布日期: 2015-01-27    分类: PHP    浏览量: 5053   0条评论  
Yii2.0的自带的验证依赖于GD2或者ImageMagick扩展。使用步骤如下:重写yii\web\Controller::actions()方法,用ID"captcha"注册一个CaptchaAction类的action。在表单模型里面添加一个属性,用来保存用户输入的验证码字符串;这个属性的验证器是"captcha"。在视图里面,把yii\captcha\Captcha Widget插入到表单里面。第一步,控制器:在任意controller里面重写方法/**  * @inheritdoc */ public function actions() {     return [          'captcha' => [               'class' => 'yii\captcha\CaptchaAction',               'maxLength' => 5,               'minLength' => 5          ],      ];  }第二步,表单模型:假如是一个登陆表单。这里只给出验证码相关的部分...
 发布日期: 2015-01-13    分类: PHP    浏览量: 11724   0条评论