V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  buffzty  ›  全部回复第 22 页 / 共 24 页
回复总数  462
1 ... 14  15  16  17  18  19  20  21  22  23 ... 24  
l'm 分子 基操勿 6
2020-05-06 15:34:09 +08:00
回复了 teawithlife 创建的主题 问与答 electron+go 实现跨平台是否可行?
@teawithlife 还没写过 pc 端项目,我们现在全部都是 web. 前端 tsx, 后端 go .我觉得套个 electron 应该问题不大
2020-05-06 14:06:21 +08:00
回复了 teawithlife 创建的主题 问与答 electron+go 实现跨平台是否可行?
我的想法跟你一样. 桌面软件用 electron+tsx 做前端展示. 大部分功能用 node 写, 再用 go 起一个 http 服务器 做一些本来需要用 c 完成的功能.
2020-04-27 12:15:18 +08:00
回复了 felix021 创建的主题 Go 编程语言 踩坑记: go 服务内存暴涨
@felix021 到处表情包,各种花里胡哨 ,简单的说明不行吗, 就跟装乎那种回答一样.明明能一两百字回答完的 非常写个两千字图文 真心不喜欢.不过你随意 我只是不想 v2 知乎化
2020-04-26 20:16:53 +08:00
回复了 darksand 创建的主题 职场话题 关于加班的问题,忍不住想吐槽下
加班应该是 "救急不救穷" 如果要我 996 就跟我签 996 的合同
2020-04-26 20:09:06 +08:00
回复了 felix021 创建的主题 Go 编程语言 踩坑记: go 服务内存暴涨
能不能别写的跟知乎一样?
现在 orm 都是预处理.怎么可能注入呢
没人说用 react 吗? 用 react 不会出现 xss,显示时自动过滤
render() {
const txt = '</script><script>alert(11);</script>'
return <div>{txt}</div>
}
// output
&lt;/script&gt;&lt;script&gt;alert(11);&lt;/script&gt;
2020-04-24 10:16:01 +08:00
回复了 basefas 创建的主题 程序员 一些程序封装的疑问
我是这样弄的, 查询的时候可以带上 scene 参数. 默认是 defaultScene, 普通人获取自己的详情就是 default, 管理员获取就是 adminScene. 注意要对 scene 做权限检查
2020-04-24 10:13:02 +08:00
回复了 CrazyMoon 创建的主题 问与答 老同事不让重构代码怎么破?
你提出的问题是对的,但是改老代码是不对的. 你可以跟他说以后新写的项目禁止使用字面量 全部使用有意义的常量.
老项目真的是能不动就不动. 而且人家说不定 知道这里错了,只是不想改而已
2020-04-17 17:00:39 +08:00
回复了 buffzty 创建的主题 程序员 如何安全得表达对恶心企业的不满?
我一直用的都是 svip,我下载量不大,一直都是满速这点我没有黑他。我并不是穷舍不得这点钱,我讨厌的是不冲 svip 就个位数的速度。就是单纯的讨厌它,想恶心他
2020-04-17 16:14:56 +08:00
回复了 zycojamie 创建的主题 程序员 后端要求前端传的查询参数
谁能告诉我这破站到底怎么发代码?
2020-04-17 16:13:50 +08:00
回复了 zycojamie 创建的主题 程序员 后端要求前端传的查询参数
我就是这样做的.已经用了一年多了.如果项目很小,开发速度第一可以试试.缺点就是只能普通查询,如果查询有 join 的需要手动写规则
下面这个是我查询列表的一个通用方法.新加一个模型只需要设置一下 model 类型 和 filter 映射和 order 映射
用这套接口速度起飞,但有局限性
```php
// Base controller
public function lists(): Json
{
$json = new JsonRes();
[$page, $limit, $filter, $order, $extra] = $this->getListParam();
$scene = $extra['scene'] ?? $this->model::SCENE['default'];
$where = $this->model::buildWhereMap($filter);
$fmtOrder = $this->model::buildFmtOrder($order);
if ( $scene === $this->model::SCENE['admin'] && !$this->isAdminUser() ) {
return $this->noAuth();
}
[$list, $count] = $this->model::getListNotThrowEmptyEx($page, $limit,
$this->model::NEED_COUNT, $where, [], $order);
$fmtList = [];
/** @var \app\model\Base $model */
foreach ($list as $model) {
$fmtList[] = $model->getFmtDetail($scene);
}
$json->setData([
'list' => $fmtList,
]);
$json->setPage($page);
$json->setLimit($limit);
$json->setCount($count);
return json($json);
}

// Base Model
/**
* 根据 filter 构建查询条件.
*
* @param array|null $filterList
* @param array $filterFieldMapDbField
* @return array
*/
public static function buildWhereMap($filterList, array $filterFieldMapDbField =
[]): array
{

$filterFieldMapDbField = empty($filterFieldMapDbField) ? static::FILTER_FIELD_MAP_DB_FIELD : $filterFieldMapDbField;
$map = [];
if ( !is_array($filterList) ) {
return [];
}
foreach ($filterList as $filterField => $item) {
if ( $item instanceof Closure ) {
$map[] = $item;
continue;
}
if ( !is_array($item) || !array_key_exists('condition', $item)
|| !array_key_exists('val', $item) ) {
continue;
}
if ( $item['val'] === '' || $item['condition'] === Condition::TYPE['undefined'] ||
!in_array($item['condition'], Condition::TYPE, true)
) {
continue;
}
if ( !array_key_exists($filterField, $filterFieldMapDbField) ) {
continue;
}
$dbField = $filterFieldMapDbField[$filterField];
$condition = Condition::DB_CONDITION[$item['condition']];
$map[] = [
$dbField, $condition, Condition::formatVal($item['condition'], $item['val']),
];
}

return $map;
}
```
前端代码:
```typescript
// 一个模型只需要定义下面这些 就可以使用通用增删改查 5 个接口了
type Model = Expert
const route = '/expert'
type FilterKeys =
| 'id'
| 'ctime'
| 'expertCode'
| 'name'
| 'userName'
| 'departmentId'
| 'orgCode'
| 'orgName'
| 'provCode'
| 'cityCode'
| 'countyCode'
| 'provName'
| 'cityName'
| 'countyName'
| 'level'
| 'intro'
| 'type'
| 'mobile'
| 'phone'
| 'email'
| 'qq'
| 'wx'
| 'remark'
| 'serviceType'
type OrderKeys = 'id' | 'ctime'
type Scene = 'admin' | 'default'
interface QueryExtra extends BaseExtra<Scene> {}
type ActGetListParam = GetListParam<FilterKeys, OrderKeys, QueryExtra>
type AddData = Omit<Model, 'adeptLabelList' | 'department' | 'id'>
type EditData = AddData & Pick<Model, 'id'>

export async function lists<T = Model>(data: ActGetListParam) {
return bpost<{ list: T[] }>({
url: route + '/list',
data,
})
}
```
2020-04-15 22:26:44 +08:00
回复了 SaintSeiya 创建的主题 Java 大佬指点如何上手 spring boot
学习不是应该上 gayhub 吗? 上面案例把你要做的全部写了一遍.你直接复制就能用. 不看 gay 站看 b 站属实清流
2020-04-14 16:17:47 +08:00
回复了 skyworker 创建的主题 Go 编程语言 laravel 转 golang 最佳实践是?
为什么要转 go 啊, 哪个程序员不会几个语言啊 一起写不就行了吗
2020-04-14 14:28:21 +08:00
回复了 skyworker 创建的主题 Go 编程语言 laravel 转 golang 最佳实践是?
@skyworker 不至于.我觉得 go 多了百分之二十代码左右 这百分之 20 都是为了 orm 获取列表 写接口写的.等泛型有了 我觉得基本没什么差距了,或者 go 的代码更少些
2020-04-14 13:46:41 +08:00
回复了 skyworker 创建的主题 Go 编程语言 laravel 转 golang 最佳实践是?
我也是尝试用 go 写 api. 总体来说,没有泛型很难受. 其他的还好.
安全性变高,灵活度变低,复杂度变高
1:
```go
d := &AddUserData{}
if err := c.ShouldBindJSON(d); err != nil {
app.ValidError(err)
return
}
user := &models.User{
Account: d.Account,
Gender: d.Gender,
Name: d.Name,
Age: d.Age,
Level: d.Level,
}
if err := models.Add(user); err != nil {
app.ErrorMsg(err.Error())
return
}
app.Success()
```
2:
json 注解中加入 sql:"TYPE:json"
类型是先 Value 和 Scan 接口
3:
db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18,})

db.Model(&user).Updates(User{Name: "hello", Age: 18})
2020-04-13 13:29:41 +08:00
回复了 Bramblex2 创建的主题 程序员 后端接口这样设计是否合理
方案 1: interface Resp{
A:{a: string, b:string, c: string},
B?:{a: string, b: string, c: string}
}
方案 2: interface Resp{
A:{a: string, b:string, c: string},
B:{a: string, b: string, c: string}|null
}
2020-04-11 02:37:50 +08:00
回复了 FaiChou 创建的主题 程序员 .env 应不应该放到 git 中?
2 个 env 文件
.env 通用配置 上传到 git
.env.local 本地隐私配置 不上传到 git
jenkins 里 服务器隐私配置
1 ... 14  15  16  17  18  19  20  21  22  23 ... 24  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
Developed with CodeLauncher
♥ Do have faith in what you're doing.