Articles of 走

golang:跨平台path.Dir

我想在Unix和Windows上使用path.Dir()和平台特定的目录。 请看代码: package main import ( "fmt" "path" ) func main() { fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c")) fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`)) } 这输出 path.Dir("a/b/c"): a/b path.Dir("c:\foo\bar.exe"): . 我想第二次调用path.Dir() (窗口)的东西 c:\foo 是否有可能告诉path.dir()使用Windows分隔符为我的程序在Windows上运行? 或者我应该总是将反斜杠\转正斜杠( / )? 这里的首选策略是什么?

Golang:调用Windows DLL函数

我正在写一个Go应用程序,调用到一个Windows DLL。 该DLL是用MSVC编写的,并使用__declspec(dllexport)具有外部“C”导出。 我的Go应用程序的顶部如下: //#cgo CFLAGS: -IC:/Repos/Module/include //#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll //#include <MyModule.h> import "C" 我从模块调用函数如下所示: nRet := C.moduleImpl_len() 问题是,当我尝试运行这个应用程序,我得到以下错误: C:\Users\MINDO~1\AppData\Local\Temp\go-build836751819\mod\modimpl\_obj\modimpl.cgo2.o: In function `_cgo_e2aaf076ab69_Cfunc_moduleImpl_len': C:/Repos/Module/go/src/mod/modimpl/modimpl.go:90: undefined reference to `moduleImpl_len' 我用DUMPBIN查看了DLL导出的符号,并且显示了正确的“moduleImpl_len”作为导出的符号。 这也是MyModule.h中定义的符号。 任何build议,我怎样才能得到符号链接,而不必去系统调用路线?

WSARecv不停止阅读

所以基本上,我使用WSARecv与我的客户端的这个function: type Conn struct { sd s.Handle sa s.SockaddrInet4 } func (c *Conn) Read(b []byte) (int, error) { dataBuf := s.WSABuf{Len: uint32(len(b)), Buf: &b[0]} flags := uint32(0) qty := uint32(0) err := s.WSARecv(c.sd, &dataBuf, 1, &qty, &flags, nil, nil) return int(qty), err } 同时服务器发送多个数据包(首先是8个字节,然后都是1000个字节)。 会发生什么情况是WSARecv在缓冲区b已满时不会停止读取。 所以当我记忆太多的时候,我得到了一个很难的答案: exception0xc0000005 0x8 0xc08203195f 0xc08203195f PC = 0xc08203195f syscall.Syscall9(0x7ff86cafe230,0x7,0x1f8,0xc08200b5d0,0x1,0xc08200b5f0,0xc08200b5e0,0x0,0x0,0x0,…)(十几行这样的行) 而我的程序崩溃当然。 […]