# package unsafe
`import "unsafe"`
unsafe包提供了一些跳過go語言類型安全限制的操作。
## Index
* [type ArbitraryType](#ArbitraryType)
* [type Pointer](#Pointer)
* [func Sizeof(v ArbitraryType) uintptr](#Sizeof)
* [func Alignof(v ArbitraryType) uintptr](#Alignof)
* [func Offsetof(v ArbitraryType) uintptr](#Offsetof)
## type [ArbitraryType](https://github.com/golang/go/blob/master/src/unsafe/unsafe.go#L12 "View Source")
```
type ArbitraryType int
```
ArbitraryType在本文檔里表示任意一種類型,但并非一個實際存在與unsafe包的類型。
## type [Pointer](https://github.com/golang/go/blob/master/src/unsafe/unsafe.go#L22 "View Source")
```
type Pointer *ArbitraryType
```
Pointer類型用于表示任意類型的指針。有4個特殊的只能用于Pointer類型的操作:
```
1) 任意類型的指針可以轉換為一個Pointer類型值
2) 一個Pointer類型值可以轉換為任意類型的指針
3) 一個uintptr類型值可以轉換為一個Pointer類型值
4) 一個Pointer類型值可以轉換為一個uintptr類型值
```
因此,Pointer類型允許程序繞過類型系統讀寫任意內存。使用它時必須謹慎。
## func [Sizeof](https://github.com/golang/go/blob/master/src/unsafe/unsafe.go#L27 "View Source")
```
func Sizeof(v ArbitraryType) uintptr
```
Sizeof返回類型v本身數據所占用的字節數。返回值是“頂層”的數據占有的字節數。例如,若v是一個切片,它會返回該切片描述符的大小,而非該切片底層引用的內存的大小。
## func [Alignof](https://github.com/golang/go/blob/master/src/unsafe/unsafe.go#L37 "View Source")
```
func Alignof(v ArbitraryType) uintptr
```
Alignof返回類型v的對齊方式(即類型v在內存中占用的字節數);若是結構體類型的字段的形式,它會返回字段f在該結構體中的對齊方式。
## func [Offsetof](https://github.com/golang/go/blob/master/src/unsafe/unsafe.go#L32 "View Source")
```
func Offsetof(v ArbitraryType) uintptr
```
Offsetof返回類型v所代表的結構體字段在結構體中的偏移量,它必須為結構體類型的字段的形式。換句話說,它返回該結構起始處與該字段起始處之間的字節數。
- 庫
- package achive
- package tar
- package zip
- package bufio
- package builtin
- package bytes
- package compress
- package bzip2
- package flate
- package gzip
- package lzw
- package zlib
- package container
- package heap
- package list
- package ring
- package crypto
- package aes
- package cipher
- package des
- package dsa
- package ecdsa
- package elliptic
- package hmac
- package md5
- package rand
- package rc4
- package rsa
- package sha1
- package sha256
- package sha512
- package subtle
- package tls
- package x509
- package pkix
- package database
- package sql
- package driver
- package encoding
- package ascii85
- package asn1
- package base32
- package base64
- package binary
- package csv
- package gob
- package hex
- package json
- package pem
- package xml
- package errors
- package expvar
- package flag
- package fmt
- package go
- package doc
- package format
- package parser
- package printer
- package hash
- package adler32
- package crc32
- package crc64
- package fnv
- package html
- package template
- package image
- package color
- package palette
- package draw
- package gif
- package jpeg
- package png
- package index
- package suffixarray
- package io
- package ioutil
- package log
- package syslog
- package math
- package big
- package cmplx
- package rand
- package mime
- package multipart
- package net
- package http
- package cgi
- package cookiejar
- package fcgi
- package httptest
- package httputil
- package pprof
- package mail
- package rpc
- package jsonrpc
- package smtp
- package textproto
- package url
- package os
- package exec
- package signal
- package user
- package path
- package filepath
- package reflect
- package regexp
- package runtime
- package cgo
- package debug
- package pprof
- package race
- package sort
- package strconv
- package strings
- package sync
- package atomic
- package text
- package scanner
- package tabwriter
- package template
- package time
- package unicode
- package utf16
- package utf8
- package unsafe