go
小猪快点跑
这个作者很懒,什么都没留下…
展开
-
go 二分查找、上下边界
1、标准库的二分查找func upperBound0(nums []int, target int) int { //upper := sort.SearchInts(nums, target) upper := sort.Search(len(nums), func(i int) bool { return nums[i] >= target }) return upper}func lowerBound0(nums []int, target int) int { //原创 2022-02-13 14:43:13 · 526 阅读 · 0 评论 -
go string和[]byte对比
1、性能对比string 是常量,修改值会重新分配内存地址做内存拷贝,本质是一个结构体,含指针、len;[]byte 是变量,修改值不触发内存地址变动,扩容时是2倍策略,因此减少了频繁的内存拷贝,本质是一个结构体,含指针、len、cap。2、特性string 可以进行比较,可以作为map的key[]byte 不能进行比较,不能作为map的key[]byte和string区别golang string和[]byte的对比...原创 2022-02-11 20:37:55 · 1091 阅读 · 0 评论 -
go 文件流转发
先读入内存再返回的方式,不仅耗时,而且会占用较大的内存; 直接通过文件流方式,读一点,返回给前端一点,这样的方式更高效。package testimport ( "fmt" "io" "io/ioutil" "log" "net/http" "os" "testing")func TestServer(t *testing.T) { http.HandleFunc("/download/remote/stream", downloadRemote...原创 2022-02-09 01:18:22 · 982 阅读 · 0 评论 -
gorutine 的9种状态
_Gidle = iota // 0_Gidle means this goroutine was just allocated and has not yet been initialized._Gidle 表示这个 goroutine 刚刚被分配,还没有被初始化。_Grunnable // 1_Grunnable means this goroutine is on a run queue. It is not currently executing user code. The sta原创 2022-01-15 23:49:40 · 890 阅读 · 0 评论 -
go GMP调度原理
一、golang调度器的由来1、单进程时代(单任务系统)顺序执行任务,同一时刻只有一个进程被执行;进程阻塞带来cpu资源的浪费。2、多进程多线程时代(多任务系统)任务并发执行,轮询调度,每个进程执行一个时间片。上下文切换的切换成本增大,cpu利用率降低。多线程随着同步竞争(锁、竞争资源冲突)开发设计变得越来越复杂。占用内存资源大,进程占用内存,虚拟内存4GB(32bit操作系统),线程约4MB。3、协程时代(内核线程+用户线程)通过语言级别的协程调度器,调度.原创 2022-01-12 00:19:08 · 4129 阅读 · 0 评论 -
go map
1、创建var mp map[string]string // nilmp := make(map[string]string) // empty map2、获取元素v := m[key],key不存在时,获取的是零值3、判断key是否存在v, ok := m[key]4、删除元素delete(map[key])原创 2022-01-02 17:48:04 · 88 阅读 · 0 评论 -
go slice
1、总结(1)切片容量不够时将自动2倍扩容(2)append 和 reslice 取片段,如果不引发扩容,就共用底层数组及cap(向后扩展),只是起始位置可能不一样,对新 slice 的操作会影响旧 slice。(3)append 和 reslice 取片段,如果引发扩容,新 slice 与原 slice 指向不同的底层数组。2、操作(1)初始化func initSlice() { var s1 []int //原创 2022-01-02 14:36:08 · 92 阅读 · 0 评论 -
go 错误处理
对于Go语言(golang)的错误设计,相信很多人已经体验过了,它是通过返回值的方式,来强迫调用者对错误进行处理,要么你忽略,要么你处理(处理也可以是继续返回给调用者),对于golang这种设计方式,我们会在代码中写大量的if判断,以便做出决定。func main() { conent,err:=ioutil.ReadFile("filepath") if err !=nil{ //错误处理 }else { fmt.Println(string(conent)) }}转载 2021-11-22 22:45:47 · 129 阅读 · 0 评论 -
go 发布依赖到 git
1、新建本地项目,创建 module使用 github 标准格式:github.com/用户名/仓库名go mod init github.com/xiaozhu/hello // 指定名称,创建 module2、安装依赖,编写代码go tide // 安装缺少的依赖,清理无用的依赖go get // 安装缺少的依赖go get "xxx@v1.0.0" ...原创 2021-11-20 16:47:12 · 526 阅读 · 0 评论 -
gorm 事物锁
1、先读再写func UpdateUser(db *gorm.DB, id int64) error { tx := db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Error; err != nil { return err } user :=原创 2021-11-11 09:37:40 · 1007 阅读 · 0 评论 -
hunter base64url 编码
Golang 编码样例 1 2 3 4 5 6 7 8 9 10 11 12 packagemain import( "encoding/base64" "fmt" ) func main() { search := `title="北京"` search = base64.UR...原创 2021-11-05 13:30:05 · 169 阅读 · 0 评论 -
go 命令
go mod tide (1)删除未使用的模块(2)添加已使用但 go.mod 中不存在的模块go mod tidy -v 打印移除的模块go help mod tidy 查看帮助go get原创 2021-11-02 17:40:25 · 384 阅读 · 0 评论 -
go 在linux配置go环境
# downloadmkdir -p /go/gopathcd /gowget https://dl.google.com/go/go1.15.2.linux-amd64.tar.gztar -zxf go1.15.2.linux-amd64.tar.gz# envvim /etc/profilesource /etc/profilego env# addexport GOROOT=/go/goexport GOPATH=/go/gopathexport PATH=$PATH:.原创 2021-10-07 12:03:25 · 164 阅读 · 0 评论 -
go 单元测试
1. 单元测试是什么单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类、超类、抽象类等中的方法。单元测试就是软件开发中对最小单位进行正确性检验的测试工作。不同地方对单元测试有的定义可能会有所不同,但有一些基本共识:单元测试是比较底层的,关注代码的局部而不是整体。 单元测试是开发人员在写代码时候写的。 单元测试需要比其他测试运行得快。2. 单元测试的意义提高代码质量。代码测试都是为了帮助开发人员发现问题从而解决问题转载 2021-07-12 12:56:02 · 163 阅读 · 0 评论 -
go 含有linux包在win编译问题
golang build 编译规则go build 的时候会选择性地编译以系统名结尾的文件(linux、darwin、windows、freebsd)。例如Linux(Unix)系统下编译只会选择 array_linux.go 文件,其它系统命名后缀文件全部忽略。在xxx.go文件的文件头上添加 // + build !windows (tags),可以选择在windows系统下面不编译// +build !windows...原创 2021-07-07 15:03:13 · 530 阅读 · 0 评论 -
go http 响应处理
1、响应处理函数package commonimport ( "encoding/json" "net/http" "io/ioutil")func ParseResponse(response *http.Response) (map[string]interface{}, error){ var result map[string]interface{} body,err := ioutil.ReadAll(response.Body) if err ==原创 2021-01-27 01:14:55 · 413 阅读 · 0 评论 -
go base64 编码和解码
go base64 编码和解码原创 2021-01-27 01:12:16 · 3602 阅读 · 0 评论 -
go json unmarshal 数据转换
进行 json 解析时,若以 interface{} 接收数据,则会按照下列规则进行解析:bool, for JSON booleansfloat64, for JSON numbers #这是由于JSON 里的数字默认都会转成 golang 的 float64 类型引起的string, for JSON strings[]interface{}, for JSON arraysmap[string]interface{}, for JSON objectsnil for JSON n...原创 2021-01-27 01:09:25 · 893 阅读 · 0 评论 -
go-sarama 配置
1、配置分区(1)随机选择分区config.Producer.Partitioner = sarama.NewRandomPartitioner // 随机分配分区 partition(2)轮换选择分区config.Producer.Partitioner = sarama.NewRoundRobinPartitioner // 轮换选择分区(3)hash选择分区 需要在消息中指定key值,可以使key值一样的消息进入相同的分区;如果未指定key值,则随机选择分区。...原创 2020-10-10 20:59:50 · 2771 阅读 · 2 评论 -
go 在 win10 上编译问题
1、win10上编译 go 报错,缺少gcc,安装 MinGW后报错# github.com/DataDog/zstdcc1.exe: sorry, unimplemented: 64-bit mode not compiled in重新下载编译好的MinGW,并配置 bin 目录到环境变量https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/m...原创 2020-10-10 09:49:42 · 485 阅读 · 0 评论 -
go-goland 环境配置
如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。然后运行如下命令,便可自动下载所需要的包,记录会写在go.mod下的go.sum文件中。GOPATH 是go的工作目录,主要包含三个目录:bin、src 和 pkg。在项目目录 或者 项目子模块下,运行下面命令,会产生一个go.mod文件。运行 go/bin 目录下的 go.exe,打开 cmd,执行。pkg:存放编译好的库文件, 主要是*.a文件。src:下主要存放go的源文件。bin:主要存放可执行文件。原创 2020-10-31 23:21:04 · 10126 阅读 · 0 评论 -
go 学习
1、switch 的case 自带 break 属性;2、可以并列初始化、赋值;3、闭包/匿名,多次调用,可以使局部变量保持静态属性;https://www.runoob.com/go/go-function-closures.html原创 2020-09-14 11:33:09 · 588 阅读 · 0 评论