Go的基本資料型別

2021-08-06 05:10:40 字數 3211 閱讀 3648

go語言的資料型別主要分為四種:基礎型別(數字,字串,布林型別),復合型別(陣列,結構體),引用型別(指標,切片,字典,函式和通道),介面型別

go 語言的整型定義型別有符號型別主要有int8,int16,int32,int64, 無符號型別uint8,uint16,uint32,uint64. int 和uint 是對應硬體平台分別對應不同的位數。以及uintptr型別

有無符號

bit數

int8

yes8

int16

yes16

int32

yes32

int64

yes64

uint8no8

uint16

no16

uint32

no32

uint64

no64

intyes

等於cpu位數

uint

no等於cpu的位數

byte

no等於uint8

rune

yes等同於int32

uintptrno-

go語言的bit操作符主要有以下幾種:

& 位運算 and 

| 位運算 or

^ 位運算 xor

&^ 位清空 (and not)

<< 左移

>> 右移

這些操作符大部分和c語言的沒什麼不同,在這裡說一下&^這個運算子是&和^的結合

x &^ y
這裡的意思就是y為1的位都為0,然後其餘的和x一樣。也就是先執行了^y操作然後 &x。

浮點數表示:

go語言定義了兩個型別float32和float64,其中float32等價於c語言的float型別,

float64等價於c語言的double型別。

在這裡普及一下float在記憶體中的儲存方式

float

共計32位,折合4位元組

由最高到最低位分別是第31、30、29、……、0位

31位是符號位,1表示該數為負,0反之。

30-23位,一共8位是指數字。

22-0位,一共23位是尾數字。

float的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是乙個隱含著的「1」,由於它是不變的,故不能對精度造成影響。

float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字。

不懂的可以參照

>

然後go聖經的這個**:

var f float32 = 16777216 // 1 << 24 

fmt.println(f == f+1) // "true"!

為什麼f == f+1,其實就是精度的問題,大家可以測試一下f+3和f+4的結果應該也是一樣的,對於要捨棄的第一位(大於23位的第一位如果是1是要進製到前面去的)。

對於浮點型的比較因為是不精確的,所以不能使用==,可以使用下面的**

import "math"

func checkqual(f1, f2, p float64) bool

p是使用者自定義的精度,如:0.000001

複數由兩部分組成,實部(real)和虛部(imag).go 語言提供了complex64和complex128兩種精度。

複數的表示:

var x complex64

x = 4 + 4i

y := 4 + 4i

z := complex(4,4)

在這裡x代表是complex64型別, y,z都屬於complex128型別。

對於複數,可以通過go語言內建的real(x)和imag(x)來分別獲取複數的實部和虛部。

布林型別和和c語言的沒什麼區別關鍵字bool,可以賦值true 和false 。這裡不做其它講述。

字串在任何語言裡面都是乙個很好用的東西。go語言是直接支援原生的字串型別。go語言的字串的操作感覺很像python裡面的操作,看下面的字串操作**:

func stringfunc(s string) 

var str string = "hello,world"

stringfunc(str)

對於中文字元的,如果想獲取到中文字元,可以先將string轉換為rune陣列,得到中文的unicode,然後用string將unicode轉換為字元即可。

常量的關鍵字和c語言的一樣,都是const表示:

const i = 3.1415926
const同時支援批量宣告

const(

a = 10

bc =20

d )

批量宣告除了第乙個必須賦值,其它的都可以省略。你如果列印a,b,c,d的值,結果是10,10,20,20。也就保持和上面的值一樣。

這樣看來其實const批量宣告也沒什麼大的作用,因此我們需要來介紹iota(常量生成器),它和其它語言裡面的enum是一樣的作用

const(

first = iota

second

third

fourth

)

輸出之後,結果應該是0,1,2,3。

在這裡如果**如下

const(

first = iota

second

third = 10

fourth

)

結果會是什麼?

如果是這樣,結果是什麼?

const(

first = iota

second

third = 10

fourth = iota

)

大家可以通過這個來自己感受iota的使用

這裡還有一種使用方法

const(

first = 1 << iota

second

third

fourth

)

結果大家測試一下。

GO語言基本資料型別

任何go語言原始碼檔案都由若干個程式實體組成的。在go語言中,變數 常量 函式 結構體和介面被統稱為 程式實體 而它們的名字被統稱為 識別符號 識別符號可以是任何unicode編碼可以表示的字母字元 數字以及下劃線 不過,首字母不能是數字或下劃線。注意 在go語言中,我們對程式實體的訪問許可權控制只...

Go語言基本資料型別(四)

go語言基本資料型別主要包含 bool,number,string go中的布林型別,只能是 true 和 false,例如 var b bool true 型別描述 uint8 無符號 8位整型 0 到 255 uint16 無符號 16位整型 0 到 65535 uint32 無符號 32位整型...

go引用型別轉為值 Go基本資料型別

go語言中給我們提供的所有基本資料型別,我們應該理解如何在自己的go程式中使用這些型別。資料型別 go語言將資料型別分為四類 basic types 基礎型別 aggregate types 復合型別 reference types 引用型別 inte ce types 介面型別 基礎型別包括 數字...