@go

Stories List
@linker_home

Go源碼學習(基於1.24.1)-slice擴容機制-實踐才是真理

本文起於一次驗證slice擴容機制的測試,搜索引擎和AI給我們關於slice擴容機制的解釋大多是“低於1024翻倍,超過則乘1.25倍”(以下用“1024機制”代指),但是在我基於go1.24.1的結果卻完全不是這麼回事,難道是營銷號太多誤導我們了嗎?以下將結合源碼學習,實踐是檢驗真理的唯一標準。 一. 驗證我們隨手搜到的“1024機制” a := make([]int, 0, 512)

linker_home Avatar

@linker_home

Nickname Linker

@wangzhongyang_go

面試阿里,直呼太難了!

我發現一件事,今年的秋招比去年來的更早一些,像什麼小度、深信服、OPPO、科大訊飛、華夏銀行等等知名的公司都開始了,想問問要找工作的各位:你們準備好了嗎? 這真不是危言聳聽,需要參加今年秋招的小夥伴真的要抓緊時間準備了,八股、算法、項目都要按部就班地往前推進了,畢竟時間不等人,我在星球裏還遇到過秋招錯過、春招也錯過的球友,後續真的是十分被動。 今天分享一位粉絲投稿的阿里面經,這是他第一次約到阿里的

wangzhongyang_go Avatar

@wangzhongyang_go

Nickname 王中陽講編程

@tangpanqing

萬萬沒想到,go也能使用對象來操作數據庫了,網友直呼:健壯性有保證了

Hi,各位go的小夥伴,大家新年好。 之前給大家介紹的Aorm庫,都用上了嗎?這可是迄今為止我見過的,go領域最好用的數據庫操作庫了。 去年的時候(實際上是半個月前),我發了一篇文章來介紹Aorm的鏈式操作,展示了它的易用性。 《萬萬沒想到,go的數據庫操作,也能像php一樣溜了》 不少朋友加我,表示了支持,並且提出了殷切希望。其中有一點,希望可以增加使用對象來操作數據庫。 經過我半個月的研究與努

tangpanqing Avatar

@tangpanqing

Nickname 湯哥搞開發

@sayornottt

Ent.中文文檔(持續更新~)

快速開始 簡介 ent 是一個簡單而強大的Go語言實體框架,它使得構建和維護大型數據模型的應用程序變得容易,同時ent遵循以下原則: 輕鬆地將數據庫模式建模為圖形結構 將模式定義為可編程的Go語言代碼 基於代碼生成的靜態類型 易於編寫的數據庫查詢和圖遍歷 簡單地擴展和使用Go模版進行自定義 設置Go環境 如果你的項目目錄在GOPATH之外,或者你不熟悉GOPATH,可通過如下的命令進

sayornottt Avatar

@sayornottt

Nickname sayornottt

@biocrosscoder

六邊形架構最佳實踐探索

在工作中,我接觸到的產品均採用了微服務架構,後端項目開發普遍採用了六邊形架構:六邊形架構提供了一套良好的設計思想,但它缺乏對項目代碼組織細節的指導;同時,項目中並沒有使用專門的微服務框架,而是普遍使用Gin框架,這使得代碼組織過於靈活,沒有提供充分的編碼約束,以致於在過去的業務需求實現中,後端服務的項目代碼組織充斥着各種各樣的問題;為了解決這些問題、提高開發效率、保障工程質量,基於工作一年的實踐和

biocrosscoder Avatar

@biocrosscoder

Nickname BioCrossCoder

@amc

騰訊 tRPC-Go 教學——(1)搭建服務

2023 年底騰訊統一的 RPC 框架 tRPC 正式開源。遍觀全網,似乎大部份是對 tRPC 概念上的宣傳、架構上的設計,而如何開發、如何部署的文章鳳毛麟角。於是筆者小試牛刀撰此文,或許會成為一系列,希望能拋磚引玉。 系列文章 騰訊 tRPC-Go 教學——(1)搭建服務 騰訊 tRPC-Go 教學——(2)trpc HTTP 能力 騰訊 tRPC-Go 教學——(3)微服務間調用 騰

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(2)trpc HTTP 能力

上一篇文章 中我們快速搭建了一個 http API 服務,並且我們可以看到,對外提供了 URL query 和 application/json 兩種服務模式。那麼實際上,我們到底實現了什麼、並且能夠做些什麼?讀者可能還是沒有直觀的感受,因此必要先來簡單 review 一下。就讓我們先放下敲代碼的小手,一起看看剛剛寫出來的都是些什麼玩意兒吧。 系列文章 騰訊 tRPC-Go 教學——(1)搭建

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(3)微服務間調用

