代码改变世界

随笔分类 - Go

你技术这么好,总要改变点什么把!

2019-10-07 15:40 by 轩脉刃, 1513 阅读, 收藏, 编辑
摘要:你技术这么好,总要改变点什么把! 这篇文章我很早就想写了,工作至今(10年)我对于技术这个东西的体会也越来越多。今天触发我动键盘敲字的是一个事情:我在准备做一个golang内存模型的ppt,准备节后给组内同学分享。但是过程中遇到问题,就谷歌了一下,搜出了我自己16年写的一篇文章。。。我才记起来,16 阅读全文

k8s学习 - 概念 - Deployment

2019-07-19 10:22 by 轩脉刃, 478 阅读, 收藏, 编辑
摘要:k8s学习 概念 Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题。一个 Deployment 可以管理多个 ReplicaSet, 一个 ReplicaSet 可以管理多个 Pod。最通用的场景是当我们对某个 阅读全文

k8s学习 - 概念 - ReplicaSet

2019-07-18 19:17 by 轩脉刃, 210 阅读, 收藏, 编辑
摘要:k8s学习 概念 ReplicaSet 首先,ReplicaSet 和 ReplicationController 基本上一样,除了上篇说到的selector有不同之外,没有啥区别。(官网也是这么说的)。但是为什么官方建议的不是ReplicaController + Deployment的集合呢?咋 阅读全文

k8s学习 - 概念 - ReplicationController

2019-07-17 08:48 by 轩脉刃, 241 阅读, 收藏, 编辑
摘要:k8s学习 概念 ReplicationController 我们有了 pod,那么就需要对 pod 进行控制,就是同一个服务的 podv我需要启动几个?如果需要扩容了,怎么办?这里就有个控制器,ReplicationController(简称rc)。 不过我们看官网: 这里告诉我们,Replica 阅读全文

k8s学习 - 概念 - Pod

2019-07-16 09:45 by 轩脉刃, 409 阅读, 收藏, 编辑
摘要:k8s学习 概念 Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位。 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe 和配置文件的配置项都能看懂就算是对 pod 比较了解了。 Pod 我们通过调用一个 可以查看某个 pod 的 阅读全文

k8s学习 - 概念 - master/node

2019-07-15 09:29 by 轩脉刃, 583 阅读, 收藏, 编辑
摘要:k8s学习 概念 master/node 在k8s中,有各种各样的概念和术语。这些概念是必须要学习和掌握的。我们先罗列下所有概念,然后再一个个看具体实例。 大概说一下这些概念: Master: k8s的主控组件,对应的对象是node。 Node: 是k8s集群的机器节点,相当于master node 阅读全文

k8s学习 - API

2019-07-12 10:00 by 轩脉刃, 668 阅读, 收藏, 编辑
摘要:k8s学习 API 之前对k8s并没有很深入的了解,最近想把手头一个项目全部放到k8s上,以方便部署,需要研究。这里记录一下自己研究过程中头脑中的理解。 k8s 和 docker 首先,需要先理解下docker。镜像把你要的应用和环境打包在一个容器里面,有了容器之后,部署,扩容等操作就很方便了。但是 阅读全文

collection包1.1.0都升级了什么功能

