随笔分类 -  Go

摘要:golang 闭包 实例引入 先来看一段代码,下面的addr函数的返回值是另一个函数,被返回的这个函数中,又对addr函数中的变量进行了累加,然后返回。 在main函数中,使用变量pos接收addr()函数返回的函数对象,然后在for循环中调用5次。 package main import "fmt 阅读全文
posted @ 2021-11-16 20:40 Dawnlight-_- 阅读(680) 评论(0) 推荐(0)
摘要:golang函数调用栈 如果在一个函数中调用另一个函数,编译器就会对应生成一条call指令,程序执行到这条指令时,就会跳转到被调用函数入口处开始执行,而每个函数的最后都有一条ret指令,负责在函数结束后跳回到调用处,继续执行。 函数栈帧 函数执行时需要有足够的内存空间,供它存放局部变量、参数等数据, 阅读全文
posted @ 2021-11-15 22:42 Dawnlight-_- 阅读(361) 评论(0) 推荐(0)
摘要:golang内存对齐 什么是内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址,并占用合适的长度,这就是内存对齐。 每种类型的对齐值就是它的对齐边界,内存对齐要求数据存储地址以及占用的字节数都要是它的对齐边界的倍数。所以下述的int32要错开两个字节,从4开始存,却不能紧接 阅读全文
posted @ 2021-11-15 20:38 Dawnlight-_- 阅读(261) 评论(0) 推荐(0)
摘要:slice内存模型 我的go源码版本是:go1.17.2 slice的源码在Go_SDK\go1.17.2\src\runtime\slice.go中。 和map.go在同一个目录下。 首先我们来看一下slice的结构: type slice struct { array unsafe.Pointe 阅读全文
posted @ 2021-11-11 16:29 Dawnlight-_- 阅读(149) 评论(0) 推荐(0)
摘要:"..." 其实是golang的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 用法一:函数的不定参数 package main import "fmt" func test1(args ...string) 阅读全文
posted @ 2021-11-11 14:38 Dawnlight-_- 阅读(99) 评论(0) 推荐(0)
摘要:总体来说golang的map是hashmap,是使用数组+链表的形式实现的,使用拉链法消除hash冲突。 map的内存模型 我的go源码版本是:go1.17.2 map的源码在Go_SDK\go1.17.2\src\runtime\map.go中。 首先我们来看一下map最重要的两个结构: hmap 阅读全文
posted @ 2021-11-10 23:04 Dawnlight-_- 阅读(943) 评论(0) 推荐(0)
摘要:package mainimport ( "fmt" "sync" "time")var ( x,y int wg sync.Wai... 阅读全文
posted @ 2021-11-10 00:05 Dawnlight-_- 阅读(76) 评论(0) 推荐(0)
摘要:context上下文 1. context简介 Go1.7加入了一个新的标准库context,它定义了Context类型,专门用来简化对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。 对服务器传入的请求应该创建上下文, 阅读全文
posted @ 2021-11-09 22:47 Dawnlight-_- 阅读(179) 评论(0) 推荐(0)
摘要:golang逃逸分析 1.栈和堆 在golang中,应用程序的内存载体,可以简单的分为栈和堆。 栈的内存是由编译器自动进行分配和释放,栈区往往存储着函数参数、局部变量和调用函数帧,它们随着函数的创建而分配,函数的退出而销毁。 与栈不同的是,应用程序在运行时只会存在一个堆。狭隘地说,内存管理只是针对堆 阅读全文
posted @ 2021-11-08 14:55 Dawnlight-_- 阅读(342) 评论(0) 推荐(0)
摘要:Gin框架笔记 1. GO标准库之http/template 在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。 我们这里说的模板可以理解为事先定义好的HTML文档文件,模板渲染的作用机制可以 阅读全文
posted @ 2021-11-04 20:35 Dawnlight-_- 阅读(154) 评论(0) 推荐(0)
摘要:golang网络编程 1.TCP编程 TCP服务端程序的处理流程: 1.监听端口 2.接收客户端请求建立链接 3.创建goroutine处理链接。 使用Go语言的net包实现的TCP服务端代码如下: 服务端 package main import ( "bufio" "fmt" "net" ) fu 阅读全文
posted @ 2021-10-28 22:55 Dawnlight-_- 阅读(141) 评论(0) 推荐(0)
摘要:运行环境: win10,goland2021.2 背景: 两个go文件都在main包下,在main文件中直接右键运行会报 “comm... 阅读全文
posted @ 2021-10-27 16:23 Dawnlight-_- 阅读(1567) 评论(0) 推荐(0)
摘要:Golang并发 1.runtime包 1.1 runtime.Gosched() 让出CPU时间片,重新等待安排任务。 调用前: package main import ( "fmt" ) func main() { go func() { for i := 0; i < 2; i++ { fmt 阅读全文
posted @ 2021-10-27 12:12 Dawnlight-_- 阅读(60) 评论(0) 推荐(0)
摘要:HP团队出的tail库,常用于日志收集 地址: https://github.com/hpcloud/tail 日常使用时,直接在vscode或者goland拉取即可。 示例代码: package main import ( "fmt" "github.com/hpcloud/tail" "time 阅读全文
posted @ 2021-10-25 14:45 Dawnlight-_- 阅读(178) 评论(0) 推荐(0)