登录
首页 >  Golang >  Go问答

无法通过 pragma pack 在结构体中找到某些字段的 64 位整数

来源:stackoverflow

时间:2024-03-05 22:51:28 464浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《无法通过 pragma pack 在结构体中找到某些字段的 64 位整数》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

package main

/*
#include  
#pragma pack(1)
typedef struct _sss {
uint64_t some; // ok
uint32_t wow; // ok
uint64_t some2; // not found
uint64_t some3; // not found
uint64_t some4; // not found
uint32_t some5; // ok
} type;
#pragma pack()
*/
import "c"
import (
    "fmt"
)

func main() {
    s := c.type{}
    s.some = 10; 
    s.wow = 10; 
    s.some2 = 10; 
    s.some5 = 10;
    fmt.println("hello, playground")
}

我声明了名为 c.type 的结构。

如果 pragma pack(1) 和 64 位成员一起使用。

╭─dire@dire-81w4 ~/workspace
╰─go run test.go                                                                                                                    2 ↵
# command-line-arguments
./test.go:25:6: s.some2 undefined (type _Ctype_struct__sss has no field or method some2)

通过删除 pragma pack(1) 可以进行编译。

正在使用go 1.15版本。你知道为什么吗?


解决方案


我找到了有关我的问题的答案。

如果 C 结构体的字段对齐后无法用 Go 结构体表示,则无法直接从 cgo 访问它们。您必须用 C 语言编写函数来读取和写入这些字段。

我现在太忙了,没有时间发表评论。虽然晚了,但已经得到答复了。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>