GO的第四天,基础数据类型

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。基础类型,包括:数字、字符串和布尔型。今天我们大体上讲下这几种:整型,浮点数,布尔型,字符串型,常量。《GO语言圣经》里还介绍了一种,那就是复数,为什么我不讲复数呢?主要有两个原因,第一个原因:感觉基本上不常用。第二个原因:本人的数学知识都已经还给老师了。 好了,不多废话,我们开始吧! 整型 Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整数类型,分别对...阅读全文

Segmentfault 2020-03-18 09:32:33 Mr_J

流?I/O操作?阻塞?epoll?

一、流?I/O操作? 阻塞? (1) 流 可以进行I/O操作的内核对象 文件、管道、套接字…… 流的入口:文件描述符(fd) (2) I/O操作 所有对流的读写操作,我们都可以称之为IO操作。 当一个流中, 在没有数据read的时候,或者说在流中已经写满了数据,再write,我们的IO操作就会出现一种现象,就是阻塞现象,如下图。 (3) 阻塞 阻塞场景: 你有一份快递,家里有个座机,快递到了主动给你打电话,期间你可以休息。 非阻塞,忙轮询场景: 你性子比较急躁, 每分钟就要打电话询问快递小哥一次...阅读全文

Segmentfault 2020-03-17 21:32:35 aceld

Go 编译器内部知识:向 Go 添加新语句-第 2 部分

