广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang如何实现指针转换
  • 598
分享到

golang如何实现指针转换

2023-07-04 22:07:21 598人浏览 独家记忆
摘要

本篇内容介绍了“golang如何实现指针转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Golang中,可以利用unsafe包来实现指针

本篇内容介绍了“golang如何实现指针转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Golang中,可以利用unsafe包来实现指针转换,实现内存地址在不同指针类型间的转换,进而更灵活地操作内存。例如unsafe包下的Pointer()函数可以将任意变量的地址转换成Pointer类型,也可以将Pointer类型转换成任意的指针类型,Pointer类型是不同指针类型之间互转的中间类型。

在golang中,可以利用unsafe包来实现指针转换。

golang的指针转换

Golang 提供了 unsafe 包,让我们能够直接操作指定内存地址的内存。

unsafe包下,有定义type Pointer *ArbitraryType(任意类型指针),可绕过GO的类型限制,type ArbitraryType int

  • 任何类型的指针值都可以转换为Pointer。

  • Pointer可以转换为任何类型的指针值。

  • uintptr可以转换为Pointer。

  • Pointer可以转换为uintptr。

通过 unsafe.Pointer() 函数,我们能够获取变量的内存地址表示,本质上这是个整数。可以将任意变量的地址转换成 Pointer 类型,也可以将 Pointer 类型转换成任意的指针类型,它是不同指针类型之间互转的中间类型。

golang如何实现指针转换

但 Pointer 不支持运算,如果要在内存地址上进行加减运算,需要将其转为 uintptr 类型。

下面我们尝试读取切片地址,并通过内存操作遍历其内容:

package mainimport "fmt"import "unsafe"func main() {// head = {address, 10, 10}// body = [1,2,3,4,5,6,7,8,9,10]var s = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}var address = (**[10]int)(unsafe.Pointer(&s))var len = (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(8)))var cap = (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(16)))fmt.Println(address, *len, *cap)var body = **addressfor i := 0; i < 10; i++ {fmt.Printf("%d ", body[i])}}----------0xc000004460 10 101 2 3 4 5 6 7 8 9 10

golang如何实现指针转换

上述代码中:

  • unsafe.Pointer(&s) 获取切片 s 底层表示的第一个位置的内存地址,也即底层数组的地址存放地址,

    通过 (**[10]int)(unsafe.Pointer(&s)) 将其转为 **[10]int 类型指针,又通过 **addrss 还原为数组;

  • unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(8)) 通过地址运算,获得 length 的存放地址,

    进而通过 (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + uintptr(8))) 将 length 内存转为 int 指针

    最后通过 *len 获取切片长度;

    对于 cap 的操作与 len 类似,不再赘述;

总之:

通过 unsafe,我们能够实现内存地址在不同指针类型间的转换,进而更灵活地操作内存;

本实验也进一步验证了切片的底层存储结构;

unsafe 在不是必须的条件下应该少使用,直接操作内存毕竟是风险较大的。

“golang如何实现指针转换”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: golang如何实现指针转换

