Go语言TCP网络编程(详细)

一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,so...阅读全文

CSDN博客 2016-12-28 17:04 hacker00011000

关于go语言的学习经历2:2017-1-8

ps:周末有时间学习,所以连记了两个笔记 关于go语言中的接口:接口赋值 go中的接口按《go语言编程》的介绍来讲,是非常重要的。 关于接口的实现,有一句概念性的话:Go语言中,一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口 (重点) 比如有个接口(本不想用原书的例子,但是这么描述真的很简单) type Integer int//新增了一个基于int的类型 Integer type MyInterface interface {//这是一个接口 这是一个go语言接口 啊,这个接...阅读全文

CSDN博客 2017-01-08 16:42 Mr_Zhang_920717

golang vim 语法高亮、保存时fmt与guru安装

原文链接: golang vim 插件设置 多数情况使用vim编写golang代码,需要有语法高亮显示以及自动format。为此需要给vim编辑器增加支持golang语法的插件,插件配置的方法如下: 1、下载vim插件管理工具,如果有git的话可以直接用git clone https://github.com/tpope/vim-pathogen 2、在建立文件夹~/.vim mkdir ~/.vim 3、拷贝vim-pathogen下的autoload文件夹到~/.vim下: 4、在~/.vi...阅读全文

CSDN博客 2016-12-28 16:01 xxy0403

golang学习之cgo

package main /* #include <stdio.h> #include <stdlib.h> */ import "C" import "unsafe" func main() { cstr := C.CString("HELLO, WORLD") C.puts(cstr) C.free(unsafe.Pointer(cstr)) } 说说我遇到的坑吧 虽然go在格式上要求严格,但是有些地方真的不是很人性化,不知道是我的操作有问题,还是怎么,哎 注意: 我使用的ide是litei...阅读全文

开源中国博客 2017-01-07 23:00:12 lmspace

[翻译]编译器(7)-扫描

原文在此。 ————翻译分隔线———— 编译器(7)-扫描 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 现在终于可以开始在扫描器上工作了。 词法分析 那么,从哪里开始呢? 这是最难的一部分,对我来说,扫描看起来应该挺简单的,但是很快我就迷失在细节里。有许多种实现扫描器的方法,我只会向你展示其中的一种。这里是 Rob Pike 在一次演讲中的演示文稿,是关于另外一种很酷的方法:在 Go 中的...阅读全文

mikespook 的博客 2017-01-07 19:00:13 mikespook

[翻译]编译器(8)-抽象语法树

原文在此。 ————翻译分隔线———— 编译器(8)-抽象语法树 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 在构建解析器之前,首先应当谈谈如何处理目标数据。 需要用某种抽象数据类型来保存所有需要解析的数据。树形数据结构很好的满足了我们的需求。这个树描述了编程语言的语法结构,它被很恰当的叫做抽象语法树(AST)。 AST 树形数据结构总是从一个根开始,我们的也是一样。通常,...阅读全文

mikespook 的博客 2017-01-07 19:00:12 mikespook

[翻译]编译器(9)-解析

原文在此。 ————翻译分隔线———— 编译器(9)-解析 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 第八部分:抽象语法树 长征已经走了很远。我们概览了扫描和抽象语法树的基本概念。现在终于可以向着解析前进。 如果你已经开始与概念点不停的斗争,那么我需要警告你,从现在开始会变得越来越难。解析可能是你脑袋里已有的概念中最难的部分。我们将处理扫描器发现的词素,给它们提供一个含义...阅读全文

mikespook 的博客 2017-01-07 19:00:11 mikespook

[翻译]编译器(10)-编译到 C

原文在此。 ————翻译分隔线———— 编译器(10)-编译到 C 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 第五部分:Calc 1 语言规格说明书 第六部分:标识符 第七部分:扫描 第八部分:抽象语法树 第九部分:解析 终于到最后一个步骤了! 我们的语言规格说明书如此简单,其实可以跳过 C 直接输出汇编。我有两个不这么做的原因。首先,移植性。在这个指引中,我无须编写任何特定架构的 C 代码。C 已经被移植到各种不同的系统中去了,因此可以让 C...阅读全文

mikespook 的博客 2017-01-07 19:00:10 mikespook

[翻译]冰激淋制造商和数据竞态

Dave 总是会给我们带来这种很浅显有趣,又意义深刻的文章。原文在此:Ice cream makers and data races。 ————翻译分隔线———— 冰激淋制造商和数据竞态 Dave Cheney 这是一篇关于数据竞态的文章。本文的相关代码在 Github 上:github.com/davecheney/benandjerry。 这个例子模拟了两个冰激淋制造商 Ben 和 Jerry 随机接待他们的客户。 package main import "fmt" type IceCrea...阅读全文

mikespook 的博客 2017-01-07 19:00:09 mikespook

[翻译]十条有用的 Go 技术

