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

一文搞懂Golang中的指針

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

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是一個能足夠容納指針位數(shù)大小的整型類型。

使用示例:

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包中的一個類型,用于處理指針的底層操作??梢詫⑷魏晤愋偷闹羔樲D換為unsafe.Pointer類型,也可以將unsafe.Pointer類型轉換為任何類型的指針。使用unsafe.Pointer要特別小心,因為它會忽略類型安全檢查,可能會導致內(nèi)存問題。

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

unsafe.Pointer的四種操作規(guī)則如下:

  • 任何類型的指針都可以轉化成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 包,因為它會忽略類型安全檢查,可能會導致內(nèi)存問題。

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

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2024-04-12 12:19:08

語言模型AI

2021-12-29 17:38:17

JavaScripttypeof前端

2023-09-08 08:20:46

ThreadLoca多線程工具

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應用程序接口

2023-05-31 13:32:08

Javalambda函數(shù)

2021-09-11 10:41:27

PythonPickle模塊

2024-02-01 11:57:31

this指針代碼C++

2020-05-15 16:37:13

PowerBI數(shù)據(jù)分析

2022-05-05 16:47:24

Docker網(wǎng)絡空間容器

2023-09-02 21:27:09

2020-12-07 06:19:50

監(jiān)控前端用戶

2021-03-04 00:09:31

MySQL體系架構

2021-07-08 10:08:03

DvaJS前端Dva

2020-09-03 06:35:44

Linux權限文件

2023-05-22 13:27:17

2021-02-28 20:53:37

Cookie存儲瀏覽器

2024-07-12 14:46:20

2023-03-06 21:29:41

mmap技術操作系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合首页 | 日韩精品中文字幕在线 | 国产精品欧美一区二区三区不卡 | 日韩精品在线一区 | 毛片免费视频 | 超碰人人艹 | 黑人精品欧美一区二区蜜桃 | 精品一区av | 91av久久久 | 欧美激情国产日韩精品一区18 | 一区二区三区在线 | 色妹子综合网 | 精品一区二区三区不卡 | 欧美日韩一区精品 | 欧美日韩一区二区在线观看 | av大片| 欧美亚洲日本 | 国产成人精品一区 | 免费精品一区 | 国产成人精品一区二区三区在线 | 亚洲三区在线播放 | 蜜臀久久99精品久久久久久宅男 | 亚洲欧美日韩一区二区 | 日本又色又爽又黄的大片 | 一区二区三区av | 91久久网站| 久久精品国产一区二区三区不卡 | 国产精品亚洲二区 | 日本久久精品视频 | 五月天婷婷综合 | 天天爽夜夜爽精品视频婷婷 | 一区二区三区网站 | 久久精品成人 | 狠狠干天天干 | 99久久精品国产麻豆演员表 | 亚洲一区中文字幕 | av久久 | 99re6热在线精品视频播放 | 日韩中文在线视频 | 日韩欧美在线观看 | 国产日韩欧美在线 |