GO的部分總結~

package main

import (
    "fmt"
    "math"
)

var f int = 1      /*全局變量容許 聲明可是不使用*/
const AGE int = 25 //定義常量
const SEX = "man"  //定義常量
const ( //枚舉類型
    Unknow = 0
    Female = 1
    Male   = 2
    CC     = "lalalla"
    D                //枚舉特效 D的值會和CC同樣 我本身理解爲枚舉的上下繼承,
    L      = len(CC) //能夠使用系統內置函數 不然編譯不過
)

//定義結構體
type Circle struct {
    radius float64
}
type Books struct {
    title  string
    author string
    bookid int
    url    string
}

//iota //絲毫 極少 一般用於否認句 不是好詞 iota標誌枚舉聲明的數量 從0開始 很差理解的概念哦~
func main() {
    fmt.Println("hello world22");
    var a int = 1 /*var 聲明變量 a是int*/
    a += 2
    c := 2                     /*以省略var的方式聲明變量c 而且類型自動判斷!這種不帶聲明格式的只能在函數體中出現*/
    var b string = "iloveyou!" /*聲明字符串變量不能用單引號!*/
    var d bool                 /*局部變量變量聲明不使用也會報錯~~*/
    e, f := 5, 7               /*並行賦值*/
    f, e = e, f                //交換值
    fmt.Println(a, c, b, d, e, f)
    _, f = e, f //拋棄e
    println(f, e)
    println(AGE, SEX)
    if AGE > 10 {
        println("大於10", max(1, 3))

        g, h := swap("one", "two")
        println(g, h) //two one
        swap2(&g, &h) //函數是引用傳遞 用&傳參
        println(g, h) //one two

    } else {

    }
    //這樣聲明方式不能在函數外聲明
    getR := func(x float64) float64 {
        return math.Sqrt(x)
    }
    println(getR(9))
    // 聲明結構體
    var i Circle
    i.radius = 10;
    println(i.getArea())

    var arr0 [10] int                        //聲明長度爲10的空數組 定義變量長度類型
    var arr = [4]int{1, 2, 3, 4}             //已知長度的數組聲明
    var arr1 = [...]int{1, 2, 3, 4, 5, 5, 6} //不肯定長度數字聲明 推薦
    println(arr[3])
    println(len(arr1))
    arr0[0] = 1
    var arr2 [3][4] int //多維
    arr2[0][0] = 1

    var arr3 = [3][4]int{ //這個語法不太熟悉
        {1, 2, 3, 4},
        {1, 2, 3, 4},
        {1, 2, 3, 4},
    }
    println(arr3[0][0])

    var ip *int  //int類型空指針 nil
    println(ip)  //空指針 nil
    ip = &a      //空指針的賦值
    println(ip)  //訪問ip的地址
    println(*ip) //訪問ip的值

    //行內賦值方法用處還挺多呢!
    ss := Books{title: "你的名字", author: "楊森", url: "http://www.baidu.com/", bookid: 12}
    //格式化打印go的結構體
    fmt.Printf("%+v", ss)
    struct1(ss)

    //定義切片 未指定長度的數組
    //初始化
    ii_s := make([]int, 3, 5) //第三個參數是容量
    p_s(ii_s)
    var numbers []int
    if (numbers == nil) {
        fmt.Println("numbers爲空")
    }
    p_s(numbers)

    //for range能夠遍歷數字 map等~
    nums := []int{1, 2, 3, 4}
    for i, num := range nums {
        fmt.Println(i, num)
    }
    fmt.Printf("%d的階乘是%d", 10, fac(10))
    //接口 多個方法的封裝
}

//遞歸本身調用本身 階乘~
func fac(n uint64) (result uint64) {
    if (n > 0) {
        result = n * fac(n-1)
        return result
    }
    return 1
}

func p_s(x []int) {
    fmt.Printf("len=%d, cap=%d,slice=%+v", len(x), cap(x), x)

}

func max(n1, n2 int) int {
    return n1 + n2
}

/**
返回多個值 接收的時候須要使用並行賦值
 */
func swap(s1, s2 string) (string, string) {
    return s2, s1
}

//引用傳遞不用使用返回值和並行賦值接收 方便一點
func swap2(s1 *string, s2 *string) {
    var tmp string //聲明中間變量
    tmp = *s1
    *s1 = *s2
    *s2 = tmp
}

//定義方式暫時不動~~~
func (c Circle) getArea() float64 {
    return 3.14 * c.radius * c.radius
}

//結構體作參數
func struct1(book Books) {
    fmt.Printf("%+v", book)
}
相關文章
相關標籤/搜索