2019-05-24 13:05 by 轩脉刃, 233 阅读, 收藏, 编辑
摘要:collection包1.1.0都升级了什么功能 jianfengye/collection(https://github.com/jianfengye/collection) 这个包喜迎第一个子版本升级,从1.0.1升级到了1.1.0。这次还是做了不少改动的。 支持int32 这个需求是这个iss 阅读全文

Golang项目的测试实践

2019-05-22 13:23 by 轩脉刃, 678 阅读, 收藏, 编辑
摘要:Golang项目的测试实践 最近有一个项目,链路涉及了4个服务。最核心的是一个配时服务。要如何对这个项目进行测试,保证输出质量,是最近思考和实践的重点。这篇就说下最近这个实践的过程总结。 测试金字塔 按照Mike Cohn提出的“测试金字塔”概念,测试分为4个层次 最下面是单元测试,单元测试对代码进 阅读全文

一个让业务开发效率提高10倍的golang库

2019-05-06 10:18 by 轩脉刃, 1902 阅读, 收藏, 编辑
摘要:一个让业务开发效率提高10倍的golang库 此文除了是标题党,没有什么其他问题。 这篇文章推荐一个库,https://github.com/jianfengye/collection。 这个库是我在开发业务过程中 Slice 的频繁导致业务开发效率低,就产生了要做一个 Collection 包的想 阅读全文

GopherChina第二天小结

2019-04-29 07:35 by 轩脉刃, 379 阅读, 收藏, 编辑
摘要:GopherChina第二天小结 今天继续昨天的文章,参加了第二天的GopherChina,例行完成总结。 基于MINIO的对象存储方案在探探的实践 关于对象存储,之前用过seaweedfs,但是对MINIO这个项目真是一无所知。于乐分享了下东道主探探在使用MINIO的整个过程。现在回想下来,最具有 阅读全文

slice是什么时候决定要扩张?

2019-04-16 08:58 by 轩脉刃, 229 阅读, 收藏, 编辑
摘要:slice是什么时候决定要扩张? 网上说slice的文章已经很多了,大都已经把slice的内存扩张原理都说清楚了。但是是如何判断slice是否需要扩张这个点却没有说的很清楚。想当然的我会觉得这个append是否扩张的逻辑应该隐藏在runtime中的某个函数,根据append的数组的长度进行判断。但是 阅读全文

gorm的日志模块源码解析

2019-04-02 09:57 by 轩脉刃, 293 阅读, 收藏, 编辑
摘要:gorm的日志模块源码解析 如何让gorm的日志按照我的格式进行输出 这个问题是《如何为gorm日志加traceId》之后,一个群里的朋友问我的。如何让gorm的sql日志不打印到控制台,而打印到自己的日志文件中去。正好我实现了这个功能,就记录一下,并且再把gorm的logger这个线捋一下。 首先 阅读全文

记录最近遇到的几个问题

2019-04-01 08:48 by 轩脉刃, 359 阅读, 收藏, 编辑
摘要:记录最近遇到的几个问题 Gin 中间件没有使用next会是什么反应? 周末老王提了一个问题,如果Gin中间件里面如果我忘记写context.Next了会有什么结果呢? 我第一个反应是直接不会执行后面的handler了呗。我印象中gin的middleware也是个handler,然后维护一个handl 阅读全文

测试用例是开发人员最后一块遮羞布

2019-03-25 13:49 by 轩脉刃, 1469 阅读, 收藏, 编辑
摘要:测试用例是开发人员最后一块遮羞布 最近一周写一个比较复杂的业务模块,越写到后面真心越心虚。操作越来越复杂了,代码也逐渐凌乱了起来。比如一个接口,传入的是一个比较复杂的大json,我需要解析这个大json,然后根据json中字段进行增删改查,调用第三方服务等操作。告诉前端接口已经完成的时候,总是有点没 阅读全文

gin框架使用注意事项

2019-03-21 12:39 by 轩脉刃, 2017 阅读, 收藏, 编辑
摘要:gin框架使用注意事项 本文就说下这段时间我在使用gin框架过程中遇到的问题和要注意的事情。 错误处理请求返回要使用c.Abort,不要只是return 当在controller中进行错误处理的时候,发现一个错误,往往要立即返回,这个时候要记得使用gin.Context.Abort 或者其相关的函数 阅读全文

聊聊OSM

2019-03-07 22:00 by 轩脉刃, 485 阅读, 收藏, 编辑
摘要:聊聊OSM 做路网的同学一定对OSM并不陌生,OSM是一个由英国人Steve Coast创立的一个项目,这个项目的目标是创建一个内容自由,且能让所有人编辑的世界地图。类似于维基百科的概念。和它对标的是谷歌的google map。google map是谷歌提出的电子地图服务。它是收费的。且并不提供友善 阅读全文

go get golang.org被墙问题解决

2019-03-06 13:05 by 轩脉刃, 925 阅读, 收藏, 编辑
摘要:go get golang.org被墙问题解决 今天在下载golang.org/x/image/tiff的时候出错 网上看了一下,大致是由于墙的问题。 网上的方式大致有两种,一种是使用golang.org在github上的镜像,比如https://github.com/golang/image 在g 阅读全文

golang的cms

2019-03-06 12:53 by 轩脉刃, 1409 阅读, 收藏, 编辑
摘要:golang的cms 说说cms cms(内容管理系统)是建站利器。它的本质是为了快速建站。cms本质是一个后台服务站,使用这个后台,能很快搭建一个前台web站。在PHP的世界里面,CMS框架简直不要太多:著名的wordpress,漏洞很多的dedecms,以搭建论坛为主的discuz,优雅的Oct 阅读全文

colly源码学习

2019-02-27 09:52 by 轩脉刃, 307 阅读, 收藏, 编辑
摘要:colly源码学习 "colly" 是一个golang写的网络爬虫。它使用起来非常顺手。看了一下它的源码,质量也是非常好的。本文就阅读一下它的源码。 使用示例 从Visit开始说起 首先,要做一个爬虫,我们就需要有一个结构体 Collector, 所有的逻辑都是围绕这个Collector来进行的。 阅读全文

使用chan的时候选择对象还是指针

2019-02-22 12:34 by 轩脉刃, 361 阅读, 收藏, 编辑
摘要:使用chan的时候选择对象还是指针 今天在写代码的时候遇到一个问题,在创建一个通道的时候,不确定创建的通道是使用chan A还是chan \ A。 思考了一下,觉得这个应该和函数一样是一个值传递还是参数传递的问题。然后写了个play验证了一下。 package main import ( "fmt" 阅读全文

golang中Context的使用场景

2019-02-19 09:27 by 轩脉刃, 1881 阅读, 收藏, 编辑
摘要:golang中Context的使用场景 context在Go1.7之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制goroutine的生命周期。当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个 阅读全文

如何加速golang写业务的开发速度

2019-02-13 08:58 by 轩脉刃, 1137 阅读, 收藏, 编辑
摘要:如何加速golang写业务的开发速度 不要忌讳panic golang写业务代码经常会被吐槽,写业务太慢了,其中最大的吐槽点就是,处理各种error太麻烦了。一个项目中,会有30%或者更多的是在处理error。 对于golang的error这个事情,golang的官方也说的很详细,建议函数返回err 阅读全文

Gin框架源码解析

2018-09-18 19:44 by 轩脉刃, 3292 阅读, 收藏, 编辑
摘要:Gin框架源码解析 Gin框架是golang的一个常用的web框架,最近一个项目中需要使用到它,所以对这个框架进行了学习。gin包非常短小精悍,不过主要包含的路由,中间件,日志都有了。我们可以追着代码思考下,这个框架是如何一步一步过来的。 从http包说起 基本上现在的golang的web库都是从h 阅读全文

slice全解析

2018-08-24 18:02 by 轩脉刃, 339 阅读, 收藏, 编辑
摘要:slice全解析 昨天组内小伙伴做分享,给出了这么一段代码: package main import ( "fmt" ) func fun1(x int) { x = x + 1 } func fun2(x int) { x = x + 1 } func fun3(x []int) { x = ap 阅读全文

说说接口封装

2017-03-09 15:36 by 轩脉刃, 8564 阅读, 收藏, 编辑
摘要:今天给同事封装了一个接口,说起接口封装的事情,其实其实很有的聊。很多时候,说一个服务好,一个服务烂,实际上都是在吐槽服务队外暴露的接口好坏。不管什么语言,封装接口,抽象起来,就是由一个函数名,若干个参数,若干个返回值组成的。封装的好坏,就在这几个上面。 函数名 首先是函数名。函数名的好坏很明显,我的 阅读全文

Golang汇编命令解读

2016-12-05 10:12 by 轩脉刃, 5006 阅读, 收藏, 编辑
摘要:我们可以很容易将一个golang程序转变成汇编语言。 比如我写了一个main.go: 使用命令: 我们就获取了main.S是main.go的汇编版本。 首先这个程序根据TEXT是定义函数的,分为3个部分 这个"". 代表的是这个函数的命名空间。 g(SB) 这里就有个SB的伪寄存器。全名未Stati 阅读全文

go-hbase的Scan模型源码分析

2016-11-18 10:35 by 轩脉刃, 1516 阅读, 收藏, 编辑
摘要:git地址在这里: https://github.com/Lazyshot/go hbase 这是一个使用go操作hbase的行为。 分析scan行为 如何使用scan看下面这个例子,伪代码如下: 首先是NewClient, 返回的结构是hbase.Client, 这个结构代表的是与hbase服务端 阅读全文

golang中的race检测

2016-01-20 10:19 by 轩脉刃, 10121 阅读, 收藏, 编辑
摘要:golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go。 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。 所以在本质上说,goroutine的使用增加了函数的危险系数 "论go语言中goroutine的使用"... 阅读全文

testing - 测试基本使用接口

2015-01-20 18:49 by 轩脉刃, 2149 阅读, 收藏, 编辑
摘要:# testing - 测试基本使用接口 #当你写完一个函数,结构体,main之后,你下一步需要的就是测试了。testing包提供了很简单易用的测试包。#写一个基本的测试用例#测试文件的文件名需要以_test.go为结尾,测试用例需要以TestXxxx的样式存在。比如我要测试utils包的sql.g... 阅读全文

Symfony学习--目录和入口

2013-05-16 10:09 by 轩脉刃, 5668 阅读, 收藏, 编辑
摘要:1 目录结构 根目录下有: app src vendor web app是存放应用的一些配置文件,如果有一些配置文件或者文档,应当存放在这里面。 src是存放你的项目的php代码,这里的php至少必须是5.3,因为symfony中使用了命名空间的概念。 vendor是存放第三方代码的目录,这个目录可能非常庞大,因为symfony大量使用了第三方bundle的概念,连自身都是作为一个... 阅读全文

freetype-go学习

2013-04-17 10:08 by 轩脉刃, 4019 阅读, 收藏, 编辑
摘要:freetype-go的源码在这里https://code.google.com/p/freetype-go/ 它的作用是生成带文字的png图片 首先解决的几个概念: 什么是FreeType? FreeType是一个可移植的,高效的字体引擎。 字体在电脑上的显示有两种方式:点阵和矢量。对于一个字,点阵字体保存的是每个点的渲染信息。这个方式的劣势在于保存的数据量非常大,并且对放大缩小等操作... 阅读全文

Go小tip

2013-03-19 09:38 by 轩脉刃, 2334 阅读, 收藏, 编辑
摘要:go一些“隐藏库” code.google.com上有一些分支 有的是还没合并到default上的函数功能 比如net/websocket http://code.google.com/p/go/source/browse?repo=net#hg%2Fwebsocket 这些库可用性都很高,很适合直接使用 如何为go添加补丁 http://golang.org/doc/contrib... 阅读全文

golang rpc的两种调用方法

2013-02-28 17:20 by 轩脉刃, 16324 阅读, 收藏, 编辑
摘要:golang的rpc有两种方法进行调用,一种是rpc例子中给的:package mainimport ( "net/rpc" "net/http" "log" "net" "time")type Args struct { A, B int}type Arith intfunc (t *Arith) Multipl... 阅读全文

Polemo Chat客户端行为

2013-02-19 11:30 by 轩脉刃, 4305 阅读, 收藏, 编辑
摘要:chatofpomelo的git地址在这里: https://github.com/NetEase/chatofpomelo 当你启动game-server和web-server之后,你就可以在web上进入一个聊天室进行实时聊天了。这里的实时聊天是使用了websocket技术,在网页和服务器上建立了一个连接,本文的目的在于分析清楚下客户端和服务端聊天的过程。 首先是客户端(页面)的js有: ... 阅读全文

go的websocket实现

2013-02-18 09:35 by 轩脉刃, 21953 阅读, 收藏, 编辑
摘要:websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接 RFC协议文档在:http://tools.ietf.org/html/rfc6455 握手阶段 握手阶段就是普通的HTTP 客户端发送消息: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket ... 阅读全文

Go知识点记录

2013-02-06 11:21 by 轩脉刃, 3963 阅读, 收藏, 编辑
摘要:import包命名 import的包可以给它命名 import l4g "code.google.com/p/log4go" testing的Error和Fatal的区别 Error : Log() + Fail() 即记录当前错误,记录为失败,但是继续执行 Fatal : Log() + FailNow() 即记录当前错误,记录为失败,不继续执行 path.Clean使用 pat... 阅读全文

golang一个例子引出的几个问题

2013-01-30 10:39 by 轩脉刃, 5877 阅读, 收藏, 编辑
摘要:这个例子是从go源码src/pkg/net/rpc/server_test.go截取出来的func benchmarkEndToEndAsync(dial func() (*Client, error), b *testing.B) { const MaxConcurrentCalls = 100 b.StopTimer() once.Do(startServer) client, err := dial() if err != nil { b.Fatal("error dialing:", err) } // Asyn... 阅读全文

go的sql包

2013-01-23 09:55 by 轩脉刃, 6642 阅读, 收藏, 编辑
摘要:go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。这个文档说了几点比较重要的: 1 这两个包是真正Go风格的包。 2 这使用这两个包就不需要关于并发处理了,也不需要维护自己的数据库连接池了,一旦建立了一个连接,这个连接是可以在各个goroutine之间共用的。 3 sql/drive... 阅读全文

golang test说明解读

2013-01-22 10:26 by 轩脉刃, 11745 阅读, 收藏, 编辑
摘要:go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试 通过go help test可以看到go test的使用说明: 格式形如: go test [-c] [-i] [build flags] [packages] [flags for test binary] 参数解读: -c : 编译go test成为可执行的二进制文件,但是不运行测试。 -i : 安装测试... 阅读全文

mymysql与go-mysql-driver性能比较

2013-01-21 09:35 by 轩脉刃, 11238 阅读, 收藏, 编辑
摘要:mymysql和go-mysql-driver是两个现在都很流行的go的mysql驱动,这篇文章目的是要将这两个驱动进行一下比较 两个mysql驱动的下载地址: https://github.com/ziutek/mymysql http://code.google.com/p/go-mysql-driver/ 首先是性能测试 准备工作: 在mysql建表和初始化数据(db是test)... 阅读全文

golang test测试实例

2013-01-18 09:51 by 轩脉刃, 27810 阅读, 收藏, 编辑
摘要:本文的目的是对mymysql进行单元测试和性能测试 准备工作: 1 go get github.com/ziutek/mymysql/thrsafe 2 在mysql建表和初始化数据(db是test) drop table if exists admin;CREATE TABLE `admin` ( `adminid` INT(10) UNSIGNED NOT NULL AUTO_I... 阅读全文

Plan9的C编译器

2013-01-16 09:26 by 轩脉刃, 3860 阅读, 收藏, 编辑
摘要:Plan9的C编译器有什么特别 对于分布式操作系统来说,需要能在那么多种CPU上进行运行,C编译器是尤其重要的。试想一下,如果你写了一个标准C的程序,需要在AMD64,ARM,Intel 86-32,MIPS,Motorola这么多CPU架构上都能运行,不是一个简单的事情。 plan9的C编译器要做的就是这么一个事情。How to Use Plan9 C Compiler http://doc... 阅读全文

go/src/make.bash阅读

2013-01-15 09:58 by 轩脉刃, 2653 阅读, 收藏, 编辑
摘要:今天看到@polaris1119的这篇分析源码安装Go的过程(初稿)至今还没仔细看过make.bash的内容。这篇算是阅读笔记了。环境变量首先是make.bash中用到的环境变量:GOROOT_FINAL:Go源码的根目录,这个变量的是在gcc的时候使用的,如果你设置了这个,gcc的-D参数就是你设置的GOHOSTARCH:Go所在的宿主机器的架构,当然这里指的是CPU的架构GOARCH:安装包和工具所在的机器的架构。GOOS:安装包和工具所在的机器的操作系统。GO_GCFLAGS:是否要在编译的时候需要带上5g/6g/8g的参数GO_LDFLAGS:是否要在链接的时候带上5l/6l/8l的参 阅读全文

CPU知识

2013-01-14 11:47 by 轩脉刃, 2649 阅读, 收藏, 编辑
摘要:CPU的指令集是什么 指令集是底层软件与硬件交互的语言。一台计算机的全部指令称为该计算机的指令集。 现在的常见的指令集有: MIPS指令集 ARM指令集 Intel x86指令集 指令集有两种形式,一种是人类可以编程书写的形式(也就是平时所说的汇编语言),另一种是计算机所能识别的形式(就是汇编语言对应计算机的机器语言)。 下面是一个典型的MIPS汇编语言: add $s1,$... 阅读全文

Plan9操作系统基本概念

2013-01-07 16:38 by 轩脉刃, 8894 阅读, 收藏, 编辑
摘要:什么是Plan 9Plan9 是一个操作系统。由贝尔实验室开发的,其主要的负责人是Rob Pike(现在在google工作,负责Go语言的开发)。当然这个操作系统的参与者还有几个大名鼎鼎的人:包括Ken Thompson(C语言和Unix创始人),Dennis Ritchie(C语言和Unix创始人),Brain Kernighan(awk之父),Doug Mcllroy(Unix管道提出者,Unix开发参与者)。为什么有了Unix还需要有Plan9呢?Plan9中最本质的思想是“一切皆是文件”,CPU是一个文件,内存是一个文件,网络是一个文件,任何的东西都是一个文件。Unix是一个多用户分时 阅读全文

Go的pprof使用

2012-12-27 11:07 by 轩脉刃, 61062 阅读, 收藏, 编辑
摘要:go中有pprof包来做代码的性能监控,在两个地方有包: net/http/pprof runtime/pprof 其实net/http/pprof中只是使用runtime/pprof包来进行封装了一下,并在http端口上暴露出来 pprof包 web 服务器 如果你的go程序是用http包启动的web服务器,你想查看自己的web服务器的状态。这个时候就可以选择net/http/ppr... 阅读全文

Go中的CGI包使用

2012-12-25 10:03 by 轩脉刃, 4425 阅读, 收藏, 编辑
摘要:Go中包含有CGI包,net/http/cgi,这篇文章就是来阅读和使用这个包。关于cgi的参数和运行,可以看这篇文章:CGI的一些知识点 CGI包阅读 cgi包的存在就告诉我们一件事情,cgi服务端和客户端完全可以使用Go来写 这个包其实很简单,只有两个文件,其他都是测试程序 child.go host.go host.go是可以直接宿主到go的web服务器上的代码,里面提供了... 阅读全文

go-tour源码阅读

2012-12-13 15:38 by 轩脉刃, 2697 阅读, 收藏, 编辑
摘要:go-tour是一个web项目,具有很强的可读性。 下面先看下里面的目录 appengine:这个包是当你想把go-tour布置到GAE上的时候使用的安装,我们这里只是使用本地安装,所以这里的代码可以不看 solutions:这个文件夹可以忽略,只是对文档中execise的答案,与go-tour网站无关 talks:这个是作者做的关于go-tour的演讲放在这里面,也可以直接忽略 sta... 阅读全文

Go中的闭包

2012-12-09 19:26 by 轩脉刃, 17614 阅读, 收藏, 编辑
摘要:闭包是很多语言必备的功能了,golang也不例外。先看下面的这个例子:package mainimport "fmt"func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum }}func main() { pos, neg := adder(), adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), ... 阅读全文

go-tour练习解答

2012-12-09 19:15 by 轩脉刃, 7361 阅读, 收藏, 编辑
摘要:go-tour对于想学习golang的人来说是一个很好的教程。首先go-tour是有web版本,但是需要翻墙。如果不能翻墙的,也可以在google code上自己下载go-tour源码,go build,run一下,在自己的机器上就可以跑这个教程了。提醒下,如果是后者,这篇文章中的程序对应的import包就需要进行相应修改了。下面给出我的go-tour中的Exercise的解答(在web上已经测试通过)Exercise: Loops and Functions第一个循环10次:package mainimport ( "fmt")func Sqrt(x float64) f 阅读全文

[阅读笔记]fsnotify源码阅读

2012-12-02 18:41 by 轩脉刃, 2902 阅读, 收藏, 编辑
摘要:fsnotify的github地址是https://github.com/howeyc/fsnotifyfsnotify是一个文件夹监控应用。可以使用创建一个watcher来对某个文件夹进行监控文件目录很简单,实际就两个程序文件,fsnotify.go 和 各平台的fsnotify_XXX.go后一个文件是各个不同平台的实现example_test.go中给的是最简单的实际应用先fsnotify.NewWatcher()再开一个goroutine监听文件夹修改的事件然后使用watcher.Watch()来监听一个文件夹fsnotify中的几个public函数Watch,WatchFlags,R 阅读全文

[阅读笔记]Go语言并发之美

2012-11-30 23:10 by 轩脉刃, 2747 阅读, 收藏, 编辑
摘要:文章题目: Go语言并发之美文章链接: http://qing.weibo.com/2294942122/88ca09aa33002ele.html分享笔记: 这篇文章说的是go routine和channel在Go语言中的应用。刚开始看的时候,对文章使用lua的协程来描述goroutine还真是不习惯。建议读者不要跟者作者使用这样的称呼。并发在Go中得到语言级别的支持。文章列出了几个goroutine和channel的使用方法1 id生成器由于id生成器会产生系统调用,所以假设生成随机数这个id生成函数需要很长时间。这个时候就可以使用到并发了。当一个goroutine在运行的时候,另外一个i 阅读全文

Golang之继承模拟

2012-09-13 23:07 by 轩脉刃, 14582 阅读, 收藏, 编辑
摘要:问题由一个需求引起: web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。 如何解决呢? -- 用继承 示例分析继承 首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现: package mainimport( "reflect")type A struct {}func (self A)Run() { c := reflect.ValueOf(self) method := c.MethodByName("Test&quot 阅读全文

使用Golang 搭建http web服务器

2012-09-03 10:39 by 轩脉刃, 74529 阅读, 收藏, 编辑
摘要:Golang在搭建web服务器方面的能力是毋庸置疑的。官方已经有提供net/http包为搭建http服务器做准备。使用这个包能很简单地对web的路由,静态文件,模版,cookie等数据进行设置。至于这个包是否好用,这个就见仁见智了。你可以从net包开始封装一个web框架,当然也可以基于http包封装一个web框架。但是不论你是打算怎么样做,了解基本的net/http包一定是你借鉴的基础。 需求 ... 阅读全文

Golang Gob编码

2012-08-24 09:47 by 轩脉刃, 24301 阅读, 收藏, 编辑
摘要:gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,... 阅读全文

Golang Http Server源码阅读

2012-08-22 15:04 by 轩脉刃, 35005 阅读, 收藏, 编辑
摘要:这篇文章出现的理由是业务上需要创建一个Web Server。创建web是所有语言出现必须实现的功能之一了。在nginx+fastcgi+php广为使用的今天,这里我们不妨使用Go来进行web服务器的搭建。 前言 使用Go搭建Web服务器的包有很多,大致有下面几种方法,直接使用net包,使用net.http包,使用第三方包(比如gorilla)。使用net包就需要从tcp层开始封装,耗费人力物力极大... 阅读全文

Golang runtime 浅析

2012-07-19 15:05 by 轩脉刃, 23119 阅读, 收藏, 编辑
摘要:从Goroot的代码出发,里面有很多代码非常复杂,一点点看吧。最重要的概念就是runtime,golang的程序都是在runtime的基础上运行的(除了与底层直接交互的syscall)。 Runtime 在$goroot/pkg/runtime/中有三个文件非常重要: proc.c stack.h runtime.h 在runtime.h中你... 阅读全文

golang底层实现资料

2012-07-17 18:27 by 轩脉刃, 8728 阅读, 收藏, 编辑
摘要:内存,内存中的变量和指针 http://golangtutorials.blogspot.jp/2011/06/memory-variables-in-memory-and-pointers.html How does reflection work internally? https://groups.google.com/forum/?fromgroups#!topic/golan... 阅读全文

Go语言开发Windows应用

2012-07-05 16:48 by 轩脉刃, 41558 阅读, 收藏, 编辑
摘要:当第一次看到Go程序在windows平台生成可执行的exe文件,就宣告了windows应用也一定是Go语言的战场。Go不是脚本语言,但却有着脚本语言的轻便简单的特性。相较于php和python之类以服务器控制台为主要战场的脚本语言来说,Go语言是真正的圆了“动态语言的应用开发梦”。Windows ApiWindows桌面应用依赖于win api,画出各种应用界面和控件本质上就是调用windows提供的api。Go开发Windows App要做的第一件事情就是封装这些windows api。https://github.com/lxn/go-winapi这个项目已经实现了对winapi的封装。比 阅读全文

论go语言中goroutine的使用

2012-06-30 19:31 by 轩脉刃, 26608 阅读, 收藏, 编辑
摘要:go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的欢喜至极,实现并发简便到简直bt的地步。但是在项目过程中,越来越发现goroutine是一个很容易被大家滥用的东西。goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪:1 goroutine的指针传递是不安全的fun main() { request := request.NewRequest() //这里的NewRequest()是传递回一个type Request的指针 go saveRequestToRedis1(request) go saveReuqe 阅读全文

Go语言_eclipse环境搭建

2012-06-19 18:54 by 轩脉刃, 13514 阅读, 收藏, 编辑
摘要:1 下载eclipse 2 下载goeclipse http://code.google.com/p/goclipse/wiki/InstallationInstructions 3... 阅读全文

Go语言_HTTP包

2012-06-18 22:00 by 轩脉刃, 52634 阅读, 收藏, 编辑
摘要:在Golang中写一个http web服务器大致是有两种方法: 1 使用net包的net.Listen来对端口进行监听 2 使用net/http包 这里是讨论如何使用net/http包创建一个web... 阅读全文

Go语言_net篇

2012-06-16 23:45 by 轩脉刃, 7916 阅读, 收藏, 编辑
摘要:这篇想阅读的是go的net包,net包提供了各种网络IO类型,比如有TCP/IP, UDP, 域名解析, Unix domain socket 使用这个包能很容易发送一个tcp请求,创建服务器也再也不需要像C语言那样createSocket等一系列繁琐的操作了,用起来那感觉不是一般地爽啊! 下面先创建一个简单的Server端: package main import ( "net" "fmt" ) func main() { if ln, err := net.Listen("tcp", ":8080"); err 阅读全文

Go语言_array,slice,map

2012-06-14 22:16 by 轩脉刃, 29092 阅读, 收藏, 编辑
摘要:首先庆祝下golang终于通过了gfw的审核,可以不用翻墙访问了。goer就可以光明正大地访问http://golang.org/ 这次还是要说说array,slice,map。虽然前面已经说过了,... 阅读全文

Go语言_时间篇

2012-06-12 13:50 by 轩脉刃, 31070 阅读, 收藏, 编辑
摘要:哎,先发下牢骚,Go文档还是太弱了,特别是标准库中的文档说明,很多函数几乎就一句话过了。这点确实该向Microsoft的MSDN好好学学。 Go的time包是标准库中的包之一 不用说,几乎是... 阅读全文

Go语言_反射篇

2012-06-10 22:51 by 轩脉刃, 32449 阅读, 收藏, 编辑
摘要:Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/ref... 阅读全文

Go语言_接口篇

2012-06-09 23:13 by 轩脉刃, 16064 阅读, 收藏, 编辑
摘要:在Go中,接口interface其实和其他语言的接口意思也没什么区别。interface理解其为一种类型的规范或者约定。一种类型是不是“实现”了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法... 阅读全文

Go语言_并发篇

2012-06-06 09:55 by 轩脉刃, 29221 阅读, 收藏, 编辑
摘要:当被问到为什么用Go语言,一定不得不提的是Go语言的并发程序编写。在C语言中编写非常繁琐复杂的并发程序在Go语言中总是显得如此便捷。 Go中并发程序依靠的是两个:goroutine和channel ... 阅读全文

Go语言_函数学习篇

2012-06-03 08:38 by 轩脉刃, 10231 阅读, 收藏, 编辑
摘要:这里要说一下是Go函数和一些其他语言不一样的地方 1 函数格式不同 func GetMsg(i int) (r string) { fmt.Println(i) r = "hi" return r}func说明这个是个函数GetMsg是函数名(i int) 函数接收一个int参数(r string) 函数返回一个string类型返回值2 函数可以返回多个返回值这点和c,php都不一样,和lua是一样的 func GetMsg(i int) (r string, err string) { fmt.Println(i) r = "hi" err = &qu 阅读全文

Go语言_基础学习篇

2012-06-02 07:36 by 轩脉刃, 17502 阅读, 收藏, 编辑
摘要:GO文件目录结构该图是go-windows的目录结构如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序bin文件夹:go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。pkg文件夹:第三方库。里面存放你的项目中引用的 阅读全文