
Go语言
sb___itfk
这个作者很懒,什么都没留下…
展开
-
Go中方法调用和接口实现
方法调用方法的接收者有两种:值接收者、指针接收者。这两种有什么区别呢?来看下面这段代码,最后结果是什么呢?编译错误?package mainimport "fmt"type Person struct { age int}func (p Person) howOld() int { return p.age}func (p *Person) growUp() { p.age += 1}func main() { // zhangsan 是值类型原创 2020-10-15 19:41:12 · 691 阅读 · 0 评论 -
Golang HTTP使用方式
前言关于Golang HTTP服务器实现原理,本文将通过下面两点来讲述,希望能帮到大家!如何创建一个HTTP服务器HTTP服务器实现原理如何创建一个HTTP服务器创建一个 HTTP服务器 的步骤:创建一个处理器(实际的业务逻辑)创建一个路由器并与处理器进行绑定/注册(这样才能根据URL匹配到对应的函数)启动HTTP服务器,并监听指定端口对于处理器的实现,其实只有两种,一是使用处理器函数实现,二是创建一个结构体,并实现ServeHTTP方法。而对于处理器与路由器的绑定方式,一种是通转载 2020-09-16 17:49:15 · 878 阅读 · 0 评论 -
Go中net/context和http.Handler
The approaches in this post are now obsolete thanks to Go 1.7, which adds the context package to the standard library and uses it in the *net/http http.Request type. The background info here may still be helpful, but I wrote a follow-up post that revisits.转载 2020-08-26 14:41:17 · 549 阅读 · 0 评论 -
【The Go Blog】Go Concurrency Patterns: Pipelines and cancellation
Sameer Ajmani13 March 2014IntroductionGo’s concurrency primitives make it easy to construct streaming data pipelines that make efficient use of I/O and multiple CPUs. This article presents examples of such pipelines, highlights subtleties that arise whe转载 2020-08-13 15:02:12 · 191 阅读 · 0 评论 -
理解Go Context机制
文章目录1 什么是Context2 context包3 context使用3.1 小结4 使用原则1 什么是Context最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究把玩一把。Context通常被译作上下文,它是一个比较抽象的概念。在公司技术讨论时也经常会提到上下文。一般理解转载 2020-08-10 15:46:47 · 241 阅读 · 0 评论 -
Goroutine Local Storage
背景最近在设计调用链与日志跟踪的API,发现相比于Java与C++,Go语言中没有原生的线程(协程)上下文,也不支持TLS(Thread Local Storage),更没有暴露API获取Goroutine的Id(后面简称GoId)。这导致无法像Java一样,把一些信息放在TLS上,用于来简化上层应用的API使用:不需要在调用栈的函数中通过传递参数来传递调用链与日志跟踪的一些上下文信息。在Java与C++中,TLS是一种机制,指存储在线程环境内的一个结构,用来存放该线程内独享的数据。进程内的线程不能访问转载 2020-08-07 15:16:05 · 424 阅读 · 0 评论 -
golang内幕之组合
type Parent struct { Name string Age int} func (p Parent) String() string { return fmt.Sprintf("Name:%s, Age:%d", p.Name, p.Age)} func StructCombine_1() { var p1 = Parent{} fmt.Println(p1)...转载 2020-04-24 15:47:44 · 163 阅读 · 0 评论 -
golang内幕之协程goroutine
func ForGoStatement_1() { go func() { fmt.Println("go-func-1") }()} func main() { ForGoStatement_1()}参考如下文章,会更清楚golang的协程:【golang内幕之程序启动流程】【https://blog.youkuaiyun.com/QQ1130141391/article/detai...转载 2020-04-24 15:13:30 · 157 阅读 · 0 评论 -
golang内幕之for range value
func ForRangeValue_1() { var mapAges map[string]int mapAges = make(map[string]int) mapAges["name-1"] = 1 mapAges["name-2"] = 2 mapAges["name-3"] = 3 var newAges map[string]*int newAges = make...转载 2020-04-24 12:13:19 · 209 阅读 · 0 评论 -
golang内幕之defer panic recover
问题:defer适用在什么场景?我们先看下下面一段拷贝文件的代码:func CopyFile_1(src, dst string) (wlen int64, err error) { sfd, err := os.Open(src) if err != nil { return 0, err } dfd, err := os.Create(dst) if err != nil...转载 2020-04-24 12:05:58 · 183 阅读 · 0 评论 -
Golang控制panic stack trace的深度
通过研究官方文档,发现可以通过设置环境变量GOTRACEBACK来控制Golang panic stack trace输出的信息的多少。说明如下:环境变量GOTRACEBACK可以控制Go进程由于不可恢复的panic或者未预料到的其他运行时异常而产生的错误堆栈输出的信息的多少。默认情况下(single),当产生错误的时候,只会打印出异常goroutine的异常堆栈,当不存在当前goroutin...转载 2018-09-14 20:24:05 · 1039 阅读 · 0 评论 -
Go语言并发与并行
首先,并行!=并发, 两者是不同的Go语言的goroutines、信道和死锁goroutineGo语言中有个概念叫做goroutine, 这类似我们熟知的线程,但是更轻。 以下的程序,我们串行地去执行两次loop函数:func loop() { for i := 0; i 10; i++ { fmt.Printf("%d ", i) }转载 2018-01-12 19:23:04 · 4025 阅读 · 0 评论