当前位置: 首页 > news >正文

Java与Go:字符串转IP

在本文中,我们将了解如何将简单的对比Java和Go是如何将字符串解析为IP地址。

Java

在Java中,将字符串转换为IP地址最无脑的一个方法:

import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) {String ipString = "192.168.1.1";try {InetAddress ipAddress = InetAddress.getByName(ipString);System.out.println("IP地址:" + ipAddress.getHostAddress());} catch (UnknownHostException e) {e.printStackTrace();}}
}

IPv6一个道理

import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) {String ipString = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";try {InetAddress ipAddress = InetAddress.getByName(ipString);System.out.println("IP地址:" + ipAddress.getHostAddress());} catch (UnknownHostException e) {e.printStackTrace();}}
}

Go

接下来让我们看一下Go语言的net.Addr类型

type Addr interface {Network() string // name of the network (for example, "tcp", "udp")String()  // string form of address (for example, "192.0.2.1:25", "[2001:db8::1]:80") }

net.Addr 只是一个接口,因此任何满足此接口的类型都是有效的 IP地址

  • net.TCPAddr
  • net.UDPAddr
  • net.IPAddr

上述类型都实现了 net.Addr 接口,因为它们具有Network和String方法。如果您注意到的话,所有这些类型都有一个将字符串解析为其具体类型的函数。对于net.UDPAddr,我们有net.ResolveUDPAddr,对于net.TCPAddr,我们有net.ResolveTCPAddr,对于net.IPAddr,我们有net.ResolveIPAddr

解析成net.TCPAddr

通过使用net.TCPAddr标准库中的函数,net.ResolveTCPAddr如下所示

func ResolveTCPAddr(network, address string) *TCPAddr, error

来看看例子

package mainimport ("fmt""net"
)func main() {addr, err := net.ResolveTCPAddr("tcp", "1.1.1.1:1234")if err != nil {panic(err)}fmt.Println("Addr", addr.String())
}

解析成net.UDPAddr

和TCP一个道理,这里使用net.UDPAddr标准库中的函数,net.ResolveUDPAddr如下所示

func ResolveUDPAddr(network, address string) *UDPAddr, error

代码如下

package mainimport ("fmt""net"
)func main() {addr, err := net.ResolveUDPAddr("tcp", "1.1.1.1:53")if err != nil {panic(err)}fmt.Println("Addr", addr.String())
}

解析成net.IPAddr

通过使用net.IPAddr标准库中的函数net.ResolveIPAddr如下所示

func ResolveIPAddr(network, address string) *IPAddr, error
package mainimport ("fmt""net"
)func main() {addr, err := net.ResolveIPAddr("ip", "1.1.1.1")if err != nil {panic(err)}fmt.Println("Addr", addr.String())
}

总结

总体而言,两种语言的实现都比较简单直观,主要区别在于错误处理方式和具体的 API 使用。

在这里插入图片描述

相关文章:

  • 2.6 IDE(集成开发环境)是什么
  • 最新ChatGPT/GPT4科研应用与AI绘图及论文高效写作教程
  • 【设计模式】中介者模式的应用
  • IDEA或Pycharm设置Python环境报Cannot set up a python SDK的某种解决方案——更换IDEA或Pycharm的版本
  • 高效物联网连接技术创新:ECWAN边缘协同自组网的未来——基于ChirpLAN窄带扩频技术的无线混合组网
  • 用于 Linux 运维的专门发行版,以及工具
  • 创新指南|如何将人工智能应用于未来的创新管理——并不断付诸实践
  • C#手术麻醉信息系统全套商业源码,自主版权,支持二次开发 医院手麻系统源码
  • 微服务—Eureka注册中心
  • 快速上手Spring Cloud 六:容器化与微服务化
  • 为什么我的微信小程序 窗口背景色backgroundColor设置参数 无效的问题处理记录!
  • OpenCV 形态学处理函数
  • 视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决
  • Arbitrum 为什么能领跑以太坊 Layer 2?
  • .htaccess配置重写url引擎
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [Vue CLI 3] 配置解析之 css.extract
  • 【前端学习】-粗谈选择器
  • 4. 路由到控制器 - Laravel从零开始教程
  • 5、React组件事件详解
  • Angular 响应式表单 基础例子
  • Docker入门(二) - Dockerfile
  • DOM的那些事
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SQLServer之创建数据库快照
  • vue脚手架vue-cli
  • ------- 计算机网络基础
  • 面试遇到的一些题
  • 使用parted解决大于2T的磁盘分区
  • 首页查询功能的一次实现过程
  • 通过npm或yarn自动生成vue组件
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 正则学习笔记
  • 最近的计划
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​马来语翻译中文去哪比较好?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #{} 和 ${}区别
  • #微信小程序:微信小程序常见的配置传旨
  • $ git push -u origin master 推送到远程库出错
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $(function(){})与(function($){....})(jQuery)的区别
  • (3)STL算法之搜索
  • (4.10~4.16)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (ZT)一个美国文科博士的YardLife
  • (zt)最盛行的警世狂言(爆笑)
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (三)docker:Dockerfile构建容器运行jar包