深入理解 Go panic and recover

深入理解 Go panic and recover 作为一个 gophper,我相信你对于 panic 和 recover 肯定不陌生,但是你有没有想过。当我们执行了这两条语句之后。底层到底发生了什么事呢?前几天和同事刚好聊到相关的话题,发现其实大家对这块理解还是比较模糊的。希望这篇文章能够从更深入的角度告诉你为什么,它到底做了什么事? 思考 一、为什么会中止运行 func main() { panic("EDDYCJY.") } 输出结果: $ go run main.go panic: ED...阅读全文

GITHUB 2019-06-16 00:39:31 EDDYCJY

Golang语言值传递

前言:打铁要趁热,因为以前学过java和c语言 知识点预览 //1.值传递与引用传递 //2.defer关键字 //3.作用域 //4.错误处理 //值传递有那些:基本数据类型(int,float,type,array,struct等) //引用传递有那些:复合数据类型(指针,切片,接口等) //1.值传递 func sum(n1,n2 int){ n1++ n2++ } func main(){ sum(10,20)//这样做是引用传递函数内部不会修改它的值 } //2.引用传递 func s...阅读全文

简书 2019.06.15 22:17 江世文

【Golang基础】 Android工程师学Golang(1)

Golang函数 注:是用的测试方法写的例子。 Golang所有都是传值,不是传引用 为什么会出现,函数内部的修改,会影响外部的变量的情况,例如切片背后对应的是一个数组,这个数据结构包含指针,在赋值的过程中结构被复制了,结构被改变所以外部也被改变了,例如:slice,map,channel. 函数可以有多个返回值:和Java不一样,Golang可以有多个返回值 package fn__test import ( "math/rand" "testing" "time" ) func return...阅读全文

简书 2019.06.15 23:56 不说话的唐僧

Golang 并发问题(四)之单核上的并发问题

写在前面 Golang 在单核上的“并发”问题 gotour上的乌龙案例 单个物理核心上的“并发” runtime.GOMAXPROCS(1) 方法 小结 参考 写在前面 过去 Web 开发的工作比较少涉及到并发的问题,每个用户请求在独立的线程里面进行,偶尔涉及到异步任务但是线程间数据同步模型非常简单,因此并未深入探究过并发这一块。最近在写游戏相关的服务端代码时发现数据的并发同步场景非常多,因此花了一点时间来探索和总结。这是一个系列文章,本文为第四篇。 本文简单介绍 Golang 中配置可用 C...阅读全文

golang interface 理解探究

golang interface 1.interface 由来 在很多oop语言中都有接口类型,java中的接口以及c++中的虚基类都是接口的实现。golang中的接口概念类似,但是它有自己的特点: 非侵入式 ducktype 泛型 隐藏具体实现 非侵入式     比如 Java 的 interface 实现需要显示的声明: public class MyWriter implements io.Writer {}     意味着对于接口的实现都需要显示的声明,在代码编写方面有依赖限制,同时需要...阅读全文

Segmentfault 2019-06-17 20:32:35 Zero

Golang 网络编程实现的高并发聊天程序

献上代码,聊表敬意 github.com/ItsWewin/go… 目前功能较少,欢迎 issue 中提你想要的功能,issue 中要求的功能,优先添加。欢迎吐槽或 star 项目简介 这是使用 Golang 网络编程实现的一个多人在线聊天程序,使用 goroutine 达到高并发的效果,使用 redis 来保存用户的注册信息 项目由服务端和客户端两部分组成,服务端和客户端代码基本独立,server 目录下是服务端代码,client 目录下是客户端代码,commen 目录下的包由服务端和客户端共...阅读全文

掘金 2019年06月15日 蚂蚁哈哈哈

使用 Golang Goroutines 并发编程

大家好!在这篇文章中,我们将介绍如何在基于 Go 语言的项目中使用***goroutines***,以及如何提升项目运行时的性能。 ## 视频教程 https://youtu.be/ARHXmR0_MGY ## 简介 如今,Go 是一种性能优良的程序设计语言,它拥有大量优秀的特性用于支持构建高性能的应用程序。它通过特有的***goroutines***和***channels***,重新定义了什么是构建高并发的项目。 使用***goroutines***可以快速地将...阅读全文

Go语言中文网 2019-06-15 20:13:11 KyleYao

效仿 Golang 中的枚举类型

