我想得到计算机的IP地址.我使用下面的代码,但它返回127.0.0.1.
我想获取IP地址,例如10.32.10.111,而不是环回地址.
name, err := os.Hostname()
if err != nil {
fmt.Printf("Oops: %v\n", err)
return
}
addrs, err := net.LookupHost(name)
if err != nil {
fmt.Printf("Oops: %v\n", err)
return
}
for _, a := range addrs {
fmt.Println(a)
}
Run Code Online (Sandbox Code Playgroud) 所以我在Go中构建一个网络应用程序,我已经看到它Conn.Read读入了一个有限的字节数组,我创建了它make([]byte, 2048),现在的问题是我不知道内容的确切长度,所以它可能是太多或不够.
我的问题是如何才能读取确切的数据量.我想我必须使用bufio,但我不确定.
我构建了一个HTTP服务器.我使用下面的代码来获取请求URL,但它没有获得完整的URL.
func Handler(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Req: %s %s", r.URL.Host, r.URL.Path)
}
Run Code Online (Sandbox Code Playgroud)
我只有"Req: / "和"Req: /favicon.ico".
我希望将完整的客户端请求URL作为"1.2.3.4/"或"1.2.3.4/favicon.ico".
谢谢.
在下面的代码片段中,如何初始化错误变量?
err := nil // can not compile, show "use of untyped nil"
if xxx {
err = funcA()
} else {
err = funcB()
}
if err != nil {
panic(err)
}
Run Code Online (Sandbox Code Playgroud)
如您所见,err将在if-else块中使用.我想使用一个变量来获得结果,但是我如何err在这里初始化.谢谢!
我有一个项目链接到六个库,其中包括OpenCV.
由于Release变量崩溃,而Debug工作正常(只是慢很多),我想在RelWithDebInfo配置中编译我的项目.
但是,Debug包含OpenCV库的版本而不是Release(OpenCV没有RelWithDebInfo变体).这会导致链接错误,例如:
opencv_core249d.lib(alloc.obj):错误LNK2038:检测到'RuntimeLibrary'不匹配:值'MDd_DynamicDebug'与MyProject.obj中的值'MD_DynamicRelease'不匹配
如何解决这个问题呢?
我code.google.com/p/go.net/websocket在服务器中使用,因此客户端可以从服务器获取通知.
但是,似乎客户端连接到服务器后,如果客户端和服务器之间没有任何数据传输,服务器将返回EOF错误websocket.JSON.Receive(),它看起来像一个超时机制.
而我在谷歌搜索,似乎websocket协议有一个乒乓球心跳维持连接,我想问一下是否code.google.com/p/go.net/websocket支持这个ping协议?
如果我想保持客户端和服务器之间的连接存活,我该怎么办?
我下载了curl7.40源代码,我已经编译了openssl 1.0.2源代码,现在我想用openssl 1.0.2编译curl.
./configure --prefix=/usr/local/curl-7.40.0 --with-ssl
--with-libssl-prefix=/usr/local/openssl-1.0.2
make && make install
Run Code Online (Sandbox Code Playgroud)
我安装后,我发现卷曲库但仍然与系统默认库链接.
ldd libcurl.so
linux-vdso.so.1 => (0x00007fff2db2e000)
libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fafb9b6e000)
librtmp.so.0 => /usr/lib/x86_64-linux-gnu/librtmp.so.0 (0x00007fafb9954000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fafb96f5000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
(0x00007fafb931b000)
...
更新
经过一些搜索,我使用下面的命令来配置.
./configure --prefix=/usr/local/curl-7.40.0 --with-ssl=/usr/local/openssl-1.0.2
但是当make install时,它会显示以下错误信息.
../lib/.libs/libcurl.so: undefined reference to `SSLv2_client_method'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud) 当我ioutil用来读取文件时,它可能会返回错误.但是,如果我想过滤一些错误代码,我该怎么办?
res, err := ioutil.ReadFile("xxx")
if err != nil {
fmt.Println(err.Error())
}
...
Run Code Online (Sandbox Code Playgroud)
在上面的代码段中,当文件没有权限时,fmt.Println(err.Error())将打印"open xxxxx: permission denied.如果我想捕获此类错误,我怎么知道文件读取失败,因为权限被拒绝?
我应该搜索err.Error()字符串permission denied- 这看起来很不合适.有没有更好的方法?
提前致谢.
更新
在尝试了@Intermernet解决方案之后,我发现它不会命中case os.ErrPermission,它会命中default并打印"open xxx: Permission denied".
@Aedolon解决方案没问题,os.IsPermission(err)可以通过权限拒绝判断文件是否失败.
我想用Visual Studio 2008 Express编译源代码,但是我收到了这个错误:
Error C2065: 'nullptr' undeclared identifier.
Run Code Online (Sandbox Code Playgroud)
我的代码:
if (Data == nullptr)
{
show("Data is null");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在google上看到我应该升级到Visual Studio 2010,但由于2008年的知识产权,我不想这样做.可以修理或更换吗?
我通读了一些关于相对路径的主题,但我还是弄错了。我希望某人可以帮助我:)。我使用的是 Visual Studio 2013,Windows 7
我得到以下目录:
这是我的 .exe 文件 D:\uni\c++\ex5\msvc2013\ex5\Debug
这是我要读取的文件 D:\uni\c++\ex5\res\thehead.raw
打开文件的代码:
FILE* f;
f = fopen("..\\..\\..\\res\\thehead.raw", "rb");
if (f == NULL)
printf("FAIL!!");
Run Code Online (Sandbox Code Playgroud)
因为我需要使用相对路径,所以我想通如下:..\ 到达父目录。
所以“..\..\..\”应该让我进入文件夹“D:\uni\c++\ex5\”。
\res 应该打开 res 文件夹。
不用说它失败了,我不知道为什么。任何帮助,将不胜感激。