天天看点

gin orm 模板搬砖代码生成 字段批量赋值, 错误码switch case代码生成

* rows.php

<?php

function fileForEachRow($path, $handler) {
    $handle = fopen($path, "r");
    if (! $handle ) {
        return;
    }
    while (($buffer = fgets($handle, 1024) ) !== false) {
        $buffer = trim($buffer);
        call_user_func($handler, $buffer);
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

// $a = [];

fileForEachRow("./table2.txt", function($line) /* use (&$a) */ {
    //  echo $line.PHP_EOL;
    $word = array_shift(explode(' ', $line));
    $word = trim($word, '`');
    // $a[] = "'".$word."'";
    printf("%s string `json:\"%s\" gorm:\"column:%s;not null\" binding:\"required\"`\n",
           ucfirst($word), $word, $word);
});
           

* 查看表结构

show create table  tb_users;  -- 表名自己改, 复制出来表结构

* table2.txt

`username` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名',
 `password` varchar(30) NOT NULL COMMENT '密码',
 `email` varchar(36) NOT NULL DEFAULT '' COMMENT '邮箱',
           

...

粘贴出来中间的表结构到table2.txt

* 生成模板

php rows.php

粘贴出来打印的结果,修改数据类型string

字段多的情况下适用

* rows.php 生成的users.txt用于 批量赋值

users.txt

    Username         string    `json:"username"`
    Realname         string    `json:"realname"`
    Email            string    `json:"email"`
    Schoolname       string    `json:"school"`
    Provincename     string    `json:"province"`
    Districtname     string    `json:"districtname"`
    Subdistrictname  string    `json:"subdistrictname"`
           

* users.php

<?php

function fileForEachRow($path, $handler) {
    $handle = fopen($path, "r");
    if (! $handle ) {
        return;
    }
    while (($buffer = fgets($handle, 1024) ) !== false) {
        $buffer = trim($buffer);
        call_user_func($handler, $buffer);
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

fileForEachRow("./users.txt", function($line) use (&$a) {
    //  echo $line.PHP_EOL;
    $word = array_shift(explode(' ', $line));
    $word = trim($word, '`');

    printf("this.%s = user.%s\n", $word, $word);
});
           

生成go语言赋值语句如下

this.Username = user.Username
this.Realname = user.Realname
this.Email = user.Email
this.Schoolname = user.Schoolname
this.Provincename = user.Provincename
this.Districtname = user.Districtname
           

// ...

因为一些字段不返回 只好这么做了
userinfo := UserInfoResponse{}
SendResponse(c, nil, userinfo.FromUser(user))
           

//

* code.txt

-1	参数为空。信息、电话号码等有空指针,登陆失败
-12	有异常电话号码
-14	实际号码个数超过1000
-999	服务器内部错误
-10001	用户登陆不成功(帐号不存在/停用/密码错误)
-10003	用户余额不足
-10011	信息内容超长
-10029	此用户没有权限从此通道发送信息(用户没有绑定该性质的通道,比如:用户发了小灵通的号码)
-10030	不能发送移动号码
-10031	手机号码(段)非法
-10057	IP受限
-10056	连接数超限
           

* errorcode.php

<?php

function fileForEachRow($path, $handler) {
    $handle = fopen($path, "r");
    if (! $handle ) {
        return;
    }
    while (($buffer = fgets($handle, 1024) ) !== false) {
        $buffer = trim($buffer);
        call_user_func($handler, $buffer);
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

printf("switch (\$code) {\n");
fileForEachRow("./code.txt", function($line) {
	$a = explode("\t", $line);

	$code = $a[0];
	$msg = $a[1];

	printf("case %s: \$s=\"%s\"; break;\n", $code, addslashes($msg));
});
printf("default: \$s = \"success\";\n");
printf("}");
           

* run:

E:\code\php\file>php errorcode.php

switch ($code) {

case -1: $s="参数为空。信息、电话号码等有空指针,登陆失败"; break;

case -12: $s="有异常电话号码"; break;

case -14: $s="实际号码个数超过1000"; break;

case -999: $s="服务器内部错误"; break;

case -10001: $s="用户登陆不成功(帐号不存在/停用/密码错误)"; break;

case -10003: $s="用户余额不足"; break;

case -10011: $s="信息内容超长"; break;

case -10029: $s="此用户没有权限从此通道发送信息(用户没有绑定该性质的通道,比如:用户发了小灵通的号码)"; break;

case -10030: $s="不能发送移动号码"; break;

case -10031: $s="手机号码(段)非法"; break;

case -10057: $s="IP受限"; break;

case -10056: $s="连接数超限"; break;

default: $s = "unknown error";

}