vincent

vincent 查看完整档案

深圳编辑广西师范大学  |  计算机科学与技术 编辑百度  |  高级研发工程师 编辑编辑
编辑

让灵魂跟上脚步~

个人动态

vincent 回答了问题 · 2020-11-03

如何知道golang启动的是哪个main函数?

用工厂模式,日志做成接口,不同的main函数调用Init不同的参数和日志文件路径配置等,再有更多的,new新的就可以了。

关注 4 回答 3

vincent 回答了问题 · 2020-11-03

解决golang 使用go-sql-driver/mysql 查总条数

rows, err := db.Query("SELECT * FROM userinfo LIMIT 0,5")
原生SQL分页就可以了,总条数就用count(*)或者count(1)加上query条件。
但,你为什么不用orm去做?
gorm: https://github.com/go-gorm/gorm
xorm: https://github.com/go-xorm/xorm

关注 2 回答 1

vincent 回答了问题 · 2020-06-17

解决golang if 多个条件怎么简写

如果除了Excel的三个类型之外还有其他类型,用switch case的方式比较清晰,case分支可以抽出来对应类型的handler函数去处理相关逻辑

关注 6 回答 5

vincent 关注了标签 · 2020-06-17

golang

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言。

七牛云存储CEO许式伟出版《Go语言编程
go语言翻译项目 http://code.google.com/p/gola...
《go编程导读》 http://code.google.com/p/ac-m...
golang的官方文档 http://golang.org/doc/docs.html
golang windows上安装 http://code.google.com/p/gomi...

关注 26105

vincent 赞了文章 · 2018-02-09

Swoole 2.1 正式版发布,协程+通道带来全新的 PHP 编程模式

PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了协程(Coroutine)+通道(Channel)特性,为 PHP 语言带来了全新的编程模式。Swoole 2.1API借鉴至Go语言,在此向Go语言开发组致敬。

Coroutine

go(function () {
    co::sleep(0.5);
    echo "hello";
});
go("test");
go([$object, "method"]);

Channel

$chan = new chan(128);
$chan->push(1234);
$chan->push(1234.56);
$chan->push("hello world");
$chan->push(["hello world"]);
$chan->push(new stdclass);
$chan->push(fopen("test.txt", "r+"));
while($chan->pop());

Go语言的chan不同,由于PHP是动态语言,所以可以向通道内投递任意类型的变量。

Channel Select

$c1 = new chan(3);
$c2 = new chan(2);
$c3 = new chan(2);
$c4 = new chan(2);

$c3->push(3);
$c3->push(3.1415);

$c4->push(3);
$c4->push(3.1415);

go(function () use ($c1, $c2, $c3, $c4) {
    echo "select\n";
    for ($i = 0; $i < 1; $i++)
    {
        $read_list = [$c1, $c2];
        $write_list = [$c3, $c4];
        // $write_list = null;
        $result = chan::select($read_list, $write_list, 5);
        var_dump($result, $read_list, $write_list);

        foreach($read_list as $ch)
        {
            var_dump($ch->pop());
        }

        foreach($write_list as $ch)
        {
            var_dump($ch->push(666));
        }
        echo "exit\n";
    }
});

go(function () use ($c3, $c4) {
    echo "producer\n";
    co::sleep(1);
    $data = $c3->pop();
    echo "pop[1]\n";
    var_dump($data);
});

go(function () {
    co::sleep(10);
});

go(function () use ($c1, $c2) {

    co::sleep(1);
    $c1->push("resume");
    $c2->push("hello");
});

MySQL Client

go(function () {
    $db = new Co\MySQL();
    $server = array(
        'host' => '127.0.0.1',
        'user' => 'root',
        'password' => 'root',
        'database' => 'test',
    );

    $db->connect($server);

    $result = $db->query('SELECT * FROM userinfo WHERE id = 3');
    var_dump($result);
});

Redis Client

go(function () {
    $redis = new Co\Redis;
    $res = $redis->connect('127.0.0.1', 6379);
    $ret = $redis->set('key', 'value');
    var_dump($redis->get('key'));
});

