小编The*_*ist的帖子

你如何在golang中命名一个多术语包?

go 包的命名约定是有据可查的,golang.org 的博客指出:

好的包名简短而清晰。它们是小写的,没有下划线或混合大写。它们通常是简单的名词,例如 [descriptions removed]: time, list, http

同一个指南然后提供了两个坏名字的例子:

以下是两个在其他语言中可能风格不错但在 Go 中不太适合的名称示例:computeServiceClient、priority_queue

指南没有说的是,当您有一个具有非常特定用途的包裹而实际上不适合作为一个词的名词时该怎么做。

我们有一个名为 Rhino Horn 的库,用于在内部查找意外泄露的凭据。出于运行 Rhino Horn 的资源密集程度的原因,我被指示在 golang 中为 Rhino Horn 编写一个主管,以监控其性能并在需要时快速关闭。Rhino Horn 不是用 Go 编写的,而是一个完全独立的项目。

golang 命名约定会让我给 Rhino Horn Supervisor 起什么名字?

naming-conventions go

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

命令行工具输出后如何更改输出?

我注意到很多命令行工具,例如wget,会将进度显示为一个数字或进度条,它在进程完成时前进.虽然问题不是特定于语言,但我最常用于命令行工具(C++,Node.js,Haskell)的语言中,我还没有看到过这样做的方法.

这是一个示例,当wget下载文件时,单行终端的三个快照:开始过程过程中过程接近完成

除了其他信息外,wget还会显示一个进度条(<=>),它会在下载文件时前进.到目前为止下载的数据量(6363,179561,316053)和当前下载速度(10.7KB/s,65.8KB/s,63.0KB/s)也会更新.这是怎么做到的?

理想情况下,请包含上述三种语言中的一种或多种语言的代码示例.

c++ terminal command-line haskell node.js

12
推荐指数
2
解决办法
661
查看次数

使用putStrLn将Haskell forkIO线程彼此叠加

我正在forkIO使用以下代码来处理Haskell轻量级线程():

import Control.Concurrent

beginTest :: IO ()
beginTest = go
    where
    go = do
        putStrLn "Very interesting string"
        go
        return ()

main = do
    threadID1 <- forkIO $ beginTest
    threadID2 <- forkIO $ beginTest
    threadID3 <- forkIO $ beginTest
    threadID4 <- forkIO $ beginTest
    threadID5 <- forkIO $ beginTest

    let tID1 = show threadID1
    let tID2 = show threadID2
    let tID3 = show threadID3
    let tID4 = show threadID4
    let tID5 = show threadID5

    putStrLn "Main Thread"
    putStrLn …
Run Code Online (Sandbox Code Playgroud)

io concurrency multithreading haskell stdout

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

为什么这个简单的O(n)Haskell算法表现得更像O(2 ^ n)?

Haskell缓存纯函数调用的结果,这是纯粹和不纯行为分离的众多原因之一.但是这个函数应该在O(n)中运行,其中n在50下面,运行得非常慢:

lucas 1 = 1
lucas 2 = 3
lucas n = lucas (n-1) + lucas (n-2)
map (lucas) [1..50]
Run Code Online (Sandbox Code Playgroud)

前三十个左右一起计算在一秒钟内,然后31个需要半秒钟左右,32个需要一秒钟,33个需要几秒钟,34个需要6秒钟,35个需要11秒钟,36个需要17秒钟. .

为什么这个功能这么慢?如果GHC交互式运行时缓存结果,则每次调用lucas应仅涉及前两个缓存术语的求和.一个额外的操作找到术语3,一个额外的添加找到术语4,一个额外的添加找到术语5,所以术语50达到考虑缓存只有48个加法.该功能不应该花费近一秒钟才能找到至少前几千个术语,为什么表现如此可怕?

我现在已经等了半个多小时lucas 500才能计算出来.

algorithm big-o caching haskell time-complexity

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

如何在需要return语句的GraphQL解析器中调用异步node.js函数?

graphql.org/graphql-js上提供的用于创建简单GraphQL实现的Hello World示例如下:

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
    type Query {
        hello: String
    }