这是探讨 Go 编译器两篇文章的最后一篇。在[第 1 部分中](https://studygolang.com/articles/25101),我们通过构建自定义的编译器,向 Go 语言添加了一条新语句。为此,我们按照此图介绍了编译器的前五个阶段: ![go compiler flow](https://raw.githubusercontent.com/studygolang/gctt-images/master/compiler-internal/go-compiler-flow.pn...阅读全文

Go语言中文网 2020-03-12 22:40:36 polaris

Go 每日一库之 mergo

简介 今天我们介绍一个合并结构体字段的库mergo。mergo可以在相同的结构体或map之间赋值,可以将结构体的字段赋值到map中,可以将map的值赋值给结构体的字段。感谢@thinkgos推荐。 快速使用 先安装: $ go get github.com/imdario/mergo 后使用: package main import ( "fmt" "log" "github.com/imdario/mergo" ) type redisConfig struct { Address strin...阅读全文

Segmentfault 2020-03-17 21:32:34 darjun

在 Go 语言中,我为什么使用接口

强调一下是**我个人**的见解以及接口在 **Go 语言**中的意义。 如果您写代码已经有了一段时间,我可能不需要过多解释接口所带来的好处,但是在深入探讨 Go 语言中的接口前,我想花一两分钟先来简单介绍一下接口。 如果您对接口很熟悉,请先跳过下面这段。 ## 接口的简单介绍 在任一编程语言中,接口——方法或行为的集合,在功能和该功能的使用者之间构建了一层薄薄的抽象层。在使用接口时,并不需要了解底层函数是如何实现的,因为接口隔离了各个部分(划重点)。 跟不使用接口相比,...阅读全文

Go语言中文网 2020-03-12 22:25:39 polaris

使用 JSON 协议的 gRPC

JSON payload 实现简易的请求和响应的内省。 ## 介绍 大家经常说 gRPC 是基于 [Google Protocol Buffers](https://developers.google.com/protocol-buffers/) payload 格式的,然而这不完全正确。gRPC payload 的*默认*格式是 Protobuf,但是 gRPC-Go 的实现中也对外暴露了 `Codec` [interface](https://godoc.org/google.g...阅读全文

Go语言中文网 2020-03-12 22:06:46 lxbwolf

为什么你的 64-bit 程序可能占用巨大的虚拟空间

出于很多目的,我从最新的 Go 系统内核开发源码复制了一份代码,在一个正常的运行环境中构建(和重新构建)它,在构建版本基础上周期性地重新构建 Go 程序。近期我在用 `ps` 查看我的[一个程序](https://github.com/siebenmann/smtpd/)的内存使用情况时,发现它占用了约 138 GB 的巨大虚拟空间(Linux ps 命令结果的 `VSZ` 字段),尽管它的常驻内存还不是很大。某个进程的常驻内存很小,但是需要内存很大,通常是表示有内存泄露,因此我心里一颤。 ...阅读全文

Go语言中文网 2020-03-12 22:02:41 lxbwolf

在 Go 语言中,有时 nil 并不是一个 nil

今天,我遇到了一个 [Go FAQ](http://golang.org/doc/faq#nil_error)。首先,作为一个小小的 Go 语言测验,看看您是否在 Go playground 中运行该程序之前就能推断出它应该打印出的内容(我已经将程序放在侧边栏中,以防它在 Go playground 上消失)。该程序的关键代码是: ```go type fake struct { io.Writer } func fred (logger io.Writer) { if l...阅读全文

Go语言中文网 2020-03-12 22:00:03 anxk

用 cgo 生成用于 cgo 的 C 兼容的结构体

假设([并非完全假设,这里有 demo](https://github.com/siebenmann/go-kstat/))你正在编写一个程序包,用于连接 Go 和其它一些提供大量 C 结构体内存的程序。这些结构可能是系统调用的结果,也可能是一个库给你提供的纯粹信息性内容。无论哪种情况,你都希望将这些结构传递给你的程序包的用户,以便他们可以使用这些结构执行操作。在你的包中,你可以直接使用 cgo 提供的 C.<whatever> 类型。但这有点恼人(这些整型它们没有对应的原生 Go 类型,使得与...阅读全文

Go语言中文网 2020-03-12 21:57:19 befovy

编写友好的命令行应用程序

我来给你讲一个故事... 1986 年,[Knuth](https://en.wikipedia.org/wiki/Donald_Knuth) 编写了一个程序来演示[文学式编程](https://en.wikipedia.org/wiki/Literate_programming) 。 这段程序目的是读取一个文本文件,找到 n 个最常使用的单词,然后有序输出这些单词以及它们的频率。 Knuth 写了一个完美的 10 页程序。 Doug Mcllory 看到这里然后写了 `tr ...阅读全文

Go语言中文网 2020-03-12 21:21:28 Ollyder

给Hugo站点添加搜索功能

## 实现思路 * 利用hugo生成的index.xml文件进行内容搜索。 * hugo的content目录下的html文件会被编译到模板中去。 * 利用以上特性使用js实现功能。 ## 效果图 演示地址:[https://www.rebootok.com/search/](https://www.rebootok.com/search/) ![QQ截图20200312154830.png](https://static.studygolang.com/200312/dda8...阅读全文

Go语言中文网 2020-03-12 15:51:04 RebootOK

生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程

引言Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序、动态地伸缩应用程序、无缝地推出新特性,同时有效地利用硬件资源。本期我们将回顾采用Kubernetes作为容器编排工具的公司所面临的复杂性和挑战。我们希望我们提供的经验教训、最佳实践和技巧将帮助您在前往K8s旅途中起步并继续前进。本期将介绍关于在Kubernetes生产环境的最佳实践,包括::为上K8s容器云准备好应用程序在Kubernetes中获得灵活性和通...阅读全文

Go语言中文网 2020-03-12 13:37:17 JFrogChina

服务端面试经

题图:pixabay 转服务端一年半有余。主技术栈为golang,不知道自己技术水平在什么阶段,之前没有服务端的面试经验,正好有小伙伴讲说帮我内推试试。选了4家公司,某条、某手、一家C轮小厂、一家D轮小厂。 某条: 一面: 自己负责的项目、为什么那么做、技术选型有哪些取舍 golang基础、Map原理、调度原理 https通信原理、mq mysql索引、事务、幻读、MVCC 手写两道easy算法题 第一次服务端面试,算是摸摸套路。自我感觉答得还行,不过还是一轮游。事后托朋友问面试评价: gola...阅读全文

掘金 2020年03月11日 Alihanniba

Go Web编程--SecureCookie实现客户端Session管理

在Web应用开发中Session是在用户和服务器之间进行交换的非持久化交互信息。当用户登录时,可以在用户和服务器之间生成Session,然后来回交换数据,并在用户登出时销毁Session。gorilla/sessions软件包提供了易于使用的Go语言Session实现。该软件包提供了两种不同的实现。第一个是文件系统存储,它将每个会话存储在服务器的文件系统中。另一个是Cookie存储,它使用我们上篇文章讲的SecureCookie在客户端上存储会话。同时还提供了用户自定义Session存储实现的选...阅读全文

掘金 2020年03月12日 kevinyan

Golang 中字典的 Comma Ok 是如何实现的

h3l · 2020-02-29 14:41:14 众所周知,Golang 中函数的返回值的数量是固定的,而不是像 Python 中那样,函数的返回值数量是不固定的。 如果我们把 Golang 中对 map 的取值看作是一个函数的话,那么直接取值和用 comma ok 方式取值的实现就变得很意思。 Golang 中 map 的取值方式 v1, ok := m["test"] v2 := m2["test"] 先看看汇编是如何实现的。 package main import "log" func ...阅读全文

h3l.github.io 2020-02-29 14:41 h3l.github.io