小编nba*_*ari的帖子

vim 从行号中删除下划线

我使用 brew 升级了 vim (macOS):

$ brew info vim
vim: stable 8.1.2100 (bottled), HEAD
Run Code Online (Sandbox Code Playgroud)

升级后,右边的行号有下划线,例如从附图中行号1看起来像 1_____,知道如何去除下划线吗?

仅在拥有时发生 :set relativenumber

vim 底层

vim

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

如何测试永远循环的代码

我有一个应用程序(epazote),一旦开始运行永远但我想在阻止/等待直到ctrl+ c被按下或被杀死之前测试一些值.

这是一个小例子:http://play.golang.org/p/t0spQRJB36

package main

import (
    "fmt"
    "os"
    "os/signal"
)

type IAddString interface {
    AddString(string)
}

type addString struct{}

func (self *addString) AddString(s string) {
    fmt.Println(s)
}

func block(a IAddString, s string) {

    // test this
    a.AddString(s)


    // ignore this while testing
    block := make(chan os.Signal)
    signal.Notify(block, os.Interrupt, os.Kill)

    for {
        signalType := <-block
        switch signalType {

        default:
            signal.Stop(block)
            fmt.Printf("%q signal received.", signalType)
            os.Exit(0)
        }
    }
}

func main() {
    a …
Run Code Online (Sandbox Code Playgroud)

unit-testing go

9
推荐指数
2
解决办法
5111
查看次数

如何正确等待事件/流程完成不是父母?

我正在使用GO检查一个进程(不是父进程)是否已经终止,基本上类似于FreeBSD中pwait命令但是用go编写.

目前,我尝试了for loop一个kill -0,但我注意到,CPU的使用率是非常高的99%,使用这种方法,这里是代码:

package main

import (
    "fmt"
    "os"
    "strconv"
    "syscall"
    "time"
)

func main() {

    if len(os.Args) != 2 {
        fmt.Printf("usage: %s pid", os.Args[0])
        os.Exit(1)
    }

    pid, err := strconv.ParseInt(os.Args[1], 10, 64)
    if err != nil {
        panic(err)
    }

    process, err := os.FindProcess(int(pid))

    err = process.Signal(syscall.Signal(0))
    for err == nil {
        err = process.Signal(syscall.Signal(0))
        time.Sleep(500 * time.Millisecond) 
    }
    fmt.Println(err)
}
Run Code Online (Sandbox Code Playgroud)

知道如何改进或正确实现这一点.

提前致谢.

UPDATE

sleep像建议的那样在循环内添加,有助于减少负载.

从提供的链接,似乎可以附加到现有的pid,我会尝试 …

linux freebsd go kqueue

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

如何正确关闭请求并继续在后台处理它

对于传入的 HTTP 请求,我必须使用202 Accepted状态代码进行响应,同时继续在后台处理有效负载。例如,这就是我目前正在做的事情:

package main

import (
    "fmt"
    "log"
    "net/http"
    "time"

    "github.com/nbari/violetear"
)

func sleep() {
    time.Sleep(3 * time.Second)
    fmt.Println("done...")
}

func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}

func main() {
    router := violetear.New()
    router.HandleFunc("*", index)

    http.Handle("/", router)
    log.Fatal(http.ListenAndServe(":8080", router))
}
Run Code Online (Sandbox Code Playgroud)

基本上,在处理程序上我只使用,然后在 goroutine 中WriteHeader调用该函数:sleep

func index(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusAccepted)
    go sleep()
}
Run Code Online (Sandbox Code Playgroud)

如果我想回复“200 OK”,我注意到我可以简单地返回,例如:

func index(w http.ResponseWriter, r *http.Request) {
    go sleep()
    return
}
Run Code Online (Sandbox Code Playgroud)

因此想知道我是否应该总是返回我想关闭:

