小编Sco*_*ter的帖子

Go中的Python string.format的等价物?

在Python中,您可以这样做:

"File {file} had error {error}".format(file=myfile, error=err)
Run Code Online (Sandbox Code Playgroud)

或这个:

"File %(file)s had error %(error)s" % {"file": myfile, "error": err}
Run Code Online (Sandbox Code Playgroud)

在Go中,最简单的选项是:

fmt.Sprintf("File %s had error %s", myfile, err)
Run Code Online (Sandbox Code Playgroud)

这不允许你交换格式字符串中的参数顺序,你需要为I18N做.Go 确实有这个template包,需要这样的东西:

package main

import (
    "bytes"
    "text/template"
    "os"
)

func main() {
    type Params struct {
        File string
        Error string
    }

    var msg bytes.Buffer

    params := &Params{
        File: "abc",
        Error: "def",
    }

    tmpl, _ := template.New("errmsg").Parse("File {{.File}} has error {{.Error}}")
    tmpl.Execute(&msg, params)
    msg.WriteTo(os.Stdout)
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个很长的路要走错误信息.是否有更合理的选项允许我提供独立于订单的字符串参数?

python string go

19
推荐指数
2
解决办法
6214
查看次数

用户在MySQL中具有SELECT权限的表的列表

简短版本:如何编写SQL过程来列出特定用户可以访问MySQL数据库中的几个表中的哪一个?

更长的版本:

我正在编写一个多用户应用程序,它使用公司的几个分支机构的数据访问数据库.数据库具有许多任何用户都可以访问的查找表,以及只有授权用户才能访问的每个分支的表.我的策略是:

  • 编写存储过程,返回用户具有SELECT权限的相关表的列表.
  • 从应用程序,调用该过程.如果只返回一个表,则使用它,否则让用户选择他们想要访问的分支(例如,对于管理员).

我无法弄清楚如何编写这样的存储过程.SHOW GRANTS FOR CURRENT_USER是一个明显的可能性,但解析如下:

GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'
Run Code Online (Sandbox Code Playgroud)

在SQL弄清楚表是什么,似乎这样太乱了.SELECT从拥有权限的实际表中执行a 操作似乎也有问题,因为我必须复制MySQL的逻辑以组合来自各种表(用户,数据库,主机等)的权限.

任何智慧的话?

mysql database-permissions

7
推荐指数
2
解决办法
2万
查看次数

如何在doxygen中添加脚注?

我想在我的doxygen输出中插入一个编号(或其他,我不挑剔)的脚注.该特殊命令的列表不包括任何东西,我可以认同为启用此.我希望有类似的东西:

This is my text.\footnote{This is my footnote}
Run Code Online (Sandbox Code Playgroud)

这将产生

这是我的文字.1

然后

1:这是我的脚注

在页面的底部.有没有办法实现这个或功能相同的东西?

doxygen

7
推荐指数
3
解决办法
1152
查看次数

棘手的 Go xml.Unmarshal() 案例

我正在尝试在 Go 中像这样解组 XML:

<property>
  <code value="abc"/>
  <valueBoolean value="true"/>
</property>
Run Code Online (Sandbox Code Playgroud)

或这个

<property>
  <code value="abc"/>
  <valueString value="apple"/>
</property>
Run Code Online (Sandbox Code Playgroud)

或这个

<property>
  <code value="abc"/>
  <valueDecimal value="3.14159"/>
</property>
Run Code Online (Sandbox Code Playgroud)

等等,进入这个:

type Property struct {
    Code  string      `xml:"code>value,attr"`
    Value interface{}
}
Run Code Online (Sandbox Code Playgroud)

其中标记(valueBooleanvalueString等) 告诉我 value 属性的类型是什么。我试图解析的 XML 是国际标准的一部分,所以我对其定义没有任何控制权。实现解析这些东西并不难,比如:

var value string
for a := range se.Attr {
    if a.Name.Local == "value" {
        value = a.Value
    } else {
        // Invalid attribute
    }
}
switch se.Name.Local {
case "code":
case "valueBoolean":
    property.Value …
Run Code Online (Sandbox Code Playgroud)

go xml-parsing hl7-fhir

5
推荐指数
1
解决办法
1606
查看次数

用大猩猩mux检索可选查询变量?

我正在编写一个可以采用POST或GET的处理程序。因此,我希望可以说:

http://host/query?parm1=value&parm2=value
Run Code Online (Sandbox Code Playgroud)

我当时以为大猩猩混合体会给我:

{
    "parm1": "value",
    "parm2": "value
}
Run Code Online (Sandbox Code Playgroud)

但是mux.Vars(r)空的。我知道使用.Query("key", "value"会使参数成为强制性的,这不是我想要的。我想念什么?

go gorilla

5
推荐指数
1
解决办法
2411
查看次数

如何在 Angular 9 中动态导入语言环境?

我正在尝试在 Angular 9(基于monorepo)应用程序中动态导入语言环境。我正在做如下事情:

import { Injectable } from '@angular/core';
import { registerLocaleData } from '@angular/common';

@Injectable()
export class LocaleService {
    ...

    private capitalize(str: string): string {
        return str.charAt[0].toUpperCase() + str.substring(1).toLowerCase();
    }

    registerLocales() {
        for (const lang of ['de', 'fr', 'es']) {
            const basePkg = `locale${this.capitalize(lang)}`;
            const extraPkg = basePkg + 'Extra';

            const base = import(`@angular/common/locales/${lang}`).then(m => m[basePkg]);
            const extra = import(`@angular/common/locales/extra/${lang}`).then(m => m[extraPkg]);

            registerLocaleData(base, extra);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代替:

import { Injectable } from '@angular/core';
import { registerLocaleData } from …
Run Code Online (Sandbox Code Playgroud)

typescript angular

5
推荐指数
2
解决办法
3811
查看次数

扩展 graphene/graphene_django 中的查询参数

如何向石墨烯中的 GraphQL 查询添加非字段参数?这是一个用例的示例。我希望能够做到:

{
  hsv(h: 40, s: 128, v: 54) {
    r
    g
    b
    name
}
Run Code Online (Sandbox Code Playgroud)

使用这个 Django 模型:

from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator,

class Color(models.Model):
    name = models.CharField(
        "name",
        max_length=24,
        null=False, blank=False)
    r = models.IntegerField(
        "red", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )

    g = models.IntegerField(
        "green", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )

    b = models.IntegerField(
        "blue", null=False, blank=False,
        validators=[MinValueValidator(0), MinValueValidator(255)]
    )
Run Code Online (Sandbox Code Playgroud)

以及这个 GraphQL 对象类型和基于它的查询:

from graphene import ObjectType, IntegerField, Field, relay
from graphene_django import DjangoObjectType

from .django …
Run Code Online (Sandbox Code Playgroud)

django-models graphql graphene-python

4
推荐指数
1
解决办法
4246
查看次数

为什么 concurrent.futures.ThreadPoolExecutor().submit 不立即返回?

在这段代码中:

import concurrent.futures
import time

def pafter(t):
    time.sleep(t)
    print('Hi')

with concurrent.futures.ThreadPoolExecutor(5) as e:
    e.submit(pafter, 2)

print('With returned')
Run Code Online (Sandbox Code Playgroud)

我希望看到:

With returned
Hi
Run Code Online (Sandbox Code Playgroud)

但我看到:

Hi
With returned
Run Code Online (Sandbox Code Playgroud)

为什么不submit立即返回?我要改变什么才能让它这样做?

python concurrency python-multithreading

4
推荐指数
1
解决办法
2214
查看次数

Doxygen对Python中声明的注释结束

在C/C++中,您可以强制doxygen识别注释是否适用于行前面的文本.任何这些:

int my_variable;                 /*!< This is my variable */
int my_variable;                 /**< This is my variable */
int my_variable;                 //!< This is my variable
int my_variable;                 ///< This is my variable
Run Code Online (Sandbox Code Playgroud)

将字符串添加到文档中my_variable.在Python中尝试等效的东西似乎不起作用.这有效:

## This is my variable
my_variable = None
Run Code Online (Sandbox Code Playgroud)

这个:

my_variable = None               ## This is my variable
my_other_variable = None
Run Code Online (Sandbox Code Playgroud)

my_other_variable正如您所期望的那样,附上文档,但这两者都是:

my_variable = None               ##< This is my variable
my_variable = None               #!< This is my variable
Run Code Online (Sandbox Code Playgroud)

似乎只是放弃了文档.有没有办法//!<在Python中做相同的操作?

python doxygen

3
推荐指数
1
解决办法
1155
查看次数

如何为 Go 中从标量派生的类型实现 UnmarshalJSON?

我有一个简单的类型,它实现了 Go 中子类型整数常量到字符串的转换,反之亦然。我希望能够自动将 JSON 中的字符串解组为这种类型的值。我不能,因为 UnmarshalJSON 没有给我返回或修改标量值的方法。它需要一个结构,其成员由 UnmarshalJSON 设置。“,string”方法不适用于内置标量类型以外的其他类型。有没有办法为派生标量类型正确实现 UnmarshalJSON?

这是我所追求的一个例子。我希望它打印“Hello Ralph”四次,但它打印“Hello Bob”四次,因为 PersonID 没有被更改。

package main

import (
    "encoding/json"
    "fmt"
)

type PersonID int

const (
    Bob PersonID = iota
    Jane
    Ralph
    Nobody = -1
)

var nameMap = map[string]PersonID{
    "Bob":    Bob,
    "Jane":   Jane,
    "Ralph":  Ralph,
    "Nobody": Nobody,
}

var idMap = map[PersonID]string{
    Bob:    "Bob",
    Jane:   "Jane",
    Ralph:  "Ralph",
    Nobody: "Nobody",
}

func (intValue PersonID) Name() string {
    return idMap[intValue]
}

func Lookup(name string) PersonID {
    return nameMap[name]
} …
Run Code Online (Sandbox Code Playgroud)

json go

3
推荐指数
1
解决办法
3434
查看次数