Golang

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

2012-10-22 16:37 ilvu999
阅读:3370 评论:1

goroutine与调度器

我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。 这个调度器的原理以及实现值得我们去深入研究一下。支撑整个调度器的主要有4个重要结构,分别是M、G、P、Sched,...阅读全文

阅读:13220 评论:5

Etcd 架构与实现解析

前一段时间的项目里用到了 Etcd, 所以研究了一下它的源码以及实现。网上关于 Etcd 的使用介绍的文章不少,但分析具体架构实现的文章不多,同时 Etcd v3的文档也非常稀缺。本文通过分析 Etcd 的架构与实现,了解其优缺点以及瓶颈点,一方面可以学习分布式系统的架构,另外一方面也可以保证在业务中正确使用 Etcd,知其然同时知其所以然,避免误用。最后介绍 Etcd 周边的工具和一些使用注意事项。 阅读对象:分布式系统爱好者,正在或者打算在项目中使用Etcd的开发人员。 Etcd 按照官方介...阅读全文

阅读:5234 评论:1

Go编码规范指南

转自http://golanghome.com/post/550 Go编码规范指南 序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也能遵循这个规范来写Go代码。 如果你的代码没有办法找到下面的规范,那么就遵循标准库的规范,多阅读标准库的源码,标准库的代码可以说是我们写代码参考的标杆。 格式化规范 go默认已经有了gofmt工具,但是我们强烈建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包. go get...阅读全文

2014-12-14 22:45 hittata
阅读:44765 评论:0

golang编码规范

目录[-]golang编码规范gofmt注释命名控制结构函数(必须)错误处理panicimport缩写参数传递接受者 golang编码规范注:此文档参考官方指南Effective Golang和Golang Code Review Comments进行整理,力图与官方及社区编码风格保持一致。gofmt大部分的格式问题可以通过gofmt解决,gofmt自动格式化代码,保证所有的go代码一致的格式。正常情况下,采用Sublime编写go代码时,插件GoSublilme已经调用gofmt对代码实现了格...阅读全文

阅读:5152 评论:2

用Go语言进行ajax回传

一、后端部分 要想使用ajax,先要准备一个func (http.ResponseWriter, *http.Request)类型的函数来处理前端发过来的请求。 func OnAjax(res http.ResponseWriter, req *http.Request) { io.WriteString(res, "这是从后台发送的数据") } 接下来,要把一个网址和它对应起来,例如主页下的“/ajax”: http.HandleFunc("/ajax", OnAjax) 二、HTML部分 网...阅读全文

2015-03-24 14:37 独立风华
阅读:15254 评论:0

Go和HTTPS

Go和HTTPS 四 30 bigwhite技术志 CA, CNNIC, Go, Golang, http, https, MD5, ngrok, openssl, SHA, SHA-1, SHA256, SSL, TLS, Web, 加密, 单项散列, 密钥, 微信, 摘要, 数字证书, 私钥, 签名 1 Comment 近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTTPS的了解则始...阅读全文

阅读:48458 评论:7

FlatBuffers使用记录(Golang)

试用了下FlatBuffers,把一些东东记录一下。 FlatBuffers 官网: http://google.github.io/flatbuffers/md__go_usage.html 它支持生成Go语言相关的东西,总的使用步骤如下: 1. 定义IDL 接口定义文件,通常命名为.fbs 参考: Writing a schema http://google.github.io/flatbuffers/md__schemas.html 2. 利用flatc 解析生成语言的文件 flatc 参...阅读全文

2015-03-11 12:49 xcltapestry
阅读:5900 评论:0

Go的单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 1.Go实现非线程安全的单例模式(懒汉 就是很懒的单例 哈哈): package singleton type singleton struct { } var instance *singleton func GetInstance() ...阅读全文

阅读:2020 评论:0

服务发现:Zookeeper vs etcd vs Consul

【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考。 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口。管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多。因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口。唯一的问题是我们需要发现端口号,并且让别人知道。 当我们开始在一个分布式系统...阅读全文

2015-09-13 国会山上的猫TuxHu
阅读:16960 评论:0

设计模式-策略模式(Go语言描述)

好久没有更新博客了,最近也是在忙着充电,从今天这篇博客开始,我们来了解一下设计模式。 设计模式 那什么是设计模式呢?首先来看看我从百科上copy下来的概念吧。 设计模式/软件设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 恩,大概的意思就是在撸码界由码神们总结的、能够解决软件设计中反复出现的问题的、由大多数人任何的设计方式,也可以说是一种编码规则。 初始编码我们总是...阅读全文

阅读:2615 评论:0

Go编码规范指南

序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也能遵循这个规范来写Go代码。 如果你的代码没有办法找到下面的规范,那么就遵循标准库的规范,多阅读标准库的源码,标准库的代码可以说是我们写代码参考的标杆。 格式化规范 go默认已经有了gofmt工具,但是我们强烈建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包. go get golang.org/x/tools/cmd/goimports 不同的编辑器有不...阅读全文

阅读:1930 评论:0