前兩篇文章(1、2),我構建了一個簡單的 HTTP 服務。 HTTP 服務是前後端分離架構中,後端最靠近前端的業務服務。不過純後台 RPC 之間,出於效率、性能、韻味等等考慮,HTTP 不是我們的首選。本文我們就來看看騰訊是怎麼使用 tRPG-Go 構建後台微服務集羣的。 本文我們將開始涉及 tRPC 的核心關鍵點之一: tRPC 服務之間如何互相調用 系列文章 騰訊 tRPC-Go 教

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(4)tRPC 組件生態和使用

之前我花了三篇文章來介紹 tRPC 怎麼用。而 tRPC 給開發者帶來的便利, 在整整三篇文章中,我也只是介紹了它可以方便服務在 HTTP、trpc、grpc 三種協議之間靈活切換。誠然, tRPC 作為能夠統一騰訊內開發框架的一個生態級產品,它的能力顯然不止這些。這一篇文章,咱們來一起初窺 tRPC 的周邊生態有哪些, 以及其中的第三方組件使用方法。 系列文章 騰訊 tRPC-Go 教學—

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(5)filter、context 和日誌組件

本文咱們來介紹一下在 tRPC 中的 filter 機制、context 用法,以及在相關機制上可以實現的 tracing log 能力。 説實話,這一部份是我個人最不喜歡的 tRPC 的實現模式,不過這不妨礙咱們使用它——只要把它封裝成讓人更為舒服的模式也未嘗不可。 系列文章 騰訊 tRPC-Go 教學——(1)搭建服務 騰訊 tRPC-Go 教學——(2)trpc HTTP 能力 騰

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(6)服務發現

距離上一篇文章居然已經過去兩個月了,畢竟苦逼打工人忙得一點空都沒有…… 本文我們來講一講對於微服務架構來説,最重要的一個點了:服務發現及其對應的名字服務功能。 系列文章 騰訊 tRPC-Go 教學——(1)搭建服務 騰訊 tRPC-Go 教學——(2)trpc HTTP 能力 騰訊 tRPC-Go 教學——(3)微服務間調用 騰訊 tRPC-Go 教學——(4)tRPC 組件生態和使用

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(7)服務配置和指標上報

系列文章 騰訊 tRPC-Go 教學——(1)搭建服務 騰訊 tRPC-Go 教學——(2)trpc HTTP 能力 騰訊 tRPC-Go 教學——(3)微服務間調用 騰訊 tRPC-Go 教學——(4)tRPC 組件生態和使用 騰訊 tRPC-Go 教學——(5)filter、context 和日誌組件 騰訊 tRPC-Go 教學——(6)服務發現 騰訊 tRPC-Go 教學——

amc Avatar

@amc

Nickname amc

@amc

騰訊 tRPC-Go 教學——(8)通過泛 HTTP 能力實現和觀測 MCP 服務

最近 MCP 大火,其實 tRPC 也可以提供泛 HTTP 接入的能力。內網其實已經對 mcp-go 進行了封裝並支持,但是相關代碼還沒有同步到開源版上。 不過實際上,在 tRPC 框架也是可以接入各種泛 HTTP 能力的。本文就以 mcp-go 和 tRPC 結合作為引子,也介紹一下在 Cursor 等 AI 生產力工具中如何開發和使用 MCP 能力吧。 系列文章 騰訊 tRPC-Go 教學

amc Avatar

@amc

Nickname amc

@liberhome

Golang 實現繼承

