go基本文法學習筆記之類型

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

整形


 類型轉換舉例
var ia int64 = 54345var ib int32ib = int32(ia)fmt.Println("ibis", ib)

浮點形

    go語言定義了兩個浮點型 float32 等價於C語言的float類型,
float64 等價於C語言的double類型  浮點數的比較 math.Fdim(f1, f2) < p p為定義的精度 如 0.00000001

字串

var str1 stringstr1 = "this is first string"str2 := "this is second string"str3 := str1 + str2fmt.Printf("the string str3: %s \n len: %d \n first char is %c \n", str3, len(str3), str3[0])
字串可以用常規方法for迴圈遍曆,應用len取的字串長度,用str3[i]取值,依據下標取字串中的字元,類型為byte,這裡用另一種方法遍曆:
for i, ch := range str3 {//fmt.Println(i, ch, "\n")  以Unicode字元方式遍曆時,每個字元的類型是runefmt.Printf("%d, %c", i, ch)}

字元類型

go支援兩種字元類型:byte(實際上是uint8的別名),代表UTF-8字串的單個位元組的值
rune 代表單個Unicode字元 於rune相關的操作,可查閱Go標準庫的unicode包。另外unicode/utf8包也提供了UTF8和Unicode之間的轉換。 注意:出於簡化語言的考慮,Go語言的多數API都假設字串為UTF-8編碼。儘管Unicode字元在標準庫中有支援,但實際上較少使用。

數組

go中數組由一組相同類型的元素構成,其長度聲明後不可改變,數組常規聲明方法
[32]byte // 長度為32的數組,每個元素為一個位元組[2*N] struct { x, y int32 } // 複雜類型數組[1000]*float64 // 指標數組[3][5]int // 二維數組[2][2][2]float64 // 等同於[2]([2]([2]float64))
        GO中數組小標同C,從0開始數組遍曆
var array [2]struct {x stringy uint64}array[0].x = "first"array[0].y = 888888array[1].x = "secon"array[1].y = 99999for i, v := range array {fmt.Println("Array element[", i, "]=", v.x, v.y, "\n")}
注意:在GO中數組是實值型別,所有的實值型別變數在賦值和作為參數傳遞時都將 產生一次複製動作。

數組切片

       初看起來,數組切片就像一個指向數組的指標,實際上它擁有自己的資料結構,而不僅僅是個指標。數組切片的資料結構可以抽象為以下3個變數:
  1. 一個指向原生數組的指標;
  2.  數組切片中的元素個數;
  3. 數組切片已指派的儲存空間。
建立數組切片可有兩種方法 基於數組或數組切片可基於已有數組建立少於或等於,甚至比原有數組更大的數組切片Go語言支援用myArray[first:last]來建立數組切片:myArray[:] 整個,myArray[:5] 前五個,myArray[5:] 從第五個開始  
// 先定義一個數組var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}// 基於數組建立一個數組切片var mySlice []int = myArray[:5]fmt.Println("Elements of myArray: ")for _, v := range myArray {fmt.Print(v, " ")}fmt.Println("\nElements of mySlice: ")for _, v := range mySlice {fmt.Print(v, " ")}fmt.Println()
      直接建立 
     GO可以用內建函數make(),靈活建立數組切片     make 第一個參數定義數群組類型如 []int, 第二個參數為元素個數, 第三個參數為預留儲存空間,可以預設
建立一個初始元素個數為5的數組切片,元素初始值為0:mySlice1 := make([]int, 5)建立一個初始元素個數為5的數組切片,元素初始值為0,並預留10個元素的儲存空間:mySlice2 := make([]int, 5, 10)直接建立並初始化包含5個元素的數組切片:mySlice3 := []int{1, 2, 3, 4, 5}
元素遍曆同數組        動態增減GO中可用 append()向數組切片尾部增加元素,該函數的第二參數為不定長參數,可以按需傳人另外還可以將一個數組切片用...打散後添加到數組切片後面
arr1 := make([]int64, 5)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()arr1 = append(arr1, 3, 4, 5)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()arr2 := []int64{8, 8, 8, 8, 8}arr1 = append(arr1, arr2...)for _, v := range arr1 {fmt.Print(" ", v)}fmt.Println()
內容複寫
slice1 := []int{1, 2, 3, 4, 5}slice2 := []int{5, 4, 3}copy(slice2, slice1) // 只會複製slice1的前3個元素到slice2中copy(slice1, slice2) // 只會複製slice2的3個元素到slice1的前3個位置

MAP

GO中,map是內建的,是一堆索引值對的未排序集合。
<span style="white-space:pre"></span>type book struct {Name  stringActor stringPrice float64}var booksMap map[string]book     //聲明booksMap = make(map[string]book) //建立booksMap["123456"] = book{"go web 編程", "tom.sd", 64.2}booksMap["443"] = book{"go程式設計語言", "tom.ddd", 55.2}book1, ok := booksMap["443"] //尋找if ok {fmt.Println("book1 ", book1.Name, book1.Actor, book1.Price)book1.Price = 88.8booksMap["443"] = book1  //修改}book2, ok := booksMap["443"]if ok {fmt.Println("book1 ", book2.Name, book2.Actor, book2.Price)//book1.Price = 88.8}
刪除元素
delete(booksMap,"443")










聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.