深入学习golang

收录了 6 篇文章 · 2 人关注

  • Golang sync.WaitGroup的用法

    0x01 介绍经常会看到以下了代码: 12345678910111213package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)} 主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以在1秒之内运行完毕,t...

  • golang 几种字符串的连接方式

    最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现。 实现方法 1. 直接使用运算符 func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world } } golang 里面的字符串都是不可变的,每次运算...

  • Go 语言空结构体详解

    >你必须非常努力,才能看起来毫不费力! > >微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! ## 前言 在使用 Go 语言开发过程中,我们不免会定义结构体,但是我们定义的结构体都是有字段的,基本不会定义不包含字段的 空结构体。你可能会反过来问,没有字段的空结构体有什么用呢?那么我们这篇文章就来研究下空结构体吧! > 注:本文基于go 1.14.4 分析 ## 什么是空结构体 我们说不包含任何字段的结...

  • [Go] context.Context 解析

    ## 结论 context 的意义就是在函数之间的调用过程中维护一个统一的 “上下文”。在 “上下文” 中使用保存 “状态” 的方式共享信息。 所谓的超时取消等 “功能” 也属于 “状态” 的一种。 且 context.Context ”碰巧“ 拥有了并发安全性。所以才会被广泛地应用到各种函数和方法中。 可以从几个方面来说明这个问题。 ### 状态共享 用一个例子来说明状态共享的意义: fn1 创建了 int 类型的 "状态" `i` 并将其传递了下去。...

  • Golang交叉编译各个平台的二进制文件

    熟悉golang的人都知道,golang交叉编译很简单的,只要设置几个环境变量就可以了 # mac上编译linux和windows二进制 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build # linux上编译mac和windows二进制 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build CGO_ENABLED=...

  • 理解go中空结构体的应用和实现原理

    大家好,我是「Go学堂」的渔夫子,欢迎关注Go学堂,学习更多实战应用案例。 原文地址:https://mp.weixin.qq.com/s/h8vhy8IJKnA8aNbTlCoQtg 在实际项目或开源程序中,相信大家都见过将一个空结构体作为map值的场景: ``` // CanSkipFuncs will skip valid if RequiredFirst is true and the struct field's value is empty var CanSkipF...