func index(w http.ResponseWriter, r …
Run Code Online (Sandbox Code Playgroud)

http go

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

是否有替代的正则表达式语法来避免错误“不支持环视,包括向前查找和向后查找”?

我尝试实现这个正则表达式来检查字符串 ( "username") 的长度是否在 3 到 30 之间,仅包含字母 (az)、数字 (0-9) 和句点 (.)(不连续):

use regex::Regex; // 1.3.5

fn main() {
    Regex::new(r"^(?=.{3,30}$)(?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]+$").unwrap();
}
Run Code Online (Sandbox Code Playgroud)

当尝试编译正则表达式时,我收到此错误:

use regex::Regex; // 1.3.5

fn main() {
    Regex::new(r"^(?=.{3,30}$)(?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]+$").unwrap();
}
Run Code Online (Sandbox Code Playgroud)

是否有替代的正则表达式或方法来根据这些要求验证字符串?

我可以按照建议删除长度{3,30}并获取字符串长度,但对于第二部分(?!\.)(?!.*\.$)(?!.*?\.\.)[a-z0-9.]+$(防止连续点)?

regex rust

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

sendmail连接被127.0.0.1拒绝

我所使用的服务器是FreeBSD,最近sendmail停止发送电子邮件.我一直在google做很多研究,我从很多不同的网站上尝试了很多东西,但到目前为止还没有任何效果.

这是sendmail命令的输出:

# echo "test" | mail -v -s test test@test.com
test@test.com... Connecting to [127.0.0.1] via relay...
test@test.com... Deferred: Connection refused by [127.0.0.1]
Run Code Online (Sandbox Code Playgroud)

这是端口25上的telnet:

# telnet localhost 25
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying ::1...
telnet: connect to address ::1: Connection refused
telnet: Unable to connect to remote host
Run Code Online (Sandbox Code Playgroud)

这是netstat输出的一部分:

tcp4       0      0 the.first.ip.address.25             *.*                    LISTEN
tcp4       0      0 the.second.ip.address.26            *.*                    LISTEN
tcp4       0      0 the.third.ip.address.25             *.*                    LISTEN
tcp4       0      0 the.fourth.ip.address.25            *.*                    LISTEN
tcp4       0 …
Run Code Online (Sandbox Code Playgroud)

email freebsd sendmail localhost

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

从开发到主控的拉取请求,如何保持分支“均匀/同步”

我使用 git-flow 并根据 Github 保护规则我有分支masterdevelop受保护,两者都带有选项Require linear history

一切正常,但现在我想不只是从develop到合并master,而是开始使用“拉取请求”( develop -- PR --> master) 我想知道是否可以在保持历史线性的同时保持分支均匀/同步,而不需要对develop树枝施加力。

目前,如果我PRdevelopto创建一个拉取请求master,并且因为Require linear history选中了该选项,我无法合并,但只是squash and merge因为rebase and merge这样,如果我修改develop分支并进行另一次提交,它会提前 N 倍,但永远不会是“偶数” 。

我发现报复的唯一develop方法master就是

git pull origin master --rebase
Run Code Online (Sandbox Code Playgroud)

但这随后意味着强制推动:

git push -f
Run Code Online (Sandbox Code Playgroud)

不使用时PR,我只需将开发合并到master(FastForward)并保持历史线性,我可以合并拉取请求并通过禁用来防止强制推送Require linear history,但历史不会是线性的。(我认为 PR 没有使用 FastForward 合并)

我使用 git-flow 的原因是该develop …

git github git-flow pull-request

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

更新api后如何更新集合

我正在使用邮递员从 API (模式)创建集合OpenAPI 3.0

我通过单击“生成集合”来创建集合

在此输入图像描述

然后我可以转到该集合,执行一些请求,到目前为止一切都很好,但如果我修改 API 架构中的某些内容,如何更新集合而无需创建新集合?

postman

7
推荐指数
0
解决办法
431
查看次数

在rabbitmq.conf文件中使用环境变量

我在windows环境中使用RabbitMQ.我正在使用带有ssl配置的RabbitMQ.我的要求是在rabbitmq.conf文件中使用环境变量来读取SSL证书.我用它如下,

{cacertfile,"$ {MY_HOME} /config/SSLCertificates/testca/cacert.pem"

以上环境变量的使用不起作用.你们中的任何一位请帮助我正确使用环境变量.

windows rabbitmq

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

如何在不仅使用标准 Rust 库同时运行相同函数的情况下定期运行一组函数?

我想使用 Rust 创建一个简单的调度程序,以便在定义的时间运行多个并发函数,但如果它们尚未完成,则不要启动更多函数。

例如,如果定义的间隔为一秒,则调度程序应运行这些函数,并且如果先前的函数尚未返回,则不再启动更多函数。目标是防止多次运行相同的函数。

我用 Go 创建了一个工作示例,如下所示:

package main

import (
    "fmt"
    "sync"
    "time"
)

func myFunc(wg *sync.WaitGroup) {
    fmt.Printf("now: %+s\n", time.Now())
    time.Sleep(3 * time.Second)
    wg.Done()
}

func main() {
    quit := make(chan bool)

    t := time.NewTicker(time.Second)
    go func() {
        for {
            select {
            case <-t.C:
                var wg sync.WaitGroup
                for i := 0; i <= 4; i++ {
                    wg.Add(1)
                    go myFunc(&wg)
                }
                wg.Wait()
                fmt.Printf("--- done ---\n\n")
            case <-quit:
                return
            }
        }
    }()

    <-time.After(time.Minute)
    close(quit)
}
Run Code Online (Sandbox Code Playgroud)

NewTicker由于我在 Rust …

rust

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