Golang

后端 / 2023-03-20

写在前面大家都知道 Golang 是一门带GC的语言。 大多数情况下我们不需要担心内存溢出问题。但是。。。并不代表他完全不会内存溢出,我将之前一个服务进行重构(改了150多个文件) 当我进行灰度发布的时候,发现:居然内存溢出了!左边是重构前的版本,右边是灰度发布版本。 可以清楚看到内存飙升 CPU

后端 / 2023-03-04

前言为了让我们服务承载更大的并发量,通常我们使用线程来优化自己的代码。线程是cpu的最小调度单位 频繁创建线程 显然是 很大的开销。 于是乎协程诞生了,轻量级线程 可随时切换。 在go 中 协程的 开销非常小 2kb 相比于 java 的 2mb 要小很多。GMP调度模型示例如何开一个携程呢?go

后端 / 笔记 / 2023-02-23

写在前面在平时开发中,我们用到最多的 可能就是单例模式了。什么? 你问我单例模式是啥子??A: 你平时是怎么创建对象 的。B: 我还没对象呢,我怎么知道。A: 怎么可能,没对象你写什么Go?B: 我是写C的A: 写C的 gcc开个玩笑。 其实 单例模式说白就是我们的对象实例在整个程序生命周期中只存在

笔记 / 2022-01-15

问题在使用goland进行debug时,报错 无法进行调试# runtime/cgold: library not found for -lpthreadclang-13: error: linker command failed with exit code 1 (use -v to see in

后端 / 2021-09-09

项目介绍基于 golang 的一个定时消息推送系统。工作原理: CALLBACK流程:系统由 阻塞协程 触发器 任务管理器 三部分组成。实现流程: 务管理内有一个任务列表,通过注册任务,来向任务列表添加任务。然后启动一个阻塞协程去轮询任务列表,并且将当前时间通知到每一个任务。具体触发操作在任务函

笔记 / 2021-03-15

开启goModuleset GO111MODULE=on goproxy设置模块代理加速下载goProxy基本命令go mod init 生成gomod文件go mod download 下载依赖go mod tidy 整理依赖go mod graph 查看依赖go mode edit 编辑mod文

笔记 / 2021-03-15

channel和rangepackage mainimport "fmt"func main() {c:= make(chan int)go func() {for i:=0;i<3;i++{c<-i}// 当不需要再次发送数据后需要关闭channel,如果被关闭可能

笔记 / 2021-03-15

作用goroutine之间互相通信无缓冲channelmake(chan xxx)无缓冲的channel会阻塞,必须等待从channel取出才结束package mainimport "fmt"func main() {// 无缓冲channelc:=make(chan int)

笔记 / 2021-03-15

创建一个协程golang创建协程的关键字是gogo xxxx()package mainimport ("fmt""time")func task(id int) {for {fmt.Println("child task:",id)t

笔记 / 2021-03-15

json标签type UserInfo struct {Name string `json:"name"`Email string `json:"email"`Password string `json:"password"`

笔记 / 2021-03-15

用法type Box struct {Width int `info:"width" desc:"盒子宽度"`Height int `info:"height" desc:"盒子高度"`}通过反射获取package ma

笔记 / 2021-03-15

获取类型和值TypeOfValueOfpair<Type,Value>package mainimport ("fmt""reflect")func main() {var num int =10fmt.Println("type:&qu

笔记 / 2021-03-15

interface所有类型都实现了 interface{} 接口使用interface可以实现类型断言package mainimport "fmt"// 万能数据类型func Func(arg interface{}) {// 类型断言// xxx.(type)val,ok

笔记 / 2021-03-15

type给类型起别名 相当于 C的typedefpackage mainimport "fmt"func main() {// 给类型起别名// type 类型名 类型type INT intvar a INTfmt.Println(a)}定义结构体package mainimp

笔记 / 2021-03-15

基本使用make(map[keyType]valueType)package mainimport "fmt"func main() {// map[keyType]valueTypevar m map[string]stringm= make(map[string]stri

笔记 / 2021-03-14

用法defer 语句作用在当前函数执行完毕后,依次调用。(方法栈)示例package mainimport "fmt"func do() {defer fmt.Println("Hello:1")defer fmt.Println("Hello:2

笔记 / 2021-03-14

概述& 取地址* 取值swappackage mainimport "fmt"func swap(a *int,b*int){t:=*a*a = *b*b =t}func main() {a,b :=10,20fmt.Println("a=",a,&q

笔记 / 2021-03-14

_匿名导包导包时会触发包内 init方法_ import "xxx".将包内方法全部导入使用时不用加包名. import "xxx"别名给导入的包起别名packageName import "xxx"

笔记 / 2021-03-14

func 函数名(args...)返回值类型{}无参函数func foo(){fmt.Println("Hello,World!")}有参函数func foo1(a string, b int) int {fmt.Println("a=", a)fmt.Pri

笔记 / 2021-03-14

constgolang里const代表常量package mainimport "fmt"// 常量const STR = "Hello,World!"func main() {// 不可修改// STR="A"fmt.Println(ST