在这篇博文中我们看到使用 `go generate` 和遍历抽象语法树来生成强大的枚举类型。 博文的结果是一个生成枚举类型的客户端。[全部代码](https://github.com/steinfletcher/gonum) 都可以在 Github 上面找到。 ## Go 惯用技巧 Go 并没有对枚举类型提供一流的支持。模拟枚举类型的一种方法是,将一系列相关的常量定义为一个新的类型。Iota 可用于预定义连续自增的整形常量。我们可以像下面这样定义一个 `Color` 类型。 ...阅读全文

Go语言中文网 2019-06-15 19:53:36 LSivan

Windows + VS Code搭建 Go 开发环境

想学golang也就是Go语言由来已久,但苦于不像Delphi、C#这等有现成的IDE,第一步就卡壳了。所幸网上资源丰富,在尝试后终于把环境搭起来了,在此做个记录以备忘。 安装 Git 安装Go Tools时需要用到。而且,搞开发不用Git?图样图森破! Git官网,安装略。若已安装WSL则可直接使用WSL里的Git。 安装 golang 由于众所周知的原因,Go的官网并不总是能访问,其实在国内是有一个官方镜像的。下载安装什么的就略过了。 环境变量 安装好之后在命令行里运行go env即可查看G...阅读全文

Go每日精选(2019-06-15)

基础部分 1.我们用 Go 替换 Python 的原因 2.为什么我最喜欢的编程语言是 Go 3.Golang json解析与生成 4.go mod 使用 5.在Go中构建并发TCP服务器 进阶部分 1.记一次go panic问题的解决过程 2.记一次golang中sync.Map并发创建、读取的问题 3.golang复用http.request.body 4.golang sql连接池的实现方法详解 5.图解Golang的内存分配阅读全文

简书 2019.06.15 19:23* 凯文不上班

go - bufio 缓冲读写详解级实例

go在提供了io包的同时也提供了bufio包来实现有缓存的读写操作以提高读写性能。为什么bufio性能比io高呢? 缓冲读写 缓冲读 // 默认缓冲区大小 const ( defaultBufSize = 4096 ) // 最小缓冲区大小 自定义小于次阈值将会被覆盖 const minReadBufferSize = 16 // 使用默认缓冲区大小 bufio.NewReader(rd io.Reader) // 使用自定义缓冲区大小 bufio.NewReaderSize(rd io.Rea...阅读全文

Segmentfault 2019-06-17 20:32:36 big_cat

Go 性能分析之案例一

思考 相信大家在实际的项目开发中会遇到这么一个事,有的程序员写的代码不仅bug少,而且性能高;而有的程序员写的代码能否流畅的跑起来,都是一个很大问题。而我们今天要讨论的就是一个关于性能优化的案例分析。 案例分析 我们先来构造一些基础数据(长度为10亿的切片,并赋上值): var testData = GenerateData() // generate billion slice data func GenerateData() []int { data := make([]int, 10000...阅读全文

Segmentfault 2019-06-17 20:32:36 WilburXu

跟我学 K8S--代码: Kubernetes StatefulSet 代码分析与Unknown 状态处理

节点离线后的 pod 状态 在 kubernetes 使用过程中,根据集群的配置不同,往往会因为如下情况的一种或几种导致节点 NotReady: kubelet 进程停止 apiserver 进程停止 etcd 进程停止 kubernetes 管理网络 Down 当出现这种情况的时候,会出现节点 NotReady,进而当kube-controller-manager 中的--pod-eviction-timeout定义的值,默认 5 分钟后,将触发 Pod eviction 动作。 对于不同类型...阅读全文

Segmentfault 2019-06-17 20:32:35 FelixShu

Go 语言中的快速检查测试

本系列的前文: https://itnext.io/types-and-specifications-c4d34ade6d5c “我们只能看到我们了解的东西。”—— [Goethe](https://en.wikipedia.org/wiki/Johann_Wolfgang_von_Goethe) 在我的上一篇关于测试的文章里,我通过使用 Clojure 这门非静态类型的语言介绍了快速检查的概念。尽管我说要优先考虑基于规范的检查而不是指望类型系统能够确保程序的正确性,但你可能会发现自...阅读全文

Go语言中文网 2019-06-15 14:01:53 polaris

Golang goroutine和chan 教程01

goroutine是go语言的精髓,chan是实现goroutine的必要条件 首先我们要清楚的是,区分并发和并行。然后我们再来讨论goroutine对于并发的重要性。看以下代码。 package main import ( "fmt" "time" ) func main() { go spiner(100*time.Millisecond) const n = 45 fibN := fib(n) fmt.Printf("\r斐波那契(%d)=%d\n",n,fibN) } func spin...阅读全文

简书 2019.06.15 10:48 我加入简书的路程