本文链接: https://www.lsjlt.com/news/347880.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang如何实现指针转换
    本篇内容介绍了“golang如何实现指针转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在golang中,可以利用unsafe包来实现指针...
    99+
    2023-07-04
  • golang如何转换指针类型
    这篇文章主要讲解了“golang如何转换指针类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“golang如何转换指针类型”吧!在golang中,指针是一个非常强大的特性。指针可以使程序能够...
    99+
    2023-07-05
  • golang怎么转换指针类型
    在golang中,指针是一个非常强大的特性。指针可以使程序能够更加高效地使用内存,尤其是在处理大量数据时。但在使用指针时,我们需要注意指针的类型,并确保我们正确地执行指针类型转换。指针类型转换是指将一个指针类型转换为另一个指针类型。在gol...
    99+
    2023-05-14
    Golang go语言 指针
  • golang指针转换的方法是什么
    这篇文章主要介绍了golang指针转换的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang指针转换的方法是什么文章都会有所收获,下面我们一起来看看吧。一、指针的基本使用在Golang中,指针是...
    99+
    2023-07-05
  • C++ 如何将Lambda转换成函数指针
    目录参考下面的代码下面是类型转换运算符实现的一行关键汇编代码没有捕获任何变量的Lambda表达式可以转换成与它的调用原型一致的函数指针。 参考下面的代码 void example1(...
    99+
    2022-11-13
    C++ Lambda C++函数指针 Lambda转成函数指针
  • c++将vector迭代器转换为指针的实现方式
    目录将vector迭代器转换为指针vector与迭代器的使用1. 标准库vector2. 迭代器将vector迭代器转换为指针 定义一个Domain结构体以及容器、迭代器 struc...
    99+
    2022-11-16
    c++ vector迭代器 c++ 迭代器 指针 vector迭代器转为指针
  • 在Android中将view 转换为Bitmap出现空指针如何解决
    这篇文章主要介绍了在Android中将view 转换为Bitmap出现空指针如何解决,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:Android是什么Android是一种基于Linux内...
    99+
    2023-05-30
    android view bitmap
  • Golang指针和接口如何使用
    这篇文章主要介绍“Golang指针和接口如何使用”,在日常操作中,相信很多人在Golang指针和接口如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang指针和接口如何使用”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • Win10鼠标指针如何更换
    今天小编给大家分享一下Win10鼠标指针如何更换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在键盘上按下【win】,调出开...
    99+
    2023-06-27
  • Golang中最好的数据转换实践指南
    Golang中数据转换的最佳实践指南引言:在Golang中,数据转换是一个常见的需求。无论是从用户输入转换为特定类型,还是从一个数据结构转换为另一个,都需要使用适当的方法进行数据转换。本文将介绍一些在Golang中进行数据转换的最佳实践,并...
    99+
    2023-12-23
    Golang 最佳实践 数据转换
  • golang怎么实现接口转换
    随着越来越多的企业采用 Golang 进行开发,Golang 语言的高效、简洁、安全等优点也逐渐被人们所认可。其中,Golang 提供了接口(interface)作为与外部的桥梁,使得代码更加灵活且易于扩展。在实际开发中,我们有时需要将接口...
    99+
    2023-05-14
  • 聊聊如何使用 Golang 实现繁体转换
    近年来,Golang 成为了越来越多开发者的首选编程语言。它简单易用、高效稳定、并且支持跨平台开发。在国际化应用开发中,繁体转换是一个常见需求。本文将介绍如何使用 Golang 实现繁体转换。一、繁体转换介绍繁体中文是汉字表现形式的一种,主...
    99+
    2023-05-14
  • C语言指针如何实现字符串逆序反转
    目录指针实现字符串逆序反转知识点字符串逆序的几种写法非递归写法递归写法指针实现字符串逆序反转 #include<stdio.h> #include<string.h...
    99+
    2022-11-13
  • win11鼠标指针如何换图案
    这篇文章主要介绍“win11鼠标指针如何换图案”,在日常操作中,相信很多人在win11鼠标指针如何换图案问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win11鼠标指针如何换图案”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-02
  • golang如何转换中文
    Golang是一种高效的编程语言,可以用于各种领域的开发,包括中文转换。中文转换在很多应用场景中都是必不可少的,比如搜索引擎、机器学习等,本篇文章将介绍Golang中的中文转换方法。字符串转换在Golang中,字符串本身是以UTF-8编码的...
    99+
    2023-05-14
  • golang interface类型转换怎么实现
    在Go语言中,可以通过类型断言来实现接口类型的转换。 使用类型断言的语法为: value, ok := interfaceVar.(...
    99+
    2023-10-20
    golang
  • win8系统鼠标指针如何更换
    这篇文章主要为大家展示了“win8系统鼠标指针如何更换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win8系统鼠标指针如何更换”这篇文章吧。具体方法:打开控制面板,点击进入“外观和个性化”,找...
    99+
    2023-06-27
  • xp系统鼠标指针如何更换
    本篇内容主要讲解“xp系统鼠标指针如何更换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“xp系统鼠标指针如何更换”吧!一、点击【开始】菜单,选择【控制面板】;二、在控制面板里面,点击【打印机和其...
    99+
    2023-06-28
  • Golang如何进行struct转换
    Golang语言是一门面向对象的编程语言,它具有很强的可读性和可维护性。对于大部分开发者而言,使用Golang进行开发是比较方便和快捷的。在Golang中,struct是很常见的一种数据类型,它可以表示一个对象的属性集。在实际的开发中,经常...
    99+
    2023-05-14
    struct 结构体 go语言 Golang
  • delphi字符串如何转化为指针
    在Delphi中,可以使用PChar类型来表示字符串的指针。要将一个字符串转换为指针,可以使用StrPCopy函数或者使用字符串变量...
    99+
    2023-09-16
    delphi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作