初識 go 語言:方法,介面及並發

來源:互聯網
上載者:User

標籤:i++   語言   體驗   UNC   結構   理解   mil   操作   包括   

目錄

  • 方法,介面及並發
    • 方法
    • 介面
    • 並發
    • 通道
  • 結束語

前言: go語言的第四篇文章,主要講述go語言中的方法,包括指標,結構體,數組,切片,映射,函數閉包等,每個都提供了樣本,可直接運行。

方法,介面及並發方法

方法就是一類帶特殊的接收者(struct)參數的函數

  • 通過 結構體.方法 調用
    樣本:
type city struct {    name, address string}func (c city) sysCity() {    c.name = "帝都"    fmt.Println(c.name, c.address)}func testFunc() {    c := city{        "北京", "二環",    }    c.sysCity()    fmt.Println(c)}
  • fmt.Println(c)輸出的還是{北京 二環},並沒有因為在sysCity()中給c.name賦值而改變結構體的值

    指標接收者上面說過可以指標去改變結構體的值,所以也可以通過指標接收者去改變結構體的值
//就在struct類型前加個*就是擷取結構體指標了func (c *city) sysCity() {    c.name = "帝都"    fmt.Println(c.name, c.address)}
  • 嘗試輸出一下
介面

使用 interface關鍵字表示一個介面,介面是由一組方法簽名定義的集合
樣本:

//介面type adder interface {    syso()}//隱式調用,無需聲明func (x city) syso() {    fmt.Println(x.name, x.address)}func main() {    var var1 adder    var2 := city{        "長安", "皇城",    }    var1 = &var2    var1.syso()        //還可以簡寫成這樣    var var3 adder = city{        "帝都", "皇城",    }    var3.syso()}

空介面:interface {} 沒有方法
為了判斷 一個介面值是否儲存了一個特定的類型,類型斷言可返回兩個值:其底層值以及一個報告斷言是否成功的布爾值。
例:t, ok := i.(T)
若 i 儲存了一個 T,那麼 t 將會是其底層值,而 ok 為 true。
否則,ok 將為 false 而 t 將為 T 類型的零值,程式並不會產生恐慌。

func main() {    var i interface{} = "this go"    v, ok := i.(string)    fmt.Println(v, ok)    v, ok := i.(int)}
並發

命令 go 新起一個線程叫go程,go程相當於另起一個線程
樣本:

func hello(x string) {    for i := 0; i < 5; i++ {        time.Sleep(100 * time.Millisecond)        fmt.Println(x)    }}func main() {    go hello("go")    hello("say")}
  • 輸出 say go
通道

通道是帶有類型的管道,你可以通過它用通道操作符 <- 來發送或者接收值。
(“箭頭”就是資料流的方向)

func sum(x int, var1 chan int) {    sum := x    for i := 0; i < 5; i++ {        time.Sleep(100 * time.Millisecond)        sum = sum + i    }    var1 <- sum}func main() {    var1 := make(chan int)    go sum(10, var1)    go sum(20, var1)    x, y := <-var1, <-var1    fmt.Println(x + y)}

ch := make(chan int, 100)

  • 100指定緩衝大小
  • 我的理解就是通道裡可以容納的量
    嘗試輸出以下兩段代碼,或者將1改成2,體驗下區別:
func main() {    ch := make(chan int, 1)    ch <- 21    fmt.Println(<-ch)    ch <- 100    fmt.Println(<-ch)}
func main() {    ch := make(chan int, 1)    ch <- 21    ch <- 100    fmt.Println(<-ch)    fmt.Println(<-ch)}


結束語

初識 go 語言系列

  • [x] 初識 go 語言
  • [x] 初識 go 語言:文法
  • [x] 初識 go 語言:資料類型
  • [x] 初識 go 語言:方法,介面及並發

關注公眾號

初識 go 語言:方法,介面及並發

相關文章

聯繫我們

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