GO語言基礎資料類型

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。# Go語言的基礎資料類型 #***Go語言的資料類型主要分為四種:基礎類型(數字,字串,布爾類型),複合類型(數組,結構體),參考型別(指標,切片,字典,函數和通道),介面類型</font>***##整型Go 語言的整型定義類型有符號類型主要有**int8,int16,int32,int64**, 無符號類型**uint8,uint16,uint32,uint64. int 和uint 是對應硬體平台分別對應不同的位元。以及uintptr**<table class="table table-bordered table-striped table-condensed"> <tr> <td>類型</td><td>有無符號</td> <td>bit數</td> </tr> <tr> <td>int8</td><td>yes</td> <td>8</td> </tr> <tr> <td>int16</td><td>yes</td> <td>16</td> </tr> <tr> <td>int32</td><td>yes</td> <td>32</td> </tr> <tr> <td>int64</td><td>yes</td> <td>64</td> </tr> <tr> <td>uint8</td><td>no</td> <td>8</td> </tr> <tr> <td>uint16</td><td>no</td> <td>16</td> </tr> <tr> <td>uint32</td><td>no</td> <td>32</td> </tr> <tr> <td>uint64</td><td>no</td> <td>64</td> </tr> <tr> <td>int</td><td>yes</td> <td>等於cpu位元</td> </tr> <tr> <td>uint</td><td>no</td> <td>等於CPU的位元</td> </tr> <tr> <td>byte</td><td>no</td> <td>等於uint8</td> </tr> <tr> <td>rune</td><td>yes</td> <td>等同於int32</td> </tr> <tr> <td>uintptr</td><td>no</td> <td>-</td> </tr></table>Go語言的Bit操作符主要有以下幾種:& 位元運算 AND | 位元運算 OR ^ 位元運算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移這些操作符大部分和C語言的沒什麼不同,在這裡說一下&^這個運算子是&和^的結合 x &^ y這裡的意思就是y為1的位都為0,然後其餘的和x一樣。也就是先執行了^y操作然後 &x。 ##浮點型1. 浮點數表示: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位有效數字。不懂的可以參照[http://blog.csdn.net/flowaway_/article/details/41597727](http://blog.csdn.net/flowaway_/article/details/41597727)然後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 {return math.Fdim(f1, f2) < p}p是使用者自訂的精度,如:0.000001***##複數複數由兩部分組成,實部(real)和虛部(imag).Go 語言提供了complex64和complex128兩種精度。複數的表示:var x complex64x = 4 + 4iy := 4 + 4iz := complex(4,4)在這裡x代表是complex64類型, y,z都屬於complex128類型。對於複數,可以通過Go語言內建的real(x)和imag(x)來分別擷取複數的實部和虛部。***##布爾類型布爾類型和和C語言的沒什麼區別關鍵字bool,可以賦值true 和false。這裡不做其它講述。***##字串和Byte切片字串在任何語言裡面都是一個很好用的東西。Go語言是直接支援原生的字串類型。Go語言的字串的操作感覺很像python裡面的操作,看下面的字串作業碼:func StringFunc(s string) {fmt.Printf("%c", s[0]) // 下標操作和傳統的C一樣var f string = ",wenxuwan"s = s + f //字串串連,可以直接+連結兩個字串fmt.Println(s[0:4]) //截斷操作,列印0-3下表的字串fmt.Println(len(s)) //列印字串的長度}var str string = "Hello,world"StringFunc(str)對於中文字元的,如果想擷取到中文字元,可以先將string轉換為rune數組,得到中文的Unicode,然後用string將Unicode轉換為字元即可。***##常量- 1常量的關鍵字和C語言的一樣,都是const表示:const i = 3.1415926const 同時支援批量聲明const(a = 10bc =20d )批量聲明除了第一個必須賦值,其它的都可以省略。你如果列印a,b,c,d的值,結果是10,10,20,20。也就保持和上面的值一樣。- 2 這樣看來其實const批量聲明也沒什麼大的作用,因此我們需要來介紹iota(常量產生器),它和其它語言裡面的enum是一樣的作用const(first = iotasecondthird fourth)輸出之後,結果應該是0,1,2,3。在這裡如果代碼如下const(first = iotasecondthird = 10fourth)結果會是什嗎?如果是這樣,結果是什嗎?const(first = iotasecondthird = 10fourth = iota)大家可以通過這個來自己感受iota的使用這裡還有一種使用方法const(first = 1 << iotasecondthirdfourth)結果大家測試一下。214 次點擊  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.