1.按長度:int8(-128-127)、int16、int32、int64
成都創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計制作、做網站、北海網絡推廣、成都微信小程序、北海網絡營銷、北海企業策劃、北海品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯公司為所有大學生創業者提供北海建站搭建服務,24小時服務熱線:18980820575,官方網址:www.cdcxhl.com
2.無符號整型:uint8(0-255)、uint16、uint32、uint64
int:? 32位操作系統上就是int32,64位操作系統上就是int64
uint:?32位操作系統上就是uint32,64位操作系統上就是uint64
float32? ? ? float64
complex64和complex128
bool
string
byte? 和? rune
不可以,完全沒有可比性。
Golang的優勢是開發速度,C可以自由、精準的操控內存。
拿string類型舉個栗子:
1、修改字符串:
golang:需要分配新內存,然后進行內存copy。
c:可直接修改,可realloc。
2、存一段data:
golang:使用[]byte類型,[]byte轉成string需要進行內存拷貝(排除掉利用指針進行類型轉換的情況)。
c:直接用char[],可讀可寫。
golang中為了語言的安全性,類似的這種限制有很多,犧牲了一部分性能。但golang的優勢也是顯而易見的,goroutine、chan都很好用,而c則需要自己進行進程、線程的管控。
Go中的binary包實現了簡單的數字與字節序列的轉換以及變長值的編解碼
package main
import ( "fmt" "bytes" "encoding/binary" ) func main(){ n := 0x12345678 bytesBuffer := bytes.NewBuffer([]byte{}) //BigEndian 大端順序存儲 LittleEndian小端順序存儲 binary.Write(bytesBuffer, binary.BigEndian, int32(n)) data:=bytesBuffer.Bytes() fmt.Printf("[0]: %#x addr:%#x\n",data[0],data[0]) fmt.Printf("[0]: %#x addr:%#x\n",data[1],data[1]) fmt.Printf("[0]: %#x addr:%#x\n",data[2],data[2]) fmt.Printf("[0]: %#x addr:%#x\n",data[3],data[3]) }
輸出
[0]: 0x12 addr:0xc042010248 [1]: 0x34 addr:0xc042010249 [2]: 0x56 addr:0xc04201024a [3]: 0x78 addr:0xc04201024b
也可以使用下面的方式
n := 0x12345678 var data []byte = make([]byte,4) //操作的都是無符號整型 binary.BigEndian.PutUint32(data,uint32(n))
可以使用下面的方式判斷當前系統的字節序類型
const INT_SIZE int = int(unsafe.Sizeof(0))
//判斷我們系統中的字節序類型 func systemEdian() { var i int = 0x1 bs := (*[INT_SIZE]byte)(unsafe.Pointer(i)) if bs[0] == 0 { fmt.Println("system edian is little endian") } else { fmt.Println("system edian is big endian") } }