Golang net软件包
主机名是分配给机器网络中的一台机器的标签。Golang标准包net
提供了与TCP/IP、UDP和DNS相关的网络相关功能。
下面是与Go语言中的主机名和IP地址有关的各种例子。
如何获得系统环境的主机名?
了解Go程序运行环境的hostname
,总是很好的。标准包内置的os
,提供了hostname
,该功能提供了环境的hostname
。你可以在这里查看更多信息
以下是函数hostname的语法
func Hostname() (name string, error error)
它返回
- name - hostname,如果不存在错误,则返回nil。例如,如果你在一个名为 "system1 "的系统上运行,
os.Hostname()
,函数的输出结果为 "system1"。
下面是一个查找系统主机名的例子
package main
import (
"fmt"
"os"
)
func main() {
hostname, error := os.Hostname()
if error != nil {
panic(error)
}
fmt.Println("hostname returned from Environment : ", hostname)
fmt.Println("error : ", error)
}
输出是
hostname returned from Environment : DESKTOP-47884kl
error :
如何检查一个字符串是否包含IP地址或主机名或域名?
这个程序是为了检查一个给定的字符串是IP address
还是hostname
。
net包提供了ParseIP()函数用于检查格式为IPV4
(192.134.1.12)和IPV6
(1111:ca7::57)的IP地址。
下面是ParseIP()
函数的语法
func ParseIP(s string) IP
如果给定的字符串不是有效的IP地址表示,它返回nil。
下面是一个检查给定字符串的主机名或IP地址的程序
package main
import (
"fmt"
"net"
)
func checkStringForIpOrHostname(host string) {
addr := net.ParseIP(host)
if addr == nil {
fmt.Println("Given String is a Domain Name")
} else {
fmt.Println("Given String is a Ip Address")
}
}
func main() {
checkStringForIpOrHostname("google.com")
checkStringForIpOrHostname("192.168.1.0")
}
输出:
Given String is a Domain Name
Given String is a Ip Address
如何从一个给定的URL中获得域名?
通常,我们需要从给定的URL中检查域名。
例如,如果URL是mydomain.com/category/mypage.html,域名应该返回mydomain.com。
包URL
提供了一个函数parse()
检查URL并返回URL实例。Hostname
与URL
实例返回主机名。
这里是parse函数的语法
func Parse(rawurl string) (*URL, error)
它接收rawurl作为输入字符串,返回URL实例和错误对象。
package main
import (
"fmt"
"net/url"
)
func main() {
urlInstance, error := url.Parse("https://mydomain.com/category/mypage.html")
if error != nil {
fmt.Println(error)
}
fmt.Println(urlInstance.Hostname())
}
输出是
mydomain.com
如何获得本地机器的完全合格的域名--FQDN?
没有直接的库来获取一个机器的FQDN
。有一个基于操作系统和网络包的自定义包装库github.com/Showmax/go-…。首先使用下面的命令安装这个库
go get github.com/Showmax/go-fqdn
如果fqdn存在,下面的程序将返回完全合格的域名,否则返回未知。
package main
import (
"fmt"
fqdn "github.com/Showmax/go-fqdn"
)
func main() {
fmt.Println(fqdn.Get())
}
输出是
DESKTOP-968A6TP
如何获得一个系统的本地IP地址?
net
软件包提供了Dial
功能,可以连接到指定网络的目标地址。UDP是一个不需要像TCP那样的物理连接的协议,目标不会连接它。
package main
import (
"fmt"
"net"
)
func main() {
conn, error := net.Dial("udp", "8.8.8.8:80")
if error != nil {
fmt.Println(error)
}
defer conn.Close()
ipAddress := conn.LocalAddr().(*net.UDPAddr)
fmt.Println(ipAddress)
}
输出是
192.168.1.102:49703
总结
在本教程中,你学到了如何在Go语言中获得域名、限定域名和系统的IP地址。