當我嘗試從包main
傳遞C.int給函數在一個輔助包叫做common
,我得到以下錯誤:如何在go包之間傳遞C對象?
main.go:24: cannot use argc (type C.int) as type common.C.int in argument to common.GoStrings
從common.go
:
/*
...
*/
import "C"
...
func GoStrings(argc C.int, argv **C.char) (args []string) {
// do stuff
}
從main.go
:
/*
#cgo LDFLAGS: -lpam -fPIC
#define PAM_SM_AUTH
#include <security/pam_appl.h>
*/
import "C"
...
func pam_sm_authenticate(pamh *C.pam_handle_t, flags, argc C.int, argv **C.char) C.int {
args := common.GoStrings(argc, argv)
...
}
有什麼辦法來回傳遞這些對象嗎?我已經嘗試過將類型轉換爲例如common.C.int
,但這似乎不是有效的語法。我希望能夠從多個不同的主程序中調用GoStrings
,看起來這應該是可以允許的。
對於這種情況,我通常會傳遞'unsafe.Pointer'。這有效,但你最好確保做到理智和錯誤檢查! –