45 lines
948 B
Go
45 lines
948 B
Go
// Package netutil 提供网络相关的工具函数。
|
||
//
|
||
// 该文件包含主机名处理相关的工具函数。
|
||
//
|
||
// 作者:xfy
|
||
package netutil
|
||
|
||
// StripPort 从 Host 头中移除端口号。
|
||
//
|
||
// 支持 IPv4 和 IPv6 格式:
|
||
// - example.com:8080 -> example.com
|
||
// - [::1]:8080 -> [::1]
|
||
// - [2001:db8::1]:443 -> [2001:db8::1]
|
||
// - example.com -> example.com
|
||
//
|
||
// 参数:
|
||
// - host: 主机名(可能包含端口)
|
||
//
|
||
// 返回值:
|
||
// - string: 移除端口后的主机名
|
||
func StripPort(host string) string {
|
||
if len(host) == 0 {
|
||
return host
|
||
}
|
||
|
||
// IPv6 格式:以 '[' 开头,找 ']:' 作为分隔点
|
||
if host[0] == '[' {
|
||
for i := 0; i < len(host)-1; i++ {
|
||
if host[i] == ']' && host[i+1] == ':' {
|
||
return host[:i+1]
|
||
}
|
||
}
|
||
return host
|
||
}
|
||
|
||
// IPv4 或域名格式:找第一个 ':' 作为分隔点
|
||
for i := 0; i < len(host); i++ {
|
||
if host[i] == ':' {
|
||
return host[:i]
|
||
}
|
||
}
|
||
|
||
return host
|
||
}
|