原文在此,实用总结。 ————翻译分隔线———— 十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情都会有影响。所有这些都仅...阅读全文

mikespook 的博客 2017-01-07 19:00:09 mikespook

[翻译] channel 独木难支

原文在此。遗憾的是文章只提出了问题,并没明确提供如何解决这些问题。但无论如何,对于这种可以引起反思的文章,是不能放过的。另外,我得承认,似乎高层次的分布式系统的抽象,用函数式语言的范式来表述更容易一些(实现上其实未必)。 ————翻译分隔线———— channel 独木难支 或者说为什么流水线作业没那么容易 勇敢和聪明的 Golang 并发模型。 @kachayev 撰写 概述 Go 被设计用于更容易的构建并发系统,因此它有运行独立的计算的 goroutine 和用于它们之间通讯的 channe...阅读全文

mikespook 的博客 2017-01-07 19:00:08 mikespook

[翻译]理解 Go 语言的内存使用

许多人在刚开始接触 Go 语言时,经常会有的疑惑就是“为什么一个 Hello world 会占用如此之多的内存?”。Understanding Go Lang Memory Usage 很好的解释了这个问题。不过“简介”就是“简介”,更加深入的内容恐怕要读者自己去探索了。另外,文章写到最后,作者飘了,估计引起了一些公愤,于是又自己给自己补刀,左一刀,右一刀…… ————翻译分隔线———— 理解 Go 语言的内存使用 2014年12月22日,星期一 温馨提示:这仅是关于 Go 语言内存的简介,俗话...阅读全文

mikespook 的博客 2017-01-07 19:00:07 mikespook

如何从源代码构建 Go 1.5 开发环境

请注意,本文正文含有大量链接。如果是转载或者使用某些不支持超链接的阅读器,就请自行脑补吧。 近期,Go Team 连续放出了几个大招来介绍即将在八月问世的 Go 1.5 这个划时代的版本。Rob 和 Andrew 分别在《Go in Go》和《The State of Go》中详细说明了出现在 Go 1.5 中的重要特性和细节变化。在这个版本中最主要的变化是移除了所有 C 代码,不论是 runtime 还是编译器都使用 Go 语言和一小部分的汇编来实现——也就是人们常说的自举。但是这样做也就意味...阅读全文

mikespook 的博客 2017-01-07 19:00:06 mikespook

Thoughs on goRBAC

Code refactoring is not an easy job, but it has to be done in most of the times. I just completed the lightweight role based access control library: goRBAC’s refactoring. There are some feedbacks and questions about the design and usage. I think it w...阅读全文

mikespook 的博客 2017-01-07 19:00:04 mikespook

golang的位运算操作符的使用

& 位运算 AND | 位运算 OR ^ 位运算 XOR &^ 位清空 (AND NOT) << 左移 >> 右移 感觉位运算操作符虽然在平时用得并不多,但是在涉及到底层性能优化或者使用某些trick的时候还是比较有意思。 &(AND) |(OR) 就不提了最常用的东西 会编程就会。 &操作的话是当 两个数需要同时为1的时候才会保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4 | 操作的话是当 两个数同时为1或者1个为1一个不为1的时候会保留。 例如 ...阅读全文

开源中国博客 2017-01-07 16:00:02 henrylee2cn

Golang:make,slice和append的一个小细节

这两天写代码的时候遇到了这么一个问题,就是向slice追加元素的这么一个简单的小问题,却由于疏忽,堵了好久,现在分享一下,避免以后再犯。 代码开始是这么写的: urls := make(map[string]string, 3) // 这里随便个例子 urls["baidu"] = "www.baidu.com" urls["google"] = "www.google.com" urls["csdn"] = "www.csdn.net" names := make([]string, len(...阅读全文

开源中国博客 2017-01-07 15:00:42 这里好像没有人

使用golang的标准库搭建网站--4.关于静态资源处理的问题

建网站不可避免的要使用各种各样的静态资源,这一节,就来看看,如何加载css,js图片等等这些资源。 在之前的基础上构造一简单的个HTML的测试文件 <HTML> <head> <title>Hello World</title> <link href="static/core.css" type="text/css" rel="stylesheet" /> </head> <body> <div id="header"> <p>this is header</p> </div> <div id=...阅读全文

开源中国博客 2017-01-07 15:00:41 这里好像没有人

使用golang的标准库搭建网站--3.模板函数

和大多数语言的的模板语法类似:{{.Name | FuncName}} go本身自带了一些模板函数,我们现在来看一看如何自定义模板函数: 先来看一个函数声明: func (t *Template) Funcs(funcMap FuncMap) *Template Funcs函数就是用来创建我们模板函数的函数了,它需要一个FuncMap类型的参数,继续看手册 type FuncMap map[string]interface{} 官方文档里是这么解释的 FuncMap is the type of...阅读全文

开源中国博客 2017-01-07 15:00:41 这里好像没有人