【发布时间】:2018-08-31 10:01:40
【问题描述】:
我正在尝试通过 cgo 使用 C 函数 strfmon。
有效的示例 C 代码是:
#include <stdio.h>
#include <monetary.h>
int main(void)
{
char str[100];
double money = 1234.56;
strfmon(str, 100, "%i", money);
printf("%s\n", string);
}
目前我写的 Go 代码是:
package main
// #cgo CFLAGS: -g -Wall
// #include <stdlib.h>
// #include <monetary.h>
import "C"
import (
"fmt"
)
func main() {
str := [100]C.char{}
var money C.double = 1234.56
C.strfmon(str, 100, "%i", money)
fmt.Printf("%+v\n", str)
}
当我go run main.go 时出现以下错误:
./main.go:14:2: unexpected type: ...
我相信 ... 指的是 strfmon 中的可变参数,但我不确定如何从 Go 中解决这个问题。
【问题讨论】:
-
没有更多的错误信息
-
...指的是 C 函数中的可变参数。看看man strfmon -
为什么不使用 x/text/currency 或其他第三方库?
-
因为我找不到正确格式化某个语言环境的金额的包。例如在法国,欧元符号在金额之后,在德国,它作为金额的前缀