相关疑难解决方法(0)

如何使用fmt在Go中打印出常量uint64?

我试过了:

fmt.Printf("%d",math.MaxUint64)

但是我收到以下错误消息:

常数18446744073709551615溢出int

我怎样才能解决这个问题?谢谢!

printing go int64

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

调用Windows API函数(stdcall)的符号扩展规则是什么?这需要从Go调用WInAPI,这对int类型是严格的

哎呀,当我做出这个答案时,有一件事我忘记了,而且我对自己并不是很确定,而且我似乎无法在MSDN和谷歌以及Stack Overflow搜索中找到相关信息.

Windows API中有许多地方使用负数,或者数字太大而无法使用有符号整数; 例如CW_USEDEFAULT,INVALID_HANDLE_VALUE,GWLP_USERDATA,等等.在C的世界里,一切都很好,花花公子:语言的整数提升规则得到了拯救.

但在Go中,我必须将所有参数传递给函数uintptr(相当于C的uintptr_t).函数的返回值也以这种方式返回,然后我需要进行比较.Go不允许整数提升,并且它不允许您在编译时将有符号常量表达式转换为无符号表达式.

现在,我在我的UI库中设置了一些用于处理这些常量的jerry-rig.(这是这个解决方案在行动中的样子.)但是,我对这个解决方案并不满意; 我觉得它喜欢ABI的事情,我想要完全确定我在做什么.

所以我的问题是:将签名值传递给Windows API函数时如何处理?返回时如何处理?

我的所有常量都是自动生成的(示例输出).自动生成器使用C ffi,我宁愿不用于主项目,因为我可以直接调用DLL(这也使得交叉编译至少在今年剩余时间内更容易).如果我可以以某种方式利用它,例如通过将所有内容都变成表单的C端变量

uintptr_t x_CONST_NAME = (uintptr_t) (CONST_NAME);
Run Code Online (Sandbox Code Playgroud)

这会有所帮助.但如果没有这个答案我就不能这样做.

谢谢!

更新

IRC上的某个人将其改为不同(重新格式化以避免水平滚动):

[19:13] <FraGag> basically, you're asking whether an int with a value of -1
                 will be returned as 0x00000000FFFFFFFF or as 0xFFFFFFFFFFFFFFFF
                 if an int is 4 bytes and an uintptr is 8 bytes
Run Code Online (Sandbox Code Playgroud)

基本上这个,但专门用于Windows API互操作,传入的参数,无论uintptr大小.

c winapi interop go stdcall

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

如何使用 unsafe 从没有内存复制的字符串中获取字节切片

我已经阅读了关于“ https://github.com/golang/go/issues/25484 ”关于从[]byteto 的无复制转换string

我想知道是否有办法将字符串转换为没有内存复制的字节片?

我正在编写一个处理 terra 字节数据的程序,如果每个字符串在内存中复制两次,则会减慢进度。而且我不关心可变/不安全,只关心内部使用,我只需要尽可能快的速度。

例子:

var s string
// some processing on s, for some reasons, I must use string here
// ...
// then output to a writer
gzipWriter.Write([]byte(s))  // !!! Here I want to avoid the memory copy, no WriteString
Run Code Online (Sandbox Code Playgroud)

所以问题是:有没有办法防止内存复制?我知道也许我需要 unsafe 包,但我不知道如何。我已经搜索了一段时间,直到现在还没有答案,SO 也没有显示相关的答案有效。

string performance go slice

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

如何将最小值/最大值设置为整数变量

就像在 Java 中一样,我们将变量初始化为最小值/最大值,

Integer.MIN_VALUE and Integer.MAX_VALUE
Run Code Online (Sandbox Code Playgroud)

Go有什么办法吗?

go

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

标签 统计

go ×4

c ×1

int64 ×1

interop ×1

performance ×1

printing ×1

slice ×1

stdcall ×1

string ×1

winapi ×1