`);

// The root provides a resolver function for each API endpoint
var root = {
    hello: () => {
        return 'Hello World!';
    }
};

// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
    console.log(response);
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试在解析器中运行异步函数,例如数据库调用,我似乎无法弄清楚如何使其工作:

我正在做的事情:

var { graphql, …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js graphql graphql-js

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

如何监视Web服务器上的文件并在数据库(MySQL)中记录每次访问(最好是通过IP地址)?

出于安全原因,我的Web服务器上有一个文件,我希望能够监视访问.每次访问它时,我都希望将一个条目添加到MySQL日志表中.这样,我就可以从Web应用程序中主动响应安全漏洞.

php database logging file monitor

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

在Node.js ws包上进行适当的错误处理

我正在努力用基于Websocket的数据管道替换基于REST的数据管道,而且我很难找到所有可能出错的地方.系统是生产系统,因此如果失败并且无法恢复,则会发生非常糟糕的事情.这是我到目前为止所得到的:

客户端

  • let server = new Websocket(path, opts)
    • 包装它try-catch会发现程序员错误,例如错误的URL,但是服务器没有正确响应等操作错误似乎无法捕获,因为它们是异步的并且没有回调
  • server.send(data, cb)
    • 包装try-catch它将捕获类型错误,通常是程序员错误
    • 在这里添加回调(function (err) { handleErr(err); })是一个很好的操作错误,因为err如果发送由于任何原因失败,回调将具有非null ,因此处理
  • server.on('error', cb)
    • 在这里添加一个回调似乎是一个好主意,因为error事件是EventEmitter规范的一部分,但我还没有抓住它的任何东西
  • 心跳检查(详细,但在此处描述)
    • ws自述文件建议将其作为捕获静默连接故障的方法

服务器端

  • server.on('connection', function(connection) {...})
    • 尝试connection.send('test', function(err) { handleErr(err); });使用它之前确保连接没有以某种方式进行设置失败是一种很好的方法,但可能没有必要.此外,try-catch由于上述原因,应将其包装在一起
  • server.on('error', cb)
    • 似乎是一个好主意,原因与我在客户端上面做的相同

它似乎ws很难建立在生产的基础之上是困难的,因为它记录了所有可能出错的不同事物,并且使用像Socket.io这样更加用户友好的库将消除许多性能优势.使用ws.是否有关于使用时可能出错的所有不同事物的文档ws,或者至少是对其进行加固的指南?我觉得部署这个东西只是一场赌博,任何一秒钟我都会愤怒地被召入办公室解决问题.

communication production-environment websocket node.js

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

如何为使用Stack构建的Haskell项目设置可执行输出位置?

build使用Stack project/dist/编译Haskell程序时,我试图将可执行文件写入其中,但是无论我使用什么命令行参数或更改的配置文件,它始终以结尾project/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/project/

花时间寻找在命令行参数体面的数额后stack命令,以及期权project.cabalSetup.hs以及stack.yaml,我似乎无法找到如何配置的输出位置stack build

如何配置可执行文件的输出位置stack build

haskell compilation build haskell-stack

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

接口的通用和非通用使用有什么区别?

在新的类型参数设计草案中,您现在可以将接口约束应用于泛型函数:

func prettyPrint[T Stringer](s T) string {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,通过使用没有泛型的接口参数,这已经成为可能:

func prettyPrint(s Stringer) string {
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用第一个和使用第二个有什么区别?

generics interface go

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

为什么 `thread::JoinHandle&lt;T&gt;` 有一个类型参数?

在 Rust 中,thread::JoinHandle<T>标准库中包含的类型具有类型参数T。然而,似乎并没有T实际设置或用于任何用途。

事实上,Rust 自己的文档大多只是thread::JoinHandle<_>在需要将 a 分配JoinHandle<T>给某些东西时使用。这T实际上有什么作用?

syntax multithreading rust

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

识别Haskell元组中的重复项

我正在尝试编写一个函数,如果元组中的任何两个值相同,它将Nothing成为Just Int元组.对于五个值的元组,这就是我所拥有的.显然,还有改进的余地:

nothingIfMatch :: Maybe (Int, Int, Int, Int, Int) -> Maybe (Int, Int, Int, Int, Int)
nothingIfMatch Nothing = Nothing
nothingIfMatch (Just (a, b, c, d, e))
    | a == b = Nothing
    | a == c = Nothing
    | a == d = Nothing
    | a == e = Nothing
    | b == c = Nothing
    | b == d = Nothing
    | b == e = Nothing
    | c == d = Nothing …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell non-deterministic

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

Go 中重新构造切片是一个常数时间操作吗?

我在 Go 中有一个坐标对 ( ) 的 FIFO 队列[x, y]

type Copair [2]int
type Queue []Copair
var q = Queue{ ... preloaded values ... }
Run Code Online (Sandbox Code Playgroud)

API 定义如下,其中重要的部分是函数pop()

func (q Queue) push(p Copair) {
    q = append(q, p)
}

func (q Queue) pop() (error, Copair) {
    if q != nil && len(q) >= 1 {
        q = q[1:]
        return nil, q[0]
    } else {
        return errors.New("index out of range [0]"), nil
    }
}
Run Code Online (Sandbox Code Playgroud)

因为q = q[1:]我正在重新构造切片,理论上它只需要在内存中更改一个地址,因此是一项恒定时间操作。现在理所当然,我们正在逐渐丢失堆上的字节(或者谁知道,Go …

memory go time-complexity slice

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

如何将一系列javascript(jQuery)按钮"点击"转换为循环?

我有一系列按钮(其中25个)用于设置Web应用程序中某些内容的高度.我知道这是一种奇怪的方式,但这是有原因的.每个按钮的id等于它设置的高度,以英寸为单位,从0到24,它们都共享HeightButtons类.这是我到目前为止所做的,手动输入全部:

$('#0').click()(function() {
    LiftHeight = 0;
}$('#1').click()(function() {
    LiftHeight = 1;
}$('#2').click()(function() {
    LiftHeight = 2;
}$('#3').click()(function() {
    LiftHeight = 3;
}$('#4').click()(function() {
    LiftHeight = 4;
}$('#5').click()(function() {
    LiftHeight = 5;
}$('#6').click()(function() {
    LiftHeight = 6;
}$('#7').click()(function() {
    LiftHeight = 7;
}$('#8').click()(function() {
    LiftHeight = 8;
}$('#9').click()(function() {
    LiftHeight = 9;
}$('#10').click()(function() {
    LiftHeight = 10;
}$('#11').click()(function() {
    LiftHeight = 11;
}$('#12').click()(function() {
    LiftHeight = 12;
}$('#13').click()(function() {
    LiftHeight = 13;
}$('#14').click()(function() {
    LiftHeight = 14;
}$('#15').click()(function() { …
Run Code Online (Sandbox Code Playgroud)

javascript optimization jquery loops

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