成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文搞懂Golang中的指針

開發 前端
本文介紹了普通指針類型、Uintptr類型和Unsafe.Pointer類以及它們之間的關系,官方不推薦使用Unsafe 包,因為它會忽略類型安全檢查,可能會導致內存問題。

Golang中和指針相關的類型有三種:普通指針類型(取地址"&"、指針間接引用"*"), uintptr類型, unsafe.Pointer類型。

普通指針

普通指針類型(取地址"&"、指針間接引用"*"),用于傳遞對象地址,不能進行指針運算。Golang會在編譯時檢查指針的類型安全性,幫助用戶避免潛在的指針問題。

package main

import "fmt"

type User struct {
	Name string
}

func main() {
	var u User
	u.Name = "xiaoming"
	p := &u
	fmt.Println(p)
	fmt.Println(*p)
}

uintptr類型

uintptr是一種無符號整型類型,可以保存一個指針值,也可以進行指針運算,但是它并不是一個指針類型,所以不能直接用來取值。想要取值的話,需要通過unsafe.Pointer轉換到具體類型指針后,使用"*"號取值。

uintptr在builtin包里的源代碼如下:

// uintptr is an integer type that is large enough to hold the bit pattern of
// any pointer.
type uintptr uintptr

官方的注釋是:uintptr是一個能足夠容納指針位數大小的整型類型。

使用示例:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var num int = 10
	ptr := &num
	addr := uintptr(unsafe.Pointer(ptr))

	fmt.Printf("Value: %v, Address: %v\n", *ptr, addr)

	newAddr := addr + 4
	newPtr := (*int)(unsafe.Pointer(newAddr))

	fmt.Printf("Value: %v, Address: %v\n", *newPtr, newAddr)
}

unsafe.Pointer類型

unsafe.Pointer是unsafe包中的一個類型,用于處理指針的底層操作。可以將任何類型的指針轉換為unsafe.Pointer類型,也可以將unsafe.Pointer類型轉換為任何類型的指針。使用unsafe.Pointer要特別小心,因為它會忽略類型安全檢查,可能會導致內存問題。

unsafe.Pointer可以作為橋梁,將使用"&"取的地址轉換成uintptr進行指針運算,也可以再轉換為具體類型的指針通過”*“取值。

unsafe.Pointer的四種操作規則如下:

  • 任何類型的指針都可以轉化成unsafe.Pointer。
  • unsafe.Pointer可以轉化成任何類型的指針。
  • uintptr可以轉換為unsafe.Pointer。
  • unsafeP.ointer可以轉換為uintptr。
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	i := 30
	ptr1 := &i

	var ptr2 *int64 = (*int64)(unsafe.Pointer(ptr1))
	*ptr2 = 8

	fmt.Println(i)
}

上面的代碼通過unsafe.Pointer把*int類型的ptr1轉換為了*int64類型的ptr2,然后對*int64進行操作,改變了i的值。

小結

本文介紹了普通指針類型、uintptr類型和unsafe.Pointer類以及它們之間的關系,官方不推薦使用unsafe 包,因為它會忽略類型安全檢查,可能會導致內存問題。

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯網NoSQL

2023-09-08 08:20:46

ThreadLoca多線程工具

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應用程序接口

2021-12-29 17:38:17

JavaScripttypeof前端

2023-05-31 13:32:08

Javalambda函數

2021-09-11 10:41:27

PythonPickle模塊

2024-02-01 11:57:31

this指針代碼C++

2022-05-05 16:47:24

Docker網絡空間容器

2022-08-15 15:39:23

JavaScript面向對象數據

2021-01-13 05:21:59

參數

2023-08-24 16:50:45

2021-06-30 08:45:02

內存管理面試

2019-11-19 08:00:00

神經網絡AI人工智能

2020-03-18 14:00:47

MySQL分區數據庫

2023-04-03 15:04:00

RPCPHP語言

2023-10-16 08:16:31

Bean接口類型

2022-06-07 10:13:22

前端沙箱對象

2024-06-05 11:43:10

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久国产精品 | 亚洲欧美综合精品久久成人 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 九色av| 国产精品96久久久久久 | 免费观看一级视频 | 中文字幕视频在线观看 | 日韩欧美中文字幕在线观看 | 午夜无码国产理论在线 | 大久| 成人精品国产一区二区4080 | 亚洲成色777777在线观看影院 | 欧美在线视频网 | 精品成人av | 欧美成人第一页 | 日批av| 日韩成人影院 | 黄一区二区三区 | 一区在线观看 | 热re99久久精品国产99热 | 久久久国产精品视频 | 国产精品久久久久久久久免费 | 九九热精品视频 | 欧洲性生活视频 | 最新中文字幕 | 国产真实精品久久二三区 | 国产精品久久国产精品 | 成人一区二区三区在线 | 色网在线看 | 97在线观看| av网站在线看 | 欧美一区二区三区在线 | 麻豆精品久久 | 欧美一区二区三区国产 | 成人福利在线视频 | 日韩欧美国产一区二区 | 国产免费播放视频 | 欧美成人精品在线观看 | 亚洲成人免费在线观看 | www成人免费 | 日韩免费成人av |