博客 / 列表

liuyuede - golang中的字符串

0.1、索引 https://waterflow.link/articles/1666449874974 1、字符串編碼 在go中rune是一個unicode編碼點。 我們都知道UTF-8將字符編碼為1-4個字節,比如我們常用的漢字,UTF-8編碼為3個字節。所以rune也是int32的別名。 type rune = int32 當我們打印一個英文字符hello的時候,我們可以得到s的長度為5,因

字符串 , go

liuyuede - golang垃圾回收

0.1、索引 https://waterflow.link/articles/1664943418972 文中提到的垃圾回收算法是基於go1.16之後的,讓我們直接進入正題吧。 1、什麼時候需要垃圾回收? Go 更喜歡在堆棧上分配內存,因此大多數內存分配最終都會在棧上。 這意味着 Go 每個 goroutine 都有一個堆棧,並且在可能的情況下,Go 會將變量分配給這個堆棧。 Go 編譯器試圖通

垃圾回收 , go

liuyuede - golang中經常會犯的一些錯誤

0.1、索引 https://waterflow.link/articles/1664080524986 1、未知的枚舉值 我們現在定義一個類型是unit32的Status,他可以作為枚舉類型,我們定義了3種狀態 type Status uint32 const ( StatusOpen Status = iota StatusClosed StatusUnknown )

goroutine , go

liuyuede - golang中的幾種併發模式

0.1、索引 https://blog.waterflow.link/articles/1663551951058 1、for- select模式 這種模式通常用在從多個通道讀取數據 package main import ( "fmt" "time" ) func main() { ch1, ch2 := make(chan int), make(chan int)

channel

liuyuede - golang的內存管理

0.1、索引 https://blog.waterflow.link/articles/1663406367769 1、內存管理 內存管理是管理計算機內存的過程,在主存和磁盤之間移動進程以提高系統的整體性能。內存管理的基本要求是提供方法來根據程序的請求動態的將部分內存分配給程序,並在不需要時釋放它以供重用。 程序通過將他們的內存劃分為執行特定任務的不同部分來管理他們。棧和堆就是這部分中的倆個,他們

內存管理 , 垃圾回收

liuyuede - goroutine&waitgroup下載文件

0.1、索引 https://blog.waterflow.link/articles/1663078266267 當我們下載一個大文件的時候,會因為下載時間太久而超時或者出錯。那麼我麼我們可以利用goroutine的特性併發分段的去請求下載資源。 1、Accept-Ranges 首先下載鏈接需要在響應中返回Accept-Ranges,並且它的值不為 “none”,那麼該服務器支持範圍請求。比如我

goroutine , 文件下載

liuyuede - goroutine調度

0.1、索引 https://blog.waterflow.link/articles/1662974432717 1、進程 一個進程包含可以由任何進程分配的公共資源。這些資源包括但不限於內存地址空間、文件句柄、設備和線程。 一個進程會包含下面一些屬性: Process ID:進程ID Process State:進程狀態 Process Priority:進程優先級 Program C

goroutine , 協程 , gmp

liuyuede - go-zero docker-compose 搭建課件服務(九):http統一返回和集成日誌服務

0、索引 go-zero docker-compose 搭建課件服務(九):http統一返回和集成日誌服務 0.1源碼地址 https://github.com/liuyuede123/go-zero-courseware 1、http統一返回 一般返回中會有code,message,data。當請求成功的時候code返回0或者200,message返回success,data為要獲取的數據;當請

kibana , go-zero , filebeat , elk

liuyuede - go channel原理及使用場景

轉載自:go channel原理及使用場景 源碼解析 type hchan struct { qcount uint // Channel 中的元素個數 dataqsiz uint // Channel 中的循環隊列的長度 buf unsafe.Pointer // Channel 的緩衝區數據指針 elemsi

channel , 協程 , go