当前位置: 首页 > 网络应用技术

Golang不安全包装使用模式的详细说明

时间:2023-03-09 12:58:03 网络应用技术

  指针代表指向任何类型的指针。可以在指针类型上执行四个特殊操作,但不能用于其他类型:

  因此,指针允许程序跨越类型系统并读取并写入任何内存。使用时要小心。

  指针中涉及的以下模型有效

  不使用这些模式的代码今天可能无效,或者将来它将变得无效。即使以下有效的模型有重要警告。

  T2不大于T1,两个共享相同的内存布局。这种转换允许一种类型的数据重新解释为另一种类型的数据。例如,实施:

  将生成将生成的值的内存地址(整数)。这种常用的用法是打印它。

  将UINTPTR转换回指针通常是无效的。

  它是一个整数,而不是引用。它将转换为无需指针语义的整数值。即使UINTPTR保留了某个对象的地址,垃圾回收器也不会在对象移动和该对象移动时更新UINTPTR的值。UINTPTR不会被回收。

  该模型的其余部分列举了从发出的独特有效转换。

  如果p指向分配的对象,则可以将其转换为被转换以添加偏移并将其转换回的对象。

  该模型最常见的用法是访问结构或数组元素中的字段

  这样,指针的加法和偏移是有效的。在所有情况下,结果必须继续指向原始分配对象。

  与C语言不同,将指针移至其原始分配的结束是无效的:

  请注意,两个转换必须出现在相同的表达中,并且它们之间只有中间算术:它们之间:

  请注意,指针必须指向分配的对象,因此不可能做到。

  软件包中的功能将其参数直接传输到操作系统,然后操作系统可以根据调用的详细信息重新解释某些参数作为指针。参数转换回指针。

  如果指针参数必须作为参数转换为UINTPTR,则转换必须出现在呼叫表达式本身中:

  编译函数的汇编的参数列表在汇编函数的参数列表中转换。该方法是安排保留分配对象(如果有),直到呼叫完成,即使使用了类型本身,该对象在呼叫期间不再需要对象。

  为了使编译器能够识别此模式,转换必须出现在参数列表中:

  返回软件包的方法而不是类型,以防止调用结果将结果更改为任何类型,而无需首先导入。但是,这意味着结果是脆弱的,并且在调用后必须立即使用相同的表达式。

  与上述情况一样,存储结果在转换之前是无效的:

  像以前的情况一样,反射的数据结构和字段声明被声明以防止调用在不引入任何类型的情况下将结果更改为任何类型。

  在此用法中,它实际上是字符串头指针的替换方法,而不是变量本身。

  通常,和谐的总和只能用于指向实际的切片或字符串,并且不能用作纯结构。

  该程序不应声明或分配这些结构类型的变量。

  作者:第八个社区