Http Client

go(function () {
    $http = new Co\Http\Client("www.google.com", 443, true);
    $http->setHeaders(function () {
        
    });
    $ret = $http->get('/');
    var_dump($http->body);
});

Http2 Client

go(function () {
    $http = new Co\Http2\Client("www.google.com", 443, true);
    $req = new co\Http2\Request;
    $req->path = "/index.html";
    $req->headers = [
        'host' => "www.google.com",
        "user-agent" => 'Chrome/49.0.2587.3',
        'accept' => 'text/html,application/xhtml+xml,application/xml',
        'accept-encoding' => 'gzip',
    ];
    $req->cookies = ['name' => 'rango', 'email' => 'rango@swoole.com'];
    $ret = $http->send($req);
    var_dump($http->recv());
});

其他 API

co::sleep(100);
co::fread($fp);
co::fwrite($fp, "hello world");
co::gethostbyname('www.google.com');

服务器端

$server = new Co\Http\Server('127.0.0.1', 9501);

$server->on('Request', function($request, $response) {

    $http = new Co\Http\Client("www.google.com", 443, true);
    $http->setHeaders(function () {
        "X-Power-By" => "Swoole/2.1.0",
    });
    $ret = $http->get('/');
 
    if ($ret) {
        $response->end($http->body);
    }
    else{
        $response->end("recv failed error : {$http->errCode}");
    }
});

$server->start();

Swoole提供了很多Co\ServerCo\WebSocket\ServerCo\Http\ServerCo\Redis\Server4个支持协程的Server类,可以在这些服务器程序中使用协程API

查看原文

赞 88 收藏 71 评论 28

vincent 回答了问题 · 2017-09-15

问一个js加密问题,如何确定加密方式以及解密

源码在这里自己编译,其实可以直接用的。
WebFontLoader

关注 3 回答 2

vincent 回答了问题 · 2017-09-15

解决php 非浏览器访问session 获取不到问题

因为请求都是要通过腾讯的服务器发送到我们的服务器,那么我们的服务器也就无从识别请求的发起者了,可以用文件cache代替session。

关注 3 回答 1

vincent 回答了问题 · 2017-09-14

docker redis综合问题!

Redis挂载到宿主机,这样就算你容器干掉了,以后再重新挂载就行了,最好主从放两台不同的服务器上,防止服务器崩了,然后其他的跟常规做法没区别,该怎么用就怎么用。哦,还有就是端口都绑定内网ip访问,不对外开放。

关注 3 回答 1

vincent 回答了问题 · 2017-09-14

java开发增删改查的接口时,怎么防止外人调用?

方法写的有问题啊,假设你不是前后端分离的情况,用session存储登录态,最简单的考虑情况,那在删除之前,你前端post过来的数据,应该至少是id,uid,然后判断一下session的id和传来的是否一致,才删除啊。

最好的做法是用token啊,也就是鉴权,你可以用uid,啥啥的,加固定盐值,然后MD5或者用其他加密方式,之后,鉴权通过的删除。也可以用现成的jwt token等解决方案。

直接用个id就删,是肯定不行的啦。

关注 14 回答 12

vincent 回答了问题 · 2017-09-14

如何引用其他文件夹中所有的php文件

如果是想引用多个类的话,用类自动加载机制,拿laravel举例,它是通过spl_autoload_register来实现类自动加载的注册,使用了一个类自动加载函数队列,这个队列包含了一个composer基于PSR规范的自动加载函数,和一个laravel核心框架别名的自动加载函数。

楼主说的想控制顺序,版本兼容性什么的,思路,可以参考这里,做一个队列来控制你require的顺序,composer的版本号对应的规则机制,应该可以解决兼容方面的问题,具体需要思考一下,仿一套简单的require文件的逻辑代码。

以上思路,请批评指正。

关注 4 回答 3

认证与成就

  • 获得 85 次点赞
  • 获得 8 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 6 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-03-17
个人主页被 1.5k 人浏览