什么是int和C.int之间的区别?

时间:2016-04-07 16:46:52

标签: go cgo

import "C"

func f() {
  var vGo int
  var vC  C.int
  // fails to compile with error
  // cannot use &vGo (type *int) as type *C.int in argument to...
  C.c_function(&vGo)  
  // compiles just fine:
  C.c_function(&vC)
}

我使用CGO_ENABLED = 1 GOARCH = arm ...

进行编译

在这种情况下,int和C.int类型的不同之处是什么? 我在哪里可以找到关于GO中C类型的其他信息?

2 个答案:

答案 0 :(得分:2)

两种类型有什么区别?这取决于。如果您使用的是64位,则Go int将为64位,而C int将为32.如果您使用的是32位,则没有真正的区别。

我在哪里可以找到有关C类型的其他信息?查看C的文档。如评论中所述,Go中不允许隐式数字类型转换,因此需要进行转换。

答案 1 :(得分:1)

故意不支持隐式类型转换,但有一些例外1

  

在任何这些情况下,值x都可分配给T类型的变量(" x可分配给T"):

     
      
  • x的类型与T相同。
  •   
  • x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是命名类型。
  •   
  • T是接口类型,x实现T。
  •   
  • x是双向通道值,T是通道类型,x类型V和T具有相同的元素类型,并且V或T中的至少一个不是命名类型。
  •   
  • x是预先声明的标识符nil,T是指针,函数,切片,地图,通道或接口类型。
  •   
  • x是一个无类型常量,可由类型T的值表示。
  •   

需要进行转换以匹配可能不同的内存布局2