小编rco*_*rre的帖子

我应该在响应正文上错误检查Close()吗?

文档net/http包含以下示例:

resp, err := http.Get("http://example.com/")
if err != nil {
    panic(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Printf("%s", body)
Run Code Online (Sandbox Code Playgroud)

Close返回一个error,但没有检查.这里有什么我想念的吗?在go中经常强调检查每个错误的重要性,但我看到这种defer resp.Body.Close()模式很多,没有错误检查.

go

14
推荐指数
3
解决办法
1814
查看次数

为什么我只能在指针上直接指定别名?

type a struct{}

type b *a
type c a

func main() {
    var _ b = &a{}
    var _ c = a{}
}
Run Code Online (Sandbox Code Playgroud)

为什么b作业有效但不是c作业?我意识到后者是可能的演员,但我想知道这个限制的原因是什么.

go

8
推荐指数
2
解决办法
109
查看次数

手动触发的DAG应该使用哪个开始日期?

许多设置示例schedule_interval=None动态开始日期的气流示例,例如airflow.utils.dates.days_ago(2)datetime.utcnow()。但是,文档建议不要使用动态开始日期:

我们建议不要将动态值用作start_date,尤其是datetime.now(),因为它可能会造成混乱。该时间段结束后将触发该任务,理论上,当now()前进时,@ hourly DAG永远不会到现在的一个小时之后。

起始日期与手动触发的数据无关吗?最佳做法是什么?

airflow airflow-scheduler

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

为什么我必须切片数组以将其用作别名参数中的范围?

通常,我不必将数组切片以将其视为范围.但是,当它作为模板别名参数传递时,我似乎这样做:

enum test(alias fun) = "it works";

immutable a = [1,2,3];

pragma(msg, test!(a[].map!(x => x))); // OK
pragma(msg, test!(a.map!(x => x)));   // map is not a member of a

// but a.map does work at runtime ...
unittest {
    auto r = a.map!(x => x);
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

d

6
推荐指数
0
解决办法
131
查看次数

如何确定作业是否失败

我如何以编程方式确定a job是否已经失败并且不再重试?我在失败的工作中看到了以下内容:

status:
  conditions:
  - lastProbeTime: 2018-04-25T22:38:34Z
    lastTransitionTime: 2018-04-25T22:38:34Z
    message: Job has reach the specified backoff limit
    reason: BackoffLimitExceeded
    status: "True"
    type: Failed
Run Code Online (Sandbox Code Playgroud)

但是,文档没有解释为什么conditions是列表.可以有多种条件吗?如果是这样,我依赖哪一个?是否保证只有一个status: "True"

kubernetes

6
推荐指数
1
解决办法
2486
查看次数

如何为多个并行作业创建手动触发器

我想要一个阻塞手动操作,它将在下一阶段触发多个并行作业。我怎样才能实现这个目标?例如:

  1. deploy-int 在合并时运行
  2. 管道等待单个手动触发器
  3. deploy-prd-1 和deploy-prd-2 并行运行

这是我尝试过的:

1

stages:
  - deploy-dev
  - deploy-prd-1
  - deploy-prd-2

deploy-dev:
  stage: deploy-dev
  script:
    - echo deploy-dev

deploy-prd-1:
  when: manual
  allow_failure: false
  stage: deploy-prd-1
  script:
    - echo deploy-prd-1

deploy-prd-2:
  stage: deploy-prd-2
  script:
    - echo deploy-prd-2
Run Code Online (Sandbox Code Playgroud)

这实现了1和2,但在3上失败了,因为deploy-prd-1和deploy-prd-2是串联的,而不是并行的

2

stages:
  - deploy-dev
  - deploy-prd

deploy-dev:
  stage: deploy-dev
  script:
    - echo deploy-dev

deploy-prd-1:
  when: manual
  allow_failure: false
  stage: deploy-prd
  script:
    - echo deploy-prd-1

deploy-prd-2:
  stage: deploy-prd
  script:
    - echo deploy-prd-2
Run Code Online (Sandbox Code Playgroud)

这在 2 上失败,因为部署-prd-2 将自动运行,无需等待手动触发

3

stages:
  - …
Run Code Online (Sandbox Code Playgroud)

continuous-integration gitlab gitlab-ci

6
推荐指数
1
解决办法
552
查看次数

函数参数如何存储在lisp中?

我假设传递给lisp函数的值被分配给与参数名称匹配的引号.但是,我对此感到惊讶:

(defun test (x) (print (eval 'x)))
(test 5)
Run Code Online (Sandbox Code Playgroud)

不起作用(变量x未绑定).因此,如果参数未作为符号存储在函数中,那么本例中究竟是什么IS?有没有办法从符合参数名称的符号中访问参数?

更多背景:我想做的是这样的:

defun slice (r1 c1 r2 c2 board)
  (dolist (param '(r1 c1 r2 c2))  ;adjust for negative indices
    (if (< (eval param) 0)
      (set param (+ (length board) (eval param)))))
        ;Body of function
Run Code Online (Sandbox Code Playgroud)

基本上,我想迭代前四个参数并调整它们的任何值,如果它们<0.当然,我可以做一个let并为每个参数设置一条单独的行,但考虑到我正在做对于这四个参数中的每个参数,这看起来更清晰.但是,我得到变量R1未绑定的错误.

lisp parameters function common-lisp

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

在D中获取课程的家长

如何从该类外部获取类的基类型?我parent在文档中找到了这个特性,但我不确定如何使用它.

module test;
import std.stdio;

class A {}
class B : A { }

void main() {
    writeln(typeid(__traits(parent, B)));
    writeln(typeid(__traits(parent, test.B))); // try prefixing with module name
}
Run Code Online (Sandbox Code Playgroud)

我希望至少在第二种情况下获得A,但这会打印出来

void
void
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将某个类T的基类分配给别名,并像使用任何其他类型一样使用它.例如:

alias T = __traits(parent, V);
T t = new T();
Run Code Online (Sandbox Code Playgroud)

d dmd

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

为什么使用monkeypatch.setenv 而不是os.putenv

pytest 的monkeypatch模块提供了一个setenv函数,Set environment variable name to value.为什么会monkeypatch提供这个?听起来一样os.putenv吗?它提供prepend参数是为了方便,但这似乎是拥有一个用于设置环境变量的新函数的弱理由。

python monkeypatching environment-variables pytest

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

在垂直分割中打开两个帮助窗口

在垂直拆分窗口中打开Vim帮助说明了如何在垂直拆分中打开帮助.但是,假设我运行help fzf后跟vert help vim-go.Vim忽略了vert,只是用fzf帮助取代了vim-go帮助.

如何以并排分割方式打开两个帮助主题?

vim

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

为什么不能将结构转换为嵌入类型

package main

type Inner struct {
    x int
}

type Outer struct {
    Inner
}

func main() {
    x := Inner{1}
    y := (Outer)(x) // cannot convert x (type Inner) to type Outer
}
Run Code Online (Sandbox Code Playgroud)

关于转化的go规范部分声称

在以下任何一种情况下,非常数值x都可以转换为类型T:...忽略struct标签(见下文),x的类型和T具有相同的底层类型....

关于类型标识的部分说:

如果两个结构类型具有相同的字段序列,并且相应的字段具有相同的名称,相同的类型和相同的标记,则它们是相同的.

这是我的理解,这两个InnerOuter有单场x这是一个int.那么为什么我不能将其转换OuterInner

我最终发现我可以使用x.Inner,但它花了我一段时间,所以我很好奇为什么(在我看来)更明显的方法是不允许的.

type-conversion go

0
推荐指数
1
解决办法
441
查看次数

为什么我的静态记录器上会收到死代码警告

我正在尝试按照日志文档实现记录器。我有以下代码:

记录器.rs

use std::sync::OnceLock;

static LOGGER: OnceLock<Logger> = OnceLock::new();

struct Logger {
    level: log::Level,
}

pub fn init(level: log::Level) {
    if let Ok(_) = LOGGER.set(Logger { level }) {
        log::set_logger(LOGGER.get().unwrap()).unwrap();
        log::set_max_level(level.to_level_filter());
    }
}

impl log::Log for Logger {
    fn enabled(&self, metadata: &log::Metadata) -> bool {
        metadata.level() <= self.level
    }

    fn log(&self, record: &log::Record) {
        if self.enabled(record.metadata()) {
            eprintln!("{}: {}", record.level(), record.args());
        }
    }

    fn flush(&self) {}
}
Run Code Online (Sandbox Code Playgroud)

库文件

use log::info;

mod logger;

pub fn run(loglevel: log::Level) {
    logger::init(loglevel); …
Run Code Online (Sandbox Code Playgroud)

rust

0
推荐指数
1
解决办法
48
查看次数