小编ren*_*yun的帖子

如何在go中将指向切片的指针传递给C函数

背景:使用 cgo 从 Golang 调用 C 函数。

我想用它有这个签名C函数:int f(int *count, char ***strs)。它将修改countand的数据strs,这就是它使用指向它们的指针的原因。的值count是 的长度strsstrs是一个字符串数组;返回值只是一个(布尔值)指示符,用于说明是否存在错误。

在golang中,我可以count通过使用成功通过和修改C.f((*C.int)(&count));通过[]string使用[]*C.char. 示例代码是这样的:

/*
#include <stdio.h>
int f(int *c, char **str) {
    int i;
    printf("%d\n", *c);
    for (i = 0; i < *c; i++) {
        printf("%s\n", str[i]);
    }
    *c = (*c) + 1;
    return 1;
}
*/
import "C"
func go_f(strs []string) int {
    count := len(strs)
    c_count …
Run Code Online (Sandbox Code Playgroud)

c go cgo

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

为什么不读取:: read_to_string()返回字符串?

Read特征中,许多函数/方法采用buf: &mut XXXas(其中一个)参数并返回Result<usize>.例如,read_to_string()将其buf: &mut String作为参数之一并返回Result<usize>.

由于我来自许多语言,所谓的现代语言通常会返回read_string()函数调用的字符串.ReadRust类型中的特性设计让我震惊,因为它不返回字符串,而是将其作为参数传递(类似于C或其他更原始的语言).

我知道返回值(Result)用于指示读取是否成功,并且可以将其传递给match表达式.(我以前学过Lisp和Go,所以我不会质疑这种设计.)

为什么核心开发人员没有将这个特性设计为"将字符串与错误消息一起返回"?

例如,为什么不这样设计:

fn read(&mut self) -> Result<String> { ... }
Run Code Online (Sandbox Code Playgroud)

String还包含了长度,这样用户可以通过调用访问长度.len()在需要的时候.用户可以将其连接到String他希望的任何其他人,但关键点是在调用此函数之前不需要创建/拥有一个.

是否有任何特殊的理由来设计这种特性,就像现在这样?

ps我还在学习Rust(通过遵循Rust编程语言),并在阅读了大部分第一版后阅读第二版.如果上面的代码包含任何错误(特别是在处理生命周期时),请纠正我.

standard-library traits rust

4
推荐指数
2
解决办法
545
查看次数

!a在SPARQL中是什么意思?

我正在使用SPARQL来构建查询,并想排除某些结果。

我知道FILTER NOT EXISTS可以用来完成任务。例如:

SELECT * {
    ?sub a ?type .
    FILTER NOT EXISTS {?sub a :NotExpectedType.}
}
Run Code Online (Sandbox Code Playgroud)

但是在探索过程中,我偶然发现自己可以写作!a。这是有效的SPARQL查询,但结果与有所不同FILTER NOT EXISTS。例如:

SELECT * {
    ?sub a ?type .
    ?sub !a :NotExpectedType .
}
Run Code Online (Sandbox Code Playgroud)

那是什么!a意思呢?(我知道这a是的快捷方式rdf:type,但这还不能帮助我理解。)

sparql

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

标签 统计

c ×1

cgo ×1

go ×1

rust ×1

sparql ×1

standard-library ×1

traits ×1