etcd 使用小记

咱们这不讲安装, 只讲使用. etcd,consul 都是分布式KV, 一般用于服务发现; 1 注册服务 这里使用 etcd.clientv3搞事情, GoDoc在 这, 以下是伪代码 // key 随你制定, 只要能标识是那个服务器(比如 root/game/node_1)即可. value 可以包含addr, 状态, 优先度等信息 client.OpPut(key,value) 这里的小提示: 最好实现健康检查, 再好的代码也有跑不动的一天, 好像etcd的健康检查只支持ttl(服务向etc...阅读全文

2017.06.07 13:53* bysir
阅读:9885 评论:0

golang http2 client 和server 使用非TLS 模式(h2c)

研究了一下 golang 的http2 用法 这里先普及几个概念 h2,基于TLS之上构建的HTTP/2,作为ALPN的标识符,两个字节表示,0x68, 0x32,即https h2c,直接在TCP之上构建的HTTP/2,缺乏安全保证,即http在HTTP/2 RFC文档出现之前,以上版本字段需要添加上草案版本号,类似于h2-11,h2c-17 首先写了一个服务器的代码 import ( "fmt" "html" "net/http" "golang.org/x/net/http2" ) fun...阅读全文

2017.06.21 22:22 cout_helloworld
阅读:6245 评论:0

GoLang邮件发送Demo(继上篇msmtp)

GoLang越来越被看好,流行只是时间的问题了,闲暇时间玩玩Go。 下面是发送邮件的demo,替换自己的邮箱,完全可以正常跑起来,用的是net/smtp包: package main import ( "fmt" "net/smtp" "strings" ) func SendToMail(user, password, host, to, subject, body, mailtype string) error { hp := strings.Split(host, ":") auth :=...阅读全文

2017-11-06 23:00 purelightme
阅读:1147 评论:0

go语言与c语言的相互调用

最近由于工作原因,需要实现go语言与c语言的相互调用。由于go语言与c语言有着千丝万缕的暧昧关系,两者之间的调用可以通过语言层面实现。下文是对此的总结。 go语言调用c语言 以下为一个简短的例子: package main // #include <stdio.h> // #include <stdlib.h> /* void print(char *str) { printf("%s\n", str); } */ import "C" import "unsafe" func main() {...阅读全文

2018-02-25 23:40:15 p了个c
阅读:1740 评论:2

10秒钟,让你的方法变为RPC服务

rpcx一个服务治理的Go RPC框架, 拥有非常多的特性,支持跨语言的服务调用。 众多的特性可以参考doc.rpcx.site。它的服务治理的特性深受阿里巴巴的Dubbo框架的启发。 在实际的产品应用中,用户使用两台服务器+8台日志搜集服务(Client),轻松处理每天几十亿的服务调用, 除了中间一个路由器硬件闪断, 整个系统平稳运行多半年。 相比较之前Java的实现, 服务器节省了一半。 用户使用rpcx框架重构后的系统每月为公司节省了几十万元的成本。 rpcx框架的一个设计哲学就是简单。不...阅读全文

2018年02月13日 smallnest
阅读:1417 评论:0

protobuffer、gRPC、restful gRPC的相互转化

文档 grpc中文文档 grpc-gateway,restful和grpc转换库 protobuf 官网 protobuf Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。 优点 平台无关,语言无关,可扩展; 提供了友好的动态库,使用简单; 解析速度快,比对应的XML快约20-100倍; 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。 安装 参...阅读全文

2018-03-06 20:34:42 Given
阅读:3839 评论:3

基于go搭建微服务实践教程 (概览)

原文:Go Microservices blog翻译:秦伟格转载请注明原文及翻译。 译者按:公司转向重新做一套支付系统,并打算用golang的微服务来实现。于是上网上找一找教程,发现中文教程都不是很系统,于是找到了这一篇,自己实践下来,感觉深浅适中,讲解清晰,一步一步可以跟着做下来,之后能明白微服务大概的意思。所以用业余时间翻译了一下,献给大家。(笔者居住在国外,但第一次翻译技术文章,希望大家能指正不足) 这一系列博客会用go语言搭建一个为服务系统,这个过程中,我们会逐步加入新的东西,并且最后让...阅读全文

2018-05-05 14:34:36 瘦瘦鸭
阅读:4023 评论:0

用go实现聊天室(WebSocket方式)

前言 刚入门go语言和beego框架,通过一个简单聊天室的实现,来趁热练习。 详细代码见github。 一、WebSocket协议 在实现之前,我们需要解决一个底层问题。 总所周知,HTTP协议是单向传输协议,只能由客户端主动向服务端发送信息,反之则不行。而在聊天室中,一个用户发送一条消息,服务器则需要将该条消息广播到聊天室中的所有用户,这想通过HTTP协议实现是不可能的。 除非,让每个用户每隔一段时间便请求一次服务器获取新消息。这种方式称为长轮询。但其缺点十分明显,非常消耗资源。 为了解决这个...阅读全文

阅读:11114 评论:0