之前使用过GO语言写了一个实时图片下载程序,主要考虑到GO语言的DNS解析对协程支持友好, 即
DNS解析时不会阻塞执行线程,只会阻塞当前协程,顺便研究了一下GO的net.LookupHost/ResolveIPAddr
实现方式。下面一段描述翻译自go语言的官方文档 https://golang.org/pkg/net/域名解析:
域名解析函数,Dial函数会间接调用到,而LokupHost和LookupAddr则会直接调用域名解析函数,不同
的操作系统实现不同, 在Unix系统中有两种方法进行域名解析:
1) 纯GO语言实现的域名解析,从/etc/resolv.conf中取出本地dns server地址列表, 发送DNS请求(UDP
报文)并获得结果
2) 使用cgo方式, 最终会调用到c标准库的getaddrinfo或getnameinfo函数(不建议使用对GO协程不
友好)
关于 cgo dns 解析的坑 参照以下链接:
https://jira.mongodb.org/browse/MGO-41
https://github.com/golang/go/is
go (golang) DNS域名解析实现
最新推荐文章于 2024-08-08 07:59:56 发布
本文探讨了Go(Golang)语言中的DNS域名解析,强调其对协程的友好支持,不会阻塞执行线程。文章介绍了net.LookupHost和ResolveIPAddr的实现,并讨论了Go的纯Go解析与cgo解析的区别,包括它们在不同操作系统中的行为。此外,还提到了如何通过环境变量GODEBUG控制解析方式,并提供了一个简单的示例来实践DNS解析。
摘要由CSDN通过智能技术生成