小编Jer*_*ain的帖子

如何在Go中获取本地IP地址?

我想得到计算机的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

52
推荐指数
5
解决办法
7万
查看次数

使用Golang net.Conn.Read读取整个数据

所以我在Go中构建一个网络应用程序,我已经看到它Conn.Read读入了一个有限的字节数组,我创建了它make([]byte, 2048),现在的问题是我不知道内容的确切长度,所以它可能是太多或不够.
我的问题是如何才能读取确切的数据量.我想我必须使用bufio,但我不确定.

go

20
推荐指数
3
解决办法
5万
查看次数

如何在http.Request中获取URL

我构建了一个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".

谢谢.

go

19
推荐指数
3
解决办法
4万
查看次数

如何在if-else中初始化错误类型

在下面的代码片段中,如何初始化错误变量?

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在这里初始化.谢谢!

go

14
推荐指数
2
解决办法
6655
查看次数

CMake RelWithDebInfo链接到Debug libs

我有一个项目链接到六个库,其中包括OpenCV.
由于Release变量崩溃,而Debug工作正常(只是慢很多),我想在RelWithDebInfo配置中编译我的项目.
但是,Debug包含OpenCV库的版本而不是Release(OpenCV没有RelWithDebInfo变体).这会导致链接错误,例如:

opencv_core249d.lib(alloc.obj):错误LNK2038:检测到'RuntimeLibrary'不匹配:值'MDd_DynamicDebug'与MyProject.obj中的值'MD_DynamicRelease'不匹配

如何解决这个问题呢?

c++ linker opencv cmake

10
推荐指数
1
解决办法
3399
查看次数

如何在GO的websocket中保持连接存活

code.google.com/p/go.net/websocket在服务器中使用,因此客户端可以从服务器获取通知.

但是,似乎客户端连接到服务器后,如果客户端和服务器之间没有任何数据传输,服务器将返回EOF错误websocket.JSON.Receive(),它看起来像一个超时机制.

而我在谷歌搜索,似乎websocket协议有一个乒乓球心跳维持连接,我想问一下是否code.google.com/p/go.net/websocket支持这个ping协议?
如果我想保持客户端和服务器之间的连接存活,我该怎么办?

go websocket

7
推荐指数
2
解决办法
8872
查看次数

如何使用最新的openssl编译curl

我下载了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)

c linux curl openssl

7
推荐指数
1
解决办法
5047
查看次数

如何检查ioutil.ReadFile返回的特定错误类型?

当我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)可以通过权限拒绝判断文件是否失败.

go

6
推荐指数
1
解决办法
2108
查看次数

编译错误'nullptr'未声明的标识符

我想用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年的知识产权,我不想这样做.可以修理或更换吗?

c++ visual-studio-2008 nullptr

6
推荐指数
2
解决办法
2万
查看次数

C++ fopen 相对路径

我通读了一些关于相对路径的主题,但我还是弄错了。我希望某人可以帮助我:)。我使用的是 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 文件夹。

不用说它失败了,我不知道为什么。任何帮助,将不胜感激。

c++ windows

6
推荐指数
1
解决办法
3万
查看次数

标签 统计

go ×6

c++ ×3

c ×1

cmake ×1

curl ×1

linker ×1

linux ×1

nullptr ×1

opencv ×1

openssl ×1

visual-studio-2008 ×1

websocket ×1

windows ×1