go數組的好處-編程思維

  大家好,我是煎魚。 前段時間有播放一條快訊,就是 Go1.17 會正式支持切片(Slice)轉換到數據(Array),不再需要用以前那種騷辦法了,安全了許多。 但是也有同學提出了新的疑惑,在 Go 語言中,數組其實是用的相對較少的,甚至會有同學認為在 Go 裡可以把數組給去掉。 數組相較切片到底有什麼優勢,我們又應該在什麼場景下使用呢? 這是一個我們需要深究的問題,因此今天就跟大家一起來

Go 分布式令牌桶限流 + 兜底策略-編程思維

上篇文章提到固定時間窗口限流無法處理突然請求洪峰情況,本文講述的令牌桶線路算法則可以比較好的處理此場景。 工作原理 單位時間按照一定速率勻速的生産 token 放入桶内,直到達到桶容量上限。 處理請求,每次嘗試獲取一個或多個令牌,如果拿到則處理請求,失敗則拒絕請求。 優缺點 優點 可以有效處理瞬間的突發流量,桶内存量 token 即可作為流量緩沖區平滑處理突發流量。 缺點 實現較為複雜

【golang學習記錄】環境搭建-編程思維

【golang學習記錄】環境搭建 一. 概述 本文是【golang學習記錄】系列文章的第一篇,安裝Go語言及搭建Go語言開發環境,接下來将詳細記錄自己學習 go 語言的過程,一方面是為了鞏固自己學到的内容,另一方面希望對有同樣需求的小夥伴提供一些幫助。 二. 下載并安裝 Go Go官網下載地址(在國内無法訪問):https://golang.org/dl/ Go官方鏡像站(推薦):https:/

Go 中實現用戶的每日限額(比如一天隻能領三次福利)-編程思維

如果你寫一個 bug 管理系統,用了這個 PeriodLimit 你就可以限制每個測試人員每天隻能給你提一個 bug。工作是不是就輕松很多了?😛 如今微服務架構大行其道本質原因是因為要降低系統的整體複雜度,将系統風險均攤到子系統從而最大化保證系統的穩定性,通過領域劃分拆成不同的子系統後各個子系統能獨立的開發、測試、發布,研發節奏和效率能明顯提高。 但同時也帶來了問題,比如:調用鍊路過長,部署

GoLang設計模式19 - 橋接模式-編程思維

橋接模式是一種結構型設計模式,通過橋接模式可以将抽象部分和它的實現部分分離。這看着有點兒奇怪,接下來會作詳細說明。 橋接模式建議将一個較大的類拆分成兩中角色。 抽象角色 - 抽象角色是一個接口。它的子類也被稱為修正抽象角色。抽象角色包含一個對實現角色的引用。 實現角色 - 實現角色也是一個接口。實現角色的子類被稱為具化實現角色。 這樣分層的優勢在于在調用抽象角色的時候不需要考慮實現層的内容。 舉

幾段 Go 并發代碼-編程思維

幾段 Go 并發代碼 可以使用 go run --race main.go 來驗證代碼中是否存在并發問題 for range for i,v := range slice { // ... // go func() ... } 在 for range 中,i, v 這兩個變量僅僅被初始化一次,在之後在每輪 for 循環中都會修改 i 和 v 的值,所以如果在 for 循環裡面開啟一個

Go的WaitGroup源碼分析-編程思維

WaitGroup 是開發中經常用到的并發控制手段,其源代碼在 src/sync/waitgroup.go 文件中,定義了 1 個結構體和 4 個方法: WaitGroup{}:結構體。 state():内部方法,在 Add()、Wait() 中調用。 Add():添加任務數。 Done():完成任務,其實就是 Add(-1)。 Wait():阻塞等待所有任務的完成。 以下源代碼基于 Go 1.

Golang 簡潔架構實戰-編程思維

文中項目代碼位置:https://github.com/devYun/go-clean-architecture 轉載請聲明出處哦~,本篇文章發布于luozhiyun的博客:https://www.luozhiyun.com/archives/640 由于golang不像java一樣有一個統一的編碼模式,所以我們和其他團隊一樣,采用了 Go 面向包的設計和架構分層這篇文章介紹的一些理論,然後

關于gorm多表聯合查詢(left join)-編程思維

Golang很流行,但是有些方面資料很少而且不詳實,譬如:gorm的聯合查詢,當然,也不推薦複雜語句使用orm模型。 現将自己總結的寫法和遇到的坑記錄如下: Golang要求使用“駝峰命名法”,比如systemId,因為我以前用的是Python,使用Django的orm序列化後返回的參數和數據庫表字段一緻,基于這個不適合Go的思路,我将表字段也建成了systemId,和struct映射參數相同。

go循環遍曆小坑-編程思維

for語句 for 賦值表達式; 關系表達式或邏輯表達式; 賦值表達式 { } for i := 0; i < 10; i++ { } for 關系表達式或邏輯表達式 { } n := 10 for n > 0 { n-- } for { } for { fmt.Println("hello world") } // 等價于 // for true { // fmt.

如何判斷一個 interface{} 的值是否為 nil-編程思維

在開始之前,先考你一個非常 Go 味的經典問題:如何判斷一個 interface{} 的值是否為 nil ? 這也是面試有可能會被問到的一個問題,這個問題很 “迷”,平時沒有特别留心的朋友,很容易在這邊裁了。 我相信很多人會下意識的回答,直接 v == nil 進行判斷不就好了嗎? 很久之前,我也是那麼想的,可寫了個 demo 後,才發現事情沒那麼簡單。 請看下面這段代碼,可以先猜測一下輸出的結

Go 讀文件的 10 種方法-編程思維

Go 中對文件内容讀寫的方法,非常地多,其中大多數是基于 syscall 或者  os 庫的高級封裝,不同的庫,適用的場景又不太一樣,為免新手在這塊上裁跟頭,我花了點時間把這些内容梳理了下。 這篇是上篇,先介紹讀取文件的 10 種方法,過兩天再介紹寫入文件的 # 1. 整個文件讀取入内存 直接将數據直接讀取入内存,是效率最高的一種方式,但此種方式,僅適用于小文件,對于大文件,則不適合,因為比較浪

go讀取文件-編程思維

文件讀取是所有編程語言中最常見的操作之一。本教程我們會學習如何使用 Go 讀取文件。 本教程分為如下小節。 将整個文件讀取到内存 使用絕對文件路徑 使用命令行标記來傳遞文件路徑 将文件綁定在二進制文件中 分塊讀取文件 逐行讀取文件 将整個文件讀取到内存 将整個文件讀取到内存是最基本的文件操作之一。這需要使用 ioutil 包中的 ReadFile 函數。 讓我們在 Go 程序所在的目錄中,讀取

go反射-編程思維

反射是 Go 語言的高級主題之一。我會盡可能讓它變得簡單易懂。 本教程分為如下小節。 什麼是反射? 為何需要檢查變量,确定變量的類型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 方法 完整的程序 我們應該使用反射嗎? 讓我們來逐個讨論這些章節。 什麼是

go寫入文件-編程思維

https://studygolang.com/articles/19475 在這一章我們将學習如何使用 Go 語言将數據寫到文件裡面。并且還要學習如何同步的寫到文件裡面。 這章教程包括如下幾個部分: 将字符串寫入文件 将字節寫入文件 将數據一行一行的寫入文件 追加到文件裡 并發寫文件 請在本地運行所有本教程的程序,因為 playground 對文件的操作支持的并不好。 将字符串寫入文件 最常見