go語言實戰 摘抄

2022-01-26 06:40:47 字數 2467 閱讀 5662

**測試

func foo(list int) 

return

}func main()

foo(list)

fmt.printf("%v", list)

}// 結果

[10, 11, 12]

64位架構的機器上,乙個切片需要24位元組的記憶體,指標字段需要8位元組,長度和容量各需要8位元組

指向t型別的值的方法集只包含值接收者宣告的方法。

指向t型別的指標的方法集包含值接收者宣告和指標接收者宣告的方法。

go語言執行時缺省會為每個可用的物理處理器分配乙個邏輯處理器

如果建立乙個goroutine並準備執行,這個goroutine就會被到排程器的全域性執行佇列中。之後,排程器就將這些佇列中的goroutine分配給乙個邏輯處理器,並放到這個邏輯處理器對應的本地執行佇列中。

邏輯處理器

本地執行佇列

排程器

使用go build -race競爭檢測器標誌來編譯程式

執行程式./go_start.exe出現警告。

可以使用atomicsync包下的方法或函式保證執行緒安全

unbuffered := make(chan int)

buffered := make(chan string, 10)

第乙個是無緩衝的通道,第二是有緩衝的通道

任務執行,需要考慮的情況:

系統中斷

完成情況(完成 or 失敗)

超時runner自帶超時與中斷功能

type runner struct 

var errtimeout = errors.new("received timeout")

var errinterrupt = errors.new("received interrupt")

// new a runner

func new(d time.duration) *runner

}func (r *runner) add(tasks ...func(int))

func (r *runner) start() error ()

select

}func (r *runner) run() error

task(id)

} return nil

}func (r *runner) gotinterrupt() bool

}

資源管理池

package pool

import (

"errors"

"io"

"log"

"sync"

)type pool struct

var errpoolclosed = errors.new("pool has been closed")

func new(fn func() (io.closer, error), size uint) (*pool, error)

return &pool, nil

}// get a resource

func (p *pool) acquire() (io.closer, error)

return r, nil

default:

log.println("acquire:", "new resource")

return p.factory() }}

// release to reasoure

func (p *pool) release(r io.closer)

select

}// close

func (p *pool) close()

p.closed = true

close(p.resources)

for r := range p.resources

return

}

讀《Go 語言實戰》

英文版書名 go in action william kennedy brian ketelsen eirk st.martin 著2017年3月 第 1 版 go 語言是現代的,快速的,帶有乙個強大的標準庫。內建對併發的支援 使用介面作為 復用的基礎模組。一,go語言介紹 二,快速開始乙個go程式...

GO語言實戰十 管道

不要通過共享記憶體來通訊,而應該通過通訊來共享記憶體 channel 也是go語言裡的一種引用型別,通道可以被認為是goroutines通訊的管道。類似於管道中的水從一端到另一端的流動,資料可以從一端傳送到另一端,通過通道接收。當乙個資源需要在 goroutine 之間共享時,通道在 gorouti...

go語言實戰筆記 二

碼 之前一定要安裝go,哈哈哈哈,反正我只裝goland然後寫不了 報錯,卡在第一段 哈哈哈哈哈哈 新建專案goproject 新建src資料夾 新建main資料夾 新建第乙個go檔案 開始寫 好了,我用一秒鐘的時間寫完了下面的 package main import bufio fmt os my...