小编Aci*_*dic的帖子

Go Gorilla Websockets~在ping/pong失败(用户disconnct)调用函数?

我正在用Golang和Gorilla的Websocket工具包编写聊天程序.

我想知道每当用户断开连接或ping/pong消息失败时是否有办法运行一个函数.我需要这个从变量等中删除它们.有没有简单的方法来做到这一点?

ping go websocket gorilla

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

Golang Mutex锁定特定变量/映射

我对有关互斥锁在Golang中的工作方式感到有些困惑,尽管我之前已经使用过它们.

这是我的问题:

  1. 互斥锁到底是什么锁定的?(如何)您是否仅使用它来锁定特定变量?

  2. 我应该使用频道而不是互斥体吗?

  3. 互斥锁和储物柜之间有区别吗?

我正在用golang开发一个高度并发的网站,我需要在不同的时间管理每个人的钱包,我试图避免我的程序中的任何比赛.例如,如果我的程序想要向用户添加500个信用,它将读取用户的当前余额(来自firebase)并添加500然后更新该值.但如果由于某种原因它执行了两次,则可能会对用户的钱包进行不正确的更改.

concurrency mutex go

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

从Go中的字符串访问内存地址?

在golang中,我可以从给定的字符串中打印内存地址的值吗?

例如,如果运行以下代码:

a := "A String"
fmt.Println(&a)
Run Code Online (Sandbox Code Playgroud)

它打印0x1040c108.

我怎么能得到一个字符串,0x1040c108并打印存储在内存中的字符串的值?就像是fmt.Println(*0x1040c108)

这可能吗?

pointers go memory-address

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

Golang 提示输入 SSH Sudo 密码(或退出)

我正在尝试通过Go 程序中的SSH 包运行脚本(到目前为止我已经成功了)。

我的问题是,如果用户具有 sudo 权限,脚本会尝试使用 sudo 运行命令,这会导致 bash 脚本暂停,直到用户输入密码。

例如:

[ERROR ] Install cs-server: Checking dependencies: missing: lib32gcc1
# It attempts to install the missing dependencies with sudo but pauses here
[sudo] password for guest: 
Run Code Online (Sandbox Code Playgroud)

在我的 Go 程序中,我写了一些类似的东西:

// Connect to SSH and retreive session...

out, err := session.StdoutPipe()
if err != nil {
    log.Fatal(err)
}

go func(out io.Reader) {
    r := bufio.NewScanner(out)
    for r.Scan() {
        fmt.Println(r.Text())
    }
}(out)

// Execute ssh command...
Run Code Online (Sandbox Code Playgroud)

我收到与上面示例完全相同的输出,仅在这种情况下,我什至看不到该行[sudo] password for …

linux ssh bash go

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

在 Visual Studio 中将调试与 C++ .lib 的发布结合起来

我正在尝试将我的 C++ 变成一个 .lib 文件以用于我的项目。

我有文件Log.hLog.cpp.

我走进我的项目属性在Visual Studio和更改的配置类型.exe.lib。我将构建模式设置为Release并将我的类构建到一个名为Log.lib.

在一个新的 C++ 项目中,我试图包含.lib我与Log.h文件一起制作的那个文件。一切都成功了,它识别了我的功能,但是当我尝试使用我的 include 运行我的 exe 程序时Log.h,我收到以下错误:

mismatch detected for '_ITERATOR_DEBUG_LEVEL':
    value '2' doesn't match value '0' in main.obj
Run Code Online (Sandbox Code Playgroud)

通过引用这篇stackoverflow 帖子,我发现在Release模式(与模式相同.lib)中构建和运行我的新项目可以消除错误,并且我可以成功运行我的程序并使用Log.h.

如何编译我的Log.h库以与Debug和兼容Release

c++ static-libraries visual-studio

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

lambda函数中的"捕获"变量被解析为参数

我不知道该怎么称呼这个问题,对不起.


我在C++中有一个函数,它将lambda作为参数.

void LoopPixels(cv::Mat &img, void(*fptr)(uchar &r, uchar &g, uchar &b)) {
    // ...
    fptr(r, g, b); // Call the lambda function
}
Run Code Online (Sandbox Code Playgroud)

然后我试着调用这个LoopPixels函数.

int threshold = 50;
LoopPixels(img, [](uchar &r, uchar &g, uchar &b) {
    r *= (uchar)threshold; // Unable to access threshold :(
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,我无法threshold从lambda函数内部访问变量,如果我尝试"捕获"[&threshold](uchar &r...){},我收到一个错误,告诉我我解析的lambda LoopPixels是错误的类型.

错误信息:

没有合适的转换函数来自"lambda [] void(uchar&r,uchar&g,uchar&b) - > void"to"void(*)(uchar&r,uchar&g,uchar&b)"存在

如何在lambda中访问已被解析为函数参数的变量?

c++ lambda c++11

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

如何在 SQL 查询中使用排序方式实现 GraphQL 游标

我有一个数据库表,reviews其中id 是自动递增的,而 rating 是 0 到 100 之间的整数。idrating

我正在尝试在 GraphQL API 中创建基于游标的分页,但正在努力为hasPreviousPage和创建必要的查询hasNextPage

这是我的数据:

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, RATING: 40
ID: 5, RATING: 60
Run Code Online (Sandbox Code Playgroud)

以下是 GQL 查询的示例:

reviews(first: 3)
Run Code Online (Sandbox Code Playgroud)

哪个返回

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
Run Code Online (Sandbox Code Playgroud)

带页面信息

hasPreviousPage: false
hasNextPage: true
Run Code Online (Sandbox Code Playgroud)

pageInfo 的查询将是

ID: 1, RATING: 50
ID: 2, RATING: 80
ID: 3, RATING: 20
ID: 4, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-cursor graphql

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

方法功能中的Golang无效接收器类型

我正在尝试创建一个简单的包来将SSH命令发送到服务器.

我有以下代码:

type Connection *ssh.Client

func Connect(addr, user, password string) (conn Connection, err error) {
    sshConfig := &ssh.ClientConfig{
        User: user,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
        HostKeyCallback: ssh.HostKeyCallback(func(hostname string, remote net.Addr, key ssh.PublicKey) error { return nil }),
    }

    conn, err = ssh.Dial("tcp", addr, sshConfig)
    return
}

func (conn Connection) SendCommand() ([]byte, error) {
    session, err := (*ssh.Client)(conn).NewSession()
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于两行func (conn Connection) SendCommand() ([]byte, error)session, err := (*ssh.Client)(conn).NewSession().

我无法弄清楚如何使用*ssh.Client我的覆盖Connection类型可用的方法.

我知道我需要进行一些转换,并且使用ssh.Client(*conn).NewSession()可以工作,但它复制的值 …

pointers casting type-conversion go

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