91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言初體驗(流程控制、range遍歷、函數、結構體、面向對象)

發布時間:2020-04-13 21:37:32 來源:網絡 閱讀:799 作者:PowerMichael 欄目:編程語言

一、流程控制

// main
package main

import (
    "fmt"
)

func main() {
    x := 2
    switch x {
    case 1:
        fmt.Print("beifeng 1")
    case 2:
        fallthrough
    case 3:
        fmt.Print("beifeng 2")
    default:
        fmt.Print("beifeng 3")
    }
}

二、range遍歷

// main.go
package main

import (
    "fmt"
)

func main() {
    x := "zhangsan"

    for _, v := range x {
        fmt.Printf("%c\n", v)
    }
}

三、函數

左函數右返回值中間若干傳入參數
*傳指針的值,&指針的地址
函數是一等公民,也可以作為值、類型

3.1 函數傳值與傳指針
// func_1
package main

import (
    "fmt"
)

func swap(a, b int) (int, int) {
    return b, a
}

func add(a *int) *int {
    *a = *a + 1
    return a
}

func main() {
    a := 1
    add(&a)
    fmt.Printf("%d", a)
}
3.2 匿名函數

函數作為具體的類型;變量指向具體的函數

/ main.go
package main

import (
    "fmt"
)

func main() {
    type sum func(x, y int) int
    var f sum = func(x, y int) int {
        return x + y
    }

    fmt.Println(f(3, 4))
}
3.3 函數中傳入切片參數
// fun_2
package main

import (
    "fmt"
)
//求和函數,傳入一個動態整型數組
func getSum(num []int) int {
    //初始化sum變量
    sum := 0
    //遍歷數組,求和
    for i := 0; i < len(num); i++ {
        sum += num[i]
    }
    //返回sum值
    return sum
}

func main() {
    //初始化num整型切片變量
    num := []int{1, 2, 3, 4, 5}
    fmt.Print(getSum(num))
}
3.4 defer函數

defer延遲的意思;后進先去
加入defer 的代碼語句將會最后執行,同時也能保存defer后面的代碼能夠執行到
場景1:資源關閉

// defer.go
package main

import (
    "fmt"
)

func main() {
    for i := 1; i <= 5; i++ {
        defer fmt.Println(i)
    }
}
3.5 pannic

Go的異常處理機制
Panic 捕獲異常,程序掛

// panic.go
package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("After panic from defer !") //panic之后 defer里面的依然可以得到執行
    }()

    panic("I am panicing!")

    fmt.Println("After panic!") //panic后面得不到執行
}

四、結構體struct

Go語言沒有private、protected、public這樣的關鍵字。

某個符號對其他包(package)可見(即可以訪問),
需要將該符號定義為以大寫字母開頭。

// main.go
package main

import (
    "fmt"
)

type Person struct {
    name string
    age  int
}

type Student struct {
    Person
    age        int
    speciality string
}

func main() {
    student := Student{Person{"zhangsan", 25}, 30, "maths"}
    fmt.Printf("%v %v", student.Person.age, student.age)
}

五、面向對象

類與方法
Golang:"A method is a function with an implicit first argument, called a receiver.“
func (r ReceiverType) funcName(parameters) (results)
類型和作用在它上面定義的方法必須在同一個包里定義,這就是為什么不能在 int、float 或類似這些的類型上定義方法。
類的初始化:point :=new(Point)
point :=&Point{}
point :=&Point{x:100, y:100}
point := Point{}

// main
package main

import (
    "fmt"
)

/*func compare(a, b int) bool {
    return a < b
}*/

//定義一個結構體Point
type Point struct {
    px float32
    py float32
}

//接收者point,接收類型結構體指針Point,方法setXY(),傳入參數px,py
func (point *Point) setXY(px, py float32) {
    //定義接收者屬性
    point.px = px
    point.py = py
}

//接收者point 接收類型結構體指針Point,方法getxy(),返回兩個float32數據類型的值
func (point *Point) getXY() (float32, float32) {
    //返回x,y值
    return point.px, point.py
}

//定義一個結構體 Integer
type Integer struct {
    //定義結構體的屬性
    value int
}

func main() {
    //初始化一個類
    point := new(Point)
    point.setXY(1.23, 4.56)
    px, py := point.getXY()
    fmt.Print(px, py)
}
5.1 面向對象之繼承、接口、接口賦值、any類型、類型查詢

在Go語言中,一個類只需要實現了接口要求的所有函數,我們就說這個類實現了該接口。
接口賦值有兩種方式:1、將對象實例賦值給接口;2、將一個接口賦值給另一個接口
Go語言中任何對象實例都滿足空接口interface{},interface{}可以接收所有數據類型

package main

import "fmt"

//定義一個Person結構體
type Person struct {
    name string
    age  int
}

//接收者person,接收結構體類型Person, 方法getNameAndAge() 返回string,int值
func (person Person) getNameAndAge() (string, int) {
    return person.name, person.age
}

type Student struct {
    Person
    speciality string
}

func (student Student) getSpeciality() string {
    return student.speciality
}

//定義一個Animal接口,實現的方法有Fly() Run()
type Animal interface {
    Fly()
    Run()
}

type Animal2 interface {
    Fly()
}

type Bird struct {
}

//通過接收者實現接口的方法
//接收者bird實現Fly()方法
func (bird Bird) Fly() {
    fmt.Println("Bird is flying!!!!")
}

//接收者bird實現Run()方法
func (bird Bird) Run() {
    fmt.Println("Bird is running!!!!")
}

func main() {
    student := new(Student)
    student.name = "zhangsan"
    student.age = 26

    name, age := student.getNameAndAge()
    student.speciality = "computer"
    speciality := student.getSpeciality()

    fmt.Println(name, age, speciality)

    //定義animal接口
    var animal Animal
    //定義animal2接口
    var animal2 Animal2

    //初始化一個對象bird
    bird := new(Bird)
    //將對象實例bird賦值給animal接口
    animal = bird
    //將animal接口賦值給animal2接口
    animal2 = animal
    //

    //animal = bird //把類實例直接賦值給接口
    //animal2 = bird
    animal2.Fly()
    animal2.Fly()
    animal.Fly()
    animal.Run()

    //定義一個any類型的變量v1
    var v1 interface{}
    //賦值
    v1 = "zhangsan"

    switch v1.(type) {
    case int:
    case float32:
    case float64:
        fmt.Println("this is float64")
    case string:
        fmt.Println("this is string")
    }
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

甘泉县| 清水县| 福清市| 侯马市| 雷州市| 苍梧县| 开阳县| 卢氏县| 南和县| 玉树县| 磐石市| 平罗县| 宁乡县| 南木林县| 湖南省| 香格里拉县| 新营市| 闵行区| 永胜县| 邢台市| 抚州市| 肇庆市| 石狮市| 休宁县| 松原市| 徐州市| 长子县| 前郭尔| 康马县| 灵山县| 岱山县| 东乌| 三亚市| 卓尼县| 射洪县| 宜丰县| 苏州市| 安新县| 从化市| 阿瓦提县| 垦利县|