golang研究
逐步学习golang的基础知识、语言核心、工程管理和编程哲学
DreamCatcher
热爱编程,不仅仅是为了工作,而是爱好。
热爱生活,不仅仅是为了生存,而是责任。
热爱运动,不仅仅是为了健康,而是习惯。
沉迷太极拳,每天早上5点50起床,练四十分钟拳,四年内风雨无阻。
岁月流程,不再年轻,在这浮躁的社会和超强的生活压力下,希望在编程的道路上,能够坚持下去。
展开
-
golang http客户端实例
golang的net/http包已经提供了强大了网络操作函数,我们编写的web客户端示例如下:package mainimport ( "io/ioutil" "log" "net/http")func main() { //Get请求 res, err := http.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } //利用ioutil包读取百度原创 2021-06-16 16:46:46 · 546 阅读 · 0 评论 -
GO语言GPM模型
原文地址:https://studygolang.com/articles/29227原创 2021-05-30 23:32:41 · 329 阅读 · 0 评论 -
golang面试题:Sum of Squares
package mainimport "fmt"func SumOfSquares(c, quit chan int) { y := 1 for { select { case c <- y * y: y++ case <-quit: return } }}func main() { sumChan := make(chan int) quitChan := make(chan int) sum := 0 go func() ...原创 2021-05-24 23:29:11 · 156 阅读 · 0 评论 -
golang 字符串相等比较
fmt.Println("go"=="go")fmt.Println("GO"=="go")fmt.Println(strings.Compare("GO","go"))fmt.Println(strings.Compare("go","go"))fmt.Println(strings.EqualFold("GO","go"))输出结果truefalse-10true内建方法"==”,区分大小写,最简单的方法 Compare函数,区分大小写,比内建方法“==”的速度要快.原创 2021-05-23 20:32:17 · 1026 阅读 · 0 评论 -
golang find file
1、查找文本文件package mainimport ( "fmt" "log" "os" "path/filepath")func main() { var files []string root := "/your/file/path" err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if er原创 2021-05-22 23:41:15 · 592 阅读 · 0 评论 -
Golang Read Write Create and Delete text file
package mainimport ( "fmt" "io" "os")var path = "test.txt"func main() { createFile() writeFile() readFile() deleteFile()}func createFile() { // check if file exists var _, err = os.Stat(path) // create fi.原创 2021-05-22 23:13:37 · 153 阅读 · 2 评论 -
golang 生成JWTToken
package tokenimport ( "crypto/rsa" "time" "github.com/dgrijalva/jwt-go")// JWTTokenGen generates a JWT token.type JWTTokenGen struct { privateKey *rsa.PrivateKey issuer string nowFunc func() time.Time}// NewJWTTokenGen new JWT token.原创 2021-05-17 23:16:07 · 1116 阅读 · 0 评论 -
golang channel使用场景:广播通知
类似 pthread_cond_broadcast() 的功能。利用从已关闭的 channel 读取数据时总是非阻塞的特性,可以实现在一个协程中向其他多个协程广播某个事件发生的通知:package mainimport ( "fmt" "time")func main() { N := 10 exit := make(chan struct{}) done := make(chan struct{}, N) //start N worker原创 2021-05-11 23:11:05 · 773 阅读 · 1 评论 -
golang channel使用场景:条件变量(condition variable)--一对一通知
条件变量(condition variable)类型于 POSIX 接口中线程通知其他线程某个事件发生的条件变量,channel 的特性也可以用来当成协程之间同步的条件变量。因为 channel 只是用来通知,所以 channel 中具体的数据类型和值并不重要,这种场景一般用 struct{} 作为 channel 的类型。一对一通知类似 pthread_cond_signal() 的功能,用来在一个协程中通知另个某一个协程事件发生:package mainimport (原创 2021-05-11 23:03:06 · 385 阅读 · 1 评论 -
golang channel使用场景:futures / promises
golang 虽然没有直接提供futrue / promise模型的操作原语,但通过 goroutine 和 channel 可以实现类似的功能:package mainimport ( "io/ioutil" "log" "net/http")//http request promisefunc RequestFuture(url string) <-chan []byte { c := make(chan []byte, 1) go ..原创 2021-05-11 22:55:26 · 221 阅读 · 2 评论 -
用go语言控制Docker启动MongoDB并建立测试库
1、拉取MongoDB镜像(API方式)func imagePull(ctx context.Context, refStr string, c *client.Client) { pullReader, err := c.ImagePull(ctx, refStr, types.ImagePullOptions{ All: false, RegistryAuth: "", PrivilegeFunc: nil, }) if err != nil { p原创 2021-05-11 22:42:50 · 295 阅读 · 0 评论 -
GOB 的数据
原文在此:http://blog.golang.org/2011/03/gobs-of-data.html,来自 Golang 官方博客。Gob 是 Golang 的包中带的一个数据结构序列化的编/解码工具。在实际应用中,已经有不少的编解码工具/包/库了,为什么 Golang 还要新开发一个 Gob?又是一个重复的轮子?Gob 做了哪些工作?Gob 的优势是什么?本文做了一个较为全面的解释。—————-翻译分割线—————-Gob 的数据为了让某个数据结构能够在网络上传输或能够保存至文件,它转载 2021-05-10 21:59:38 · 334 阅读 · 0 评论 -
visual studio code golang代码无法自动补全提示设置
1、设置“useCodeSnippetsOnFunctionSuggest”,【User】和【Workspace】选项都要设置2、设置“Use Language Server”,【User】和【Workspace】选项都要设置原创 2021-04-18 11:50:05 · 2153 阅读 · 0 评论 -
《GO语言圣经》读书笔记 第二章 习题解答
练习 2.1: 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15°C,Kelvin绝对温度1K和摄氏度1°C的单位间隔是一样的package tempconvimport "fmt"type Celsius float64type Fahrenheit float64type Kelvin float64const ( AbsoluteZeroC Celsius = -273.15 FreezingC原创 2021-04-11 23:51:34 · 303 阅读 · 0 评论 -
《GO语言圣经》读书笔记 第二章 程序结构
1.命名规则一个名字必须以一个字母(unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的。Go语言中关键字25个,关键字不能用于自定义名字,只能在特定的语法结构中使用。break default func interface select case defer go map structchan else goto package switch原创 2021-04-09 15:45:35 · 118 阅读 · 0 评论 -
《GO语言圣经》读书笔记 第一章 习题解答
练习 1.1 : 修改echo程序,使其能够打印os.Args[0],即被执行命令本身的名字。package mainimport ( "fmt" "strings" "os")func main() { fmt.Println(strings.Join(os.Args[:]," "))}练习 1.2: 修改echo程序,使其打印每个参数的索引和值,每个一行。package mainimport ( "os" "fmt")原创 2021-04-09 15:35:46 · 562 阅读 · 1 评论 -
《GO语言圣经》读书笔记 第一章 入门
简洁的设计需要在工作开始的时候舍弃不必要的想法,并在软件的生命周期内严格区别好的改变和坏的改变; 一个好的改变可以在不破坏原有完整概念的前提下保持自适应,正如Fred Brooks所说的“概念完整性”。而一个坏的改变则不能达到这个效果,他们仅仅是通过肤浅的和简单的妥协来破坏原有设计的一致性。只有通过简洁的设计,才能让一个系统保持稳定、安全和持续的优化。 Go语言的面向对象机制跟一般语言不同,它没有类层次结构,甚至可以说没有类。 仅仅通过组合(而不是继承)简单的对象来构建复杂的对象。方法不仅可..原创 2021-04-08 23:24:08 · 122 阅读 · 0 评论 -
Golang的退出通知机制(close channel to broadcast)
1、退出通知机制(close channel to broadcast)读取已经关闭的通道不会引起阻塞,也不会导致panic,而是立即返回该通道存储类型的零值。 关闭select 监听的某个通道能使select立即感知此种通知,并能够进行相应的处理。2、实例//Generate 是一个随机数生成器func GenerateInt(done chan struct{}) chan int { ch := make(chan int) go func(){ Lab原创 2021-03-25 23:44:07 · 1037 阅读 · 0 评论 -
Golang中的 扇入(Fan in)和 扇出(Fan out)
1、扇入(Fan in)指的是将多路通道聚合到一条通道中处理。在golang中最简单的扇入就是使用select聚合多条通道服务;当生产者的速度很慢时,需要使用扇入技术聚合多个生产者满足消费者。2、扇出(Fan out)指的是将一条通道发散到多条通道中处理,在golang中的具体实现就是使用go关键字启动多个goroutine并发处理。当消费者的速度很慢时,需要使用扇出技术来并发处理请求。...原创 2021-03-24 23:29:20 · 3031 阅读 · 0 评论 -
解决 git clone OpenSSL SSL_read: Connection was reset 的问题
方法1 :先修改设置解除ssl验证。git config --global http.sslVerify "false"然后重新clone方法2:如果提示Filename too long,说明文件名或路径太长27797bbgit config --global core.longpaths true方法三:如果是上传push提示的话。可能是文件过大修改为500Mgit config http.postBuffer 524288000...原创 2021-03-20 22:57:13 · 4403 阅读 · 3 评论 -
解决github Git clone 慢的问题
第一步:打开 ipaddress.com 网站,输入以下两个域名:1、github.com2、github.global.ssl.fastly.net记录下相应的IP地址:第二步:更新本机的host文件第三步:清理DNSipconfig /flushdns第四步:测试,重新clone代码:成功!...原创 2021-03-20 22:34:46 · 355 阅读 · 0 评论 -
golang 基础
一、Tokentoken 是 构成源程序的基本不可再分割的单元。编译器编译源程序的第一步就是将源程序分割成一个个独立的token,这个过程叫做词法分析。Go语言中的token可以分为 标识符、操作符和分隔符、字面常量。那么Go语言中的token是怎么分割的呢?Go语言中的token分隔符有两类:一类是操作符,另一类是纯分隔符。操作符:其自身也是一个token 纯分隔符:本身不具备任何语法含义,只作为其他token的分割功能,包括:空格、制表符、换行符和回车符,多个相邻的空格或制表符会被编.原创 2021-03-17 23:09:42 · 277 阅读 · 0 评论 -
golang defer 关键知识点汇总
(1)defer 关键字,可以用来注册多个延迟调用,这些调用以先进后出(FILO)的顺序 在函数返回前被执行。常用于保证一些资源最终一定能够得到回收和释放。(2)关于defer的使用,主要注意以下几点:defer后面必须是函数或方法的调用,不能是语句,否则会报 expression in defer must be function call 的错误。defer函数的实参在注册时通过值拷贝传递。func main() { f() //输出 defer i= 0}func f原创 2021-03-13 23:27:53 · 224 阅读 · 0 评论 -
深入分析 http.RoundTripper
1、RoundTripper 接口// RoundTripper is an interface representing the ability to execute a// single HTTP transaction, obtaining the Response for a given Request.//// A RoundTripper must be safe for concurrent use by multiple// goroutines.type RoundTr原创 2021-02-28 23:57:44 · 2253 阅读 · 0 评论 -
[译] Go语言inline内联的策略与限制
1、什么是内联内联,就是将一个函数调用原地展开,替换成这个函数的实现。尽管这样做会增加编译后二进制文件的大小,但是却可以提高程序的性能。在 Go 中,函数调用有固定的开销;栈和抢占检查。硬件分支预测器改善了其中的一些功能,但就功能大小和时钟周期而言,这仍然是一个成本。内联是避免这些成本的经典优化方法。内联只对叶子函数有效,叶子函数是不调用其他函数的。这样做的理由是:如果你的函数做了很多工作,那么前序开销可以忽略不计。 另一方面,小函数为相对较少的有用工作付出固定的开销。这些是内联目原创 2021-02-24 17:24:25 · 2331 阅读 · 0 评论