golang面试题:字符串转成byte数组,会发生内存拷贝吗?
问题 字符串转成byte数组,会发生内存拷贝吗? 怎么答 字符串转成切片,会产生拷贝。严格来说,只要是发生类型强转都会发生内存拷贝。那么问题来了。 频繁的内存拷贝操作听起来对性能不大友好。有没有什么办法可以在字符串转成切片的时候不用发生拷贝呢? 代码实现 package main import ( "fmt" "reflect" "unsafe" ) func main() { a :="aaa" ssh := *(*reflect.StringHeader)(unsafe.Pointer(&a...阅读全文
学习Flutter后对我的影响,阿里P6年薪40万+Flutter有这么大魅力?
前言 对于一个喜欢追求新技术的人来说,flutter 火爆了一年多我却没有尝鲜,实在是说不过去。我之所以对 flutter 不感冒,源于我对 flutter 所使用的 dart 语言的无知 —— 我觉得既然市面上有 typescript 这样可以满足 flutter 需要的语言,为何要用 dart 这样一个行将就木的语言呢?但最近有个朋友给我展示了他用 flutter 做的一个私人项目,惊艳到我,于是我开始学 flutter。 我学 flutter 的历程和其它语言有些不同 —— 比如学 rus...阅读全文
JSON 序列化中的转义和 Unicode 编码
本文比较完整地整理一下 JSON 编码中的转义,以及 JSON 对 Unicode 编码的处理。 其实这是我上一篇文章的姊妹篇。在研究 Unicode 颜文字的时候,由于我们的数据传输是通过 JSON 串来完成的,在对颜文字进行转码传输的过程中,也发现了一个问题。解决问题之后,便有了本总结文。 JSON 中的普通转义字符 个人认为,JSON 是目前针对程序员而言可读性(readability)最佳的数据传输格式之一,并且 JSON 完整地考虑到了数据传输中的转义,避免出现各种注入风险。当对 JS...阅读全文
Go 语言单元测试实践
原文链接:Go 语言单元测试实践 什么是软件测试? 软件测试是一个过程,该过程对软件(计算机程序)进行各种操作来发现软件错误。 为什么要进行软件测试? 进行软件测试可以帮助我们验证软件的各种功能正常,保证软件的正常工作从而提高软件质量。并且在实践中已被证明是颇有成效的。 测试驱动开发的由来: 一个从大量实践中得出的结论:人们发现在软件开发周期中,软件错误每进入到下一个阶段要修正它所付出的时间和人力会出人意表的翻上十倍。所以更早地进行软件测试可以更早地发现软件错误,从而大大减少后期修正的成本。后来...阅读全文
在 Go 语言项目中使用 Docker
原文链接:在 Go 语言项目中使用 Docker 容器(Container) 将程序及其所需的任何内容捆绑在一起,包括依赖项、工具和配置文件等等。这样使得程序不受环境的干扰,真正意义上做到开发环境和生成环境完全一致。 而 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。与传统虚拟机相比,Docker 也有许多优点,如:更高效的系统资源利用和更快速的启动时间。 在本文中,通过一个简单的 Go 语言项目,您将学习如何在 Go 语言项...阅读全文
在 Go 语言项目中使用 Travis CI
原文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 Travis CI logo 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub ...阅读全文
Go goroutine和channel详解
不要通过共享内存来通信,要通过通信来共享内存。 Go 支持两种方式的并发模型: communicating sequential processes(CSP) 和 shared memory multithreading,前者是 goroutine 和 channel 并发模型实现的基础,后者是传统的共享内存的方式,也就是多线程模型。 如何理解 CSP ?简单来说就是通过在不同的 goroutine 之间传递 value 来维护并发的下不同 goroutine 的状态,但是对变量的使用、修改要限...阅读全文
一行代码引起的协程泄露
前言 最终定位到的结果比较蠢,巨佬可以直接查看结果,本文只为记录寻找该bug时使用的方法而生。 本人平日维护一个公司运营平台的一个配置库,由于降级措施比较好,而且公司容器实例也比较多,所以在爆发错误的时候并未及时跟进。该问题应该从该服务出生开始就已经有了,一直没有爆发的原因应该是因为以前迭代得比较多,一周也差不多会发布四到五次,再加上平台在去年使用人数还是比较少的,后面逐渐成为公司一个中流砥柱的产品,被许多部门所使用,所以问题就爆发了。 第一次猜想 “这服务怎么协程突然暴涨了” 第一次协程暴涨的...阅读全文
Go 1.14 中接口的菱形组合
按照[部分重叠的接口提议](https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md),Go 1.14 现在允许嵌入有部分方法重叠的接口。本文是一篇解释这次修改的简要说明。 我们先来看 io 包中的三个关键接口:io.Reader、io.Writer 和 io.Closer: ```go package io type Reader interface { Re...阅读全文
Go:如何利用符号表
![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-hwo-to-take-symbol-table/cover.png) > Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French. ℹ️ *本文基于 Go 1.13。* 符号表是由编译...阅读全文
Go: Select 语句的执行顺序
![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-ordering-in-select-statements/20200429220520.png) > 本文基于 Go 1.14 `select` 允许在一个 goroutine 中管理多个 channel。但是,当所有 channel 同时就绪的时候,go 需要在其中选择一个执行。此外,go 还需要处理没有 channel 就绪的情况,我们...阅读全文
Go:GOMAXPROCS 和实时更新
![由 Renee French 创作的原始 Go Gopher 作品,为“ Go 的旅程”创作的插图。](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191210-Go-GOMAXPROCS-And-Live-Updates/1_Ct_BMGzFD4eKn6ztnR1iYA.png) ℹ️ 这篇文章基于 Go 1.13。 `GOMAXPROCS` 控制着同时执行代码的 OS 线程的最大数量。...阅读全文
用 Go 创建一个简易负载均衡器
![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191109-Lets-Create-a-Simple-Load-Balancer-With-Go/00.png) 负载均衡器在 Web 架构中扮演了很关键的角色。它们能在一组后端机器分配负载。这使得服务扩展性更好。因为配置了很多的后端机器,服务也因此能在某次请求失败后找到正常运行的服务器而变得高可用。 在使用了像 [NGINX](https...阅读全文
Go 中的模糊(Fuzz)测试
![由 Renee French 创作的原始 Go Gopher 作品,为“ Go 的旅程”创作的插图。](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191025-Go-Fuzz-Testing-in-Go/Illustration.png) 模糊测试(Fuzzing)是一项使用随机数据加载我们程序的测试技术。是[对常规测试的补充](https://docs.google.com/document...阅读全文
使用 Go 构建 GraphQL API
![](https://raw.githubusercontent.com/studygolang/gctt-images/master/building-an-api-with-graphql/cover.png) > 2020/5/16 更新:大家好,我刚刚更新了该项目以使用 Go module。不幸的是,[realize](https://github.com/oxequa/realize)很长时间没有更新并且无法正常工作。如果您想使用实时重新加载器,则还有其他选择,例如 [air]...阅读全文
如何将豆瓣观影记录实时同步至博客中
友情提示:此篇文章大约需要阅读27分钟32秒,不足之处请多指教,感谢你的阅读。???? 订阅本站 此文首发于 Debug客栈 https://www.debuginn.cn 事情的起因是这样的,前几日在看idealclover大佬的博客,不经意间看到了他的豆瓣观影记录,他博客中关于豆瓣观影记录是实时同步的,很好奇是如何实现的,经过查看,他是爬取的豆瓣观影界面来实现的,其实关于豆瓣观影记录,网上也有很多的教程,恰巧自己所学的 Go语言也可以做简单的爬虫实现其效果,于是开始上手造轮子了,PS:了解到...阅读全文
如何写好 Go 代码
我写了多年的 Go 微服务,并在写完两本关于 ([API Foundations in Go](https://leanpub.com/api-foundations) 和 [12 Factor Applications with Docker and Go](https://leanpub.com/12fa-docker-golang)) 主题的书之后,有了一些关于如何写好 Go 代码的想法 但首先,我想给阅读这篇文章的读者解释一点。好代码是主观的。你可能对于好代码这一点,有完全不同的想...阅读全文
Go:使用 pprof 收集样品数据
![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20200505-Go-Samples-Collection-with-pprof/00.png) > Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French. ℹ️ *本文基于 Go 1.13。...阅读全文