Golang的繼承可以通過結構體裏面包含匿名結構體實現,具體,比如iPhone這個結構體要繼承法phone這個結構體可以這樣寫: package main import "fmt" type phone struct { design_place string production_place string } type iphone struct { bra

liberhome Avatar

@liberhome

Nickname LiberHome

@youngcoding

反轉鏈表的兩種解法

反轉鏈表可以用兩種方法來實現,一種是常見的迭代法,還有一種方法就是遞歸,下面來分析一下具體是怎麼實現的。 迭代法 思路: 初始化一個變量來存儲前驅節點pre,從頭節點開始遍歷鏈表,每遍歷一個節點,就將該節點的後驅節點指向pre,完成了反轉,然後更新pre的值為當前節點以便下一個節點的使用,遍歷完以後以前的尾節點就是新的頭節點。 func (head *Node) reverse() *Node {

youngcoding Avatar

@youngcoding

Nickname 爆裂Gopher

@wilburxu

Go Exec 殭屍與孤兒進程

原文地址:Go Exec 殭屍與孤兒進程 最近,使用 golang 去管理本地應用的生命週期,期間有幾個有趣的點,今天就一起看下。 場景一 我們來看看下面兩個腳本會產生什麼問題: 創建兩個 shell 腳本 start.sh #!/bin/sh sh sub.sh sub.sh #!/bin/sh n=0 while [ $n -le 100 ] do echo $n let

wilburxu Avatar

@wilburxu

Nickname WilburXu

@zaoying

2023再談RESTful 和 GraphQL

前段時間組內搞代碼檢視,經常能看到一些 “掛着 RESTful 羊頭,賣的卻是 GraphQL 狗肉”的 API 設計。 舉個例子,假如後台有兩種資源用户 User 和 羣組 Group ,按照RESTful的規範,他們設計以下API端點: # 獲取用户列表 GET /users # 獲取指定用户 GET /user/{id} # 創建用户 POST /users # 修改用户 PUT /u

zaoying Avatar

@zaoying

Nickname zaoying

@piano

如何用Go快速實現規則引擎

一、出師之名 提到規則引擎,大部分人都會先想到DSL(Domain Specific Language),進而聯想令人生畏的編譯原理、遞歸下降、LL或LR。但規則引擎有大有小,它們在不同場景的存在不一樣,並不一定都要這麼複雜。 比如在一個小型支付系統的簡單風控場景裏,產品同學想設置一些規則避免用户的銀行卡被盜刷或者商户被薅羊毛: 24小時內支付總金額超10w的用户 1小時使用信用卡支付金額超

piano Avatar

@piano

Nickname Kyrie

@hunter_58d48c41761b8

Golang基礎筆記九之方法與接口

本文首發於公眾號:Hunter後端 原文鏈接:Golang基礎筆記九之方法與接口 本篇筆記介紹 Golang 裏方法和接口,以下是本篇筆記目錄: 方法 接口 用結構體實現類的功能 1、方法 首先介紹一下方法。 方法是與特定類型關聯的函數,我們在實現一個函數前,綁定一個類型,就實現了這個類型的方法。 比如我們想實現一個結構體的方法,可以如下操作: type Person struc

hunter_58d48c41761b8 Avatar

@hunter_58d48c41761b8

Nickname Hunter

@kubeexplorer

ArgoWorkflow教程(四)---Workflow & 日誌歸檔

上一篇我們分析了argo-workflow 中的 artifact,包括 artifact-repository 配置以及 Workflow 中如何使用 artifact。本篇主要分析流水線 GC 以及歸檔,防止無限佔用集羣中 etcd 的空間。 !--more-- 1. 概述 因為 ArgoWorkflow 是用 CRD 方式實現的,不需要外部存儲服務也可以正常運行: 運行記錄使用 Wor

kubeexplorer Avatar

@kubeexplorer

Nickname 探索雲原生

@kubeexplorer

ArgoWorkflow教程(六)---無縫實現步驟間參數傳遞

之前我們分析了,Workflow、WorkflowTemplate 、template 3 者之間如何傳遞參數。 本文主要分析同一個 Workflow 中的不同 step 之間實現參數傳遞,比如將上一個步驟的輸出作為下一個步驟的結果進行使用(而非以文件方式傳遞)。 !--more-- 1. 概述 然後就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者

kubeexplorer Avatar

@kubeexplorer

Nickname 探索雲原生

@kubeexplorer

ArgoWorkflow教程(八)---基於 LifecycleHook 實現流水線通知提醒

本篇介紹一下 ArgoWorkflow 中的 ExitHandler 和 LifecycleHook 功能,可以根據流水線每一步的不同狀態,執行不同操作,一般用於發送通知。 !--more-- 1. 概述 本篇介紹一下 ArgoWorkflow 中的 ExitHandler 和 LifecycleHook 功能,可以根據流水線每一步的不同狀態,執行不同操作,一般用於發送通知。 比如當某個步驟,或

kubeexplorer Avatar

@kubeexplorer

Nickname 探索雲原生

@hunterxiong

Golang基礎筆記十六之反射

本文首發於公眾號:Hunter後端 原文鏈接:Golang基礎筆記十六之反射 反射可以用於程序在運行時檢查、修改自身類型和值,主要通過 reflect 包實現。 首先,我們提出一個需求,要打印出一個結構體 struct 的各個字段及其對應的標籤數據,按照當前的筆記內容是無法解決該問題的,但是我們可以使用反射操作來完成。 以下是本篇筆記目錄: 變量的類型和值 修改變量的值 遍歷結構體

hunterxiong Avatar

@hunterxiong

Nickname XHunter

@apocelipes

atomic不是免費午餐

很多初級甚至中級開發會濫用atomic,因為在他們的世界觀裏atomic比mutex輕量,性能總是優於鎖的。 這話不能算錯,但有個很重要的前提,那就是原子操作競爭不激烈的時候。 “競爭激烈”是指什麼呢,指的是有很多線程在同一個資源上大量執行原子操作的情況。 落在這種情況下原子操作反而會成為性能拖油瓶。我們來看一個經典的原子計數器: func AddAtomic() uint64 { var co

apocelipes Avatar

@apocelipes

Nickname apocelipes