Go语言中文网 为您找到相关结果 3129

go微服务框架go-micro深度学习(四) rpc方法调用过程详解

上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取server的地址信息,就可以和服务建立连接,然后就可以进行通信了。这篇帖子详细说一下,go-micro的通信协议、编码,和具体服务方法的调用过程是如何实现的,文中的代码还是我github上的例子: gomicrorpc go-micro 支持很多通信协议:http、tcp、grpc等,支持的编码方式也很多有json、protobuf、bytes、jsonrpc等。也可以根据自己的需要实现通信协议和编码方式。go-micro 默认的通信协议是http,默认的编码方式是protobuf,我就以默认的方式来分解他的...阅读全文

博文 2019-08-01 13:58:45 li-peng

【Zinx第二章-初识Zinx框架】Golang轻量级并发服务器框架

【Zinx教程目录】Zinx源代码https://github.com/aceld/zinx (请拷贝网址,在浏览器打开[简书不让自动跳转])完整教程电子版(在线高清)-下载Zinx框架视频教程(框架篇)(完整版下载)链接在下面正文 Zinx框架视频教程(应用篇)(完整版下载)链接在下面正文 Zinx开发API文档Zinx第一章-引言Zinx第二章-初识Zinx框架Zinx第三章-基础路由模块Zinx第四章-全局配置Zinx第五章-消息封装 Zinx第六章-多路由模式 Zinx第七章-读写分离模型 Zinx第八章-消息队列及多任务 Zinx第九章-链接管理 Zinx第十章-连接属性设置 【Zinx应用案例-MMO多人在线游戏】(1)案例介绍(2)AOI兴趣点算法(3)数据传输协议protoc...阅读全文

博文 2019-07-03 11:32:44 aceld

MaxCompute访问TableStore(OTS) 数据

摘要: MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求。 免费开通大数据服务:https://www.aliyun.com/product/odps **前言** MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求。而MaxCompute SQL作为分布式数据处理的主要入口,为快速方便处理/存储EB级别的离线数据提供了强有力的支持。 随着大数据业务的不断扩展,新的数据使用场景在不断产生,在这样的背景下,MaxCompute计算框架也在不断的演化,原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的开放给不同的外部数据。 之前我们介绍了怎样[在MaxCompute上处理存储在OSS上...阅读全文

使用 Go 读写请求

简介 读取请求参数 path 中的参数 query 中的参数 from 中的参数 模型绑定 返回响应 总结 当前部分的代码 简介 使用 web 框架, 最基础的事情就是读写请求了, Gin 支持很多种类的请求参数, 也支持多种格式的响应. 读取请求参数 path 中的参数 使用 Param() 可以获取 path 中的参数. 定义在 path 中的参数有两种格式, 一个是 :name 的以冒号开头的, 另一种是 *action 的以星号开头的. :name 是必定匹配的, 一定要有值, 不能为空. 下面的代码中, 第一个例子就是如此, 用 :name 来表示用户的名字, 这样就可以在路径中表示任意的用户名了. *action 是可选的, 如果不存在, 就会忽略掉, 比如是可以匹配到 /use...阅读全文

博文 2019-10-07 00:35:53 帅气猫咪

GoLang 随笔 - iota 的特性与用法

依靠编译器完成自增 const ( a = iota // a = 0 b // b = 1 c // c = 2 ) 利用只写变量 _ 跳过自增 const ( a = iota // a = 0 b // b = 1 _ _ c // c = 4 ) 可以插入其他常量,且不影响iota自增 const ( a = iota // a = 0 b = "b" // b = "b" c = iota //c = 2 d // d = 3 ) 如果定义在同一行 const ( a, b = iota , iota + 1 c, d e, f ) // a = 0, b = 1, c = 2, d = 3, e = 4, f = 5 定义位掩码表达式 const ( a = 1 << iota ...阅读全文

博文 2019-07-21 06:32:37 凉丶心园

Go基础学习记录之阻止Session劫持(Preventing session hijacking)

阻止Session劫持(Preventing session hijacking) Session劫持是一种常见且严重的安全威胁。在与服务器通信时,客户端使用Session ID进行验证和其他目的。不幸的是,恶意第三方有时可以跟踪这些通信并找出客户端Session ID。本次分享,将向您展示如何为教育目的劫持Session。 Session劫持过程 以下代码是count变量的计数器: // WelcomeLogin 欢迎登录页 func WelcomeLogin(w http.ResponseWriter, r *http.Request) { session, err := appSession.SessionStart(w, r) if err != nil { fmt.Fprintf(...阅读全文

博文 2018-11-06 14:34:44 DurbanZhang

RabbitMQ系列笔记主题订阅模式

导语 昨天的内容主要讲了RabbitMQ的发布订阅模式和路由模式,都很好的满足了我们的日志打印,但是如果说,我对日志的打印,希望可以过滤掉一些内容呢,比如说,在打印错误日志的时候,只打印login时的错误?这个时候,就需要我们使用主题订阅的模式,可以说,主题订阅模式可以完全代替路由模式,因为在主题订阅模式中,如果没有响应的关键词,便和路由模式完全一样。 主题交换器介绍 在使用主题交换器时需要注意以下几点 在使用routing_key,必须是有点分隔符进行分隔 * 可以代表代替一个单词 # 可以代替0个或多个单词 案例 我们对我们之前的例子做修改,这次修改希望生产者可以在运行的时候指定路由需要增加下面这个函数 func severityFrom(args []string) string { ...阅读全文

博文 2019-08-10 16:32:46 陌无崖

三、【Zinx第三章-基础路由模块】Golang轻量级并发服务器框架

【Zinx教程目录】 Zinx源代码: https://github.com/aceld/zinx 一、Zinx第一章-引言 二、Zinx第二章-初识Zinx框架 三、Zinx第二章-基础路由模块 三、Zinx框架基础路由模块 ​ 现在我们就给用户提供一个自定义的conn处理业务的接口吧,很显然,我们不能把业务处理业务的方法绑死在type HandFunc func(*net.TCPConn, []byte, int) error这种格式中,我们需要定一些interface{}来让用户填写任意格式的连接处理业务方法。 ​ 那么,很显然func是满足不了我们需求的,我们需要再做几个抽象的接口类。 ​3.1 IRequest 消息请求抽象类 ​ 我们现在需要把客户端请求的连接信息 和 请求的数据...阅读全文

博文 2019-01-31 08:34:43 IT无崖子

理解Kubernetes网络:ingress篇

在本系列的第一篇文章中,我讲了Pod跨Kubernetes集群中的节点相互连接的网络。第二篇重点讲了服务网络如何为Pod提供负载平衡,以便群集内的客户端可以与它们可靠地通信。对于这第三篇也是最后一篇文章,我想以这些概念为基础来展示集群外的客户端如何使用同一服务网络连接到Pod。由于各种原因,这很可能是三篇涉及最多的,并且掌握前两篇关于pod和service的内容是理解本篇的的前提。 路由并不是负载均衡 在上一篇文章中,我们创建了一个具有两个Pod的部署,并为该服务分配了一个IP,称为“集群IP”,针对Pod的请求已发送到该IP。我将在此处继续根据该示例进行构建。回想一下,该服务的群集IP 10.3.241.152位于与Pod网络以及节点本身所在的网络不同的IP地址范围内。我称这个地址空间为“...阅读全文

go微服务框架go-micro深度学习(三) Registry服务的注册和发现

服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性。go-micro框架的服务发现有自己能用的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。 go-micro在客户端做的负载,典型的Balancing-aware Client模式。 服务端把服务的地址信息保存到Registry, 然后定时的心跳检查,或者定时的重新注册服务。客户端监听Registry,最好是把服务信息保存到本地,监听服务的变动,更新缓存。当调用服务端的接口是时,根据客户端的服务列表和负载算法选择服务端进行通信。 go-micro的能用Registry接口 type Registry interface { Register(*Service, ...RegisterOpti...阅读全文

博文 2019-08-01 13:58:39 li-peng

使用Vim编辑器开发Go的简单入门

今天是一次做Go的笔记,一开始直接打开Github上的Go项目然后跑到Wiki位置,然后作者列出了一堆学习Go的资料,这里我 以第一个学习资料https://tour.golang.org/作为Go学习到入门。然后为了训练我的终端运用 能力还有Vim下的编码能力这里我使用到了tmux和Vim编辑器,然后之前已经在VIM里面安装了Vim-go插件了,所以在之前 的Go项目文件目录下可以直接使用命令模式使用:Go来执行相应的操作。如果项目报错都话你可能是没有按照 Vim-go的要求现在项目里面执行:GoInstallBinaries. You will also need to install all the necessary binaries. vim-go makes it easy to...阅读全文

Swoft 2.0.7 如期而至

什么是 Swoft ? Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架。Swoft 能像 Go 一样,内置协程网络服务器及常用的协程客户端且常驻内存,不依赖传统的 PHP-FPM。有类似 Go 语言的协程操作方式,有类似 Spring Cloud 框架灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等。 Swoft 通过长达三年的积累和方向的探索,把 Swoft 打造成 PHP 界的 Spring Cloud, 它是 PHP 高性能框架和微服务治理的最佳选择。 Github https://github.com/swoft-clou... Swoft v2.0.7 2.0.7 在 2.0.6 上继续扬帆,已在大量的生...阅读全文

博文 2019-11-20 11:32:45 stelin

Go语言11-日志系统客户端相关组件

tailf 组件 查看log日志,会经常使用到tail -f命令实时跟踪文件变化。也可以用Go语言的代码来实现同样的功能,这样就可以直接用到项目中去了。这里不用重复造轮子,有一个第三方的库已经实现了这个功能: import "github.com/hpcloud/tail" HP团队出的tail库,常用于日志收集。这里主要就是看看如何使用。 示例代码 package main import ( "os" "fmt" "github.com/hpcloud/tail" "time" ) func main () { filename := "tailf_test.txt" // 指定查看哪个文件 tails, err := tail.TailFile(filename, tail.Config...阅读全文

博文 2018-12-03 19:35:15 骑士救兵

Aura: 一个专注于监控和采集的 SDK 组件

## ???? Overview ☁️ 在云原生时代,以 [Prometheus](https://prometheus.io) 为中心的监控生态已经逐渐完善,社区也出现了大量的中间件,数据库以及各种基础组件的 exporter,Prometheus 官方也给出了维护了一份 exporter 列表 [instrumenting/exporters](https://prometheus.io/docs/instrumenting/exporters)。 但是 Prometheus 的缺点和它的优点一样明显,缺少高可用的集群方案。想了解 Prometheus 和监控系统的同学可阅读 [Prometheus 折腾笔记](https://github.com/chenjiandongx/prome...阅读全文

博文 2020-06-01 10:24:46 chenjiandongx

您需要了解的有关Kubernetes服务质量(QoS)

服务质量(QoS)类是Kubernetes的概念,它确定Pod的调度和驱逐优先级。 Kubernetes调度程序使用QoS类来做出有关将Pod调度到节点上的决策。 Kubelet使用它来管理驱逐pod的顺序,以及使用高级CPU管理策略允许更复杂的pod调度决策。 QoS类由Kubernetes本身分配给Pod。但是,DevOps可以通过处理Pod内各个容器的资源请求和限制来控制分配给容器的QoS类。 在kubernetes 中存在三种QoS类: Guaranteed Burstable BestEffort 让我们看一下不同的QoS类,看看它们如何与Kubernetes Scheduler和Kubelet一起工作。 Guaranteed 如何分配Pod的QoS Guaranteed 等级? ...阅读全文

Gin框架系列03:换个姿势理解中间件

什么是中间件 中间件,英译middleware,顾名思义,放在中间的物件,那么放在谁中间呢?本来,客户端可以直接请求到服务端接口。 现在,中间件横插一脚,它能在请求到达接口之前拦截请求,做一些特殊处理,比如日志记录,故障处理等。这就是今天要讲述的中间件,那么,它在Gin框架中是怎么使用的呢? 如何使用中间件 我们来看一下逢gin必调的方法Default,方法中有一个变量engine,它Use了Logger和Recovery两个函数,这两个函数就是gin框架的日志和故障处理中间件。 func Default() *Engine { debugPrintWARNINGDefault() engine := New() engine.Use(Logger(), Recovery()) return...阅读全文

博文 2020-04-09 16:36:08 平也

[系列] - go-gin-api 规划目录和参数验证(二)

概述 首先同步下项目概况: 上篇文章分享了,使用 go modules 初始化项目,这篇文章咱们分享: 规划目录结构 模型绑定和验证 自定义验证器 制定 API 返回结构 废话不多说,咱们开始吧。 规划目录结构 ├─ go-gin-api │ ├─ app │ ├─ config //配置文件 │ ├─ config.go │ ├─ controller //控制器层 │ ├─ param_bind │ ├─ param_verify │ ├─ ... │ ├─ model //数据库ORM │ ├─ proto │ ├─ ... │ ├─ repository //数据库操作层 │ ├─ ... │ ├─ route //路由 │ ├─ middleware │ ├─ route.go │...阅读全文

博文 2019-08-28 13:02:37 新亮

《Go 语言程序设计》读书笔记 (三) 方法

方法 方法声明 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 package geometry import "math" type Point struct{ X, Y float64 } // traditional function func Distance(p, q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y) } // same thing, but as a method of the Point type func (p Point) Distance(q Point) float64 { return math.Hypot(...阅读全文

博文 2019-12-24 14:32:42 KevinYan

Android程序员的Java后台学习建议

作为一个原生Android开发,一路走来经历了Java 、 Koltiln的洗礼;在“原生要凉”的氛围下学习Cordova、ReactNative、Weex、Flutter 等跨平台框架;之后又在“大前端”的口号下延伸到React、Vue 等前端框架的学习;最终面对“全栈”的诱惑,又撸起了 SpringBoot的 Java web 开发。 Android 开发作为“安身立命”的资本,在面对如今“移动要凉”的氛围,我们在沉住气“纵向进修”的同时,有时也希望横向拓展自身的能力,而 Android 开发在这一方面有着先天的优势,Java 和良好的开放氛围给予了我们更多可能。 本文主要讲述本人在 Java Web 开发上的学习选择,希望能在一定某些方面帮到大家,这里也并不是安利转型,“全栈”并不是一...阅读全文

博文 2019-01-13 18:34:40 恋猫月亮

GO语言学习笔记(一)Go语言的初步了解

一·、Go语言的官方网站https://golang.org/dl/二、安装Go语言Linux版本: tar zxf go1.11.4.linux-amd64.tar.gz mv go /usr/local/ 三、设置GOPATH和GOROOT环境变量 vim /etc/profile 增加这三行: export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH export GOPATH=$GOROOT/gocode 使其生效:source /etc/profile 四、验证 执行:go version go version go1.11.4 linux/amd64 五、Go环境变量介绍 执行:go env GOARCH="amd64" ...阅读全文

博文 2019-01-24 18:35:17 Mr大表哥

面试都在问的微服务,一文带你彻底搞懂!

来自公众号:后端技术学堂 作者LemonCoder 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。 在座的各位都写过单体程序,给大家举个栗子,刚开始写代码你写helloworld 程序就是单体程序,一个程序包含所有功能,虽然helloworld 功能很简单。 单体应用程序的优点 开发简洁,功能都在单个程序内部,便于软件设计和开发规划。 容易部署,程序单一不存在分布式集群的复杂部署环境,降低了部署难度。 容易测试,没有各种复杂的服务调用关系,都是内部调用方便测试。 单体应用程序的缺点 单体程序的缺点一开始不是特别明...阅读全文

博文 2020-05-28 06:32:45 码农小光

[系列] - 使用 go modules 包管理工具(一)

概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加。 废话不多说,咱们开始吧。 创建一个项目,咱们首先要考虑一个依赖包的管理工具。 常见的包管理有,dep、go vendor、glide、go modules 等。 最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。 现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。 说一个环境变量:GO111MODULE,默认值为 auto 。 当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 v...阅读全文

博文 2019-08-26 19:32:46 新亮

[CatServer 服务器框架] Group 新调度实现

# 调度包实现 ## 实现 ### 调度定义 > 采用 生产消费 的处理方式 > > 1. 创建多个消费者 > 2. 将生产的值发送给消费者 > 3. 在关闭消费者的情况下挂起生产者 > 4. 在无法消费的情况下储存到缓冲队列,并通知回调函数. > 5. 关闭调度时等待缓冲队列与剩余调度执行完成. > > 注: > > >1. 超时回调会挂起调度 > >2. 在回调中调用 Close/SetWorker 需要携程运行 #### 1. 创建消费者 > 创建一个缓冲为 n 的消费者通道 ```go var consumer chan interface{} // 消费者 consumer = make(chan interface{}, n) ``` #### 2. 创建生产者 ```go va...阅读全文

Go-Spring : Another Go Style!

Go-Spring 是模仿 Java 的 Spring 全家桶实现的一套 GoLang 的应用程序框架,仍然遵循“习惯优于配置”的原则,提供了依赖注入、自动配置、开箱即用、丰富的第三方类库集成等功能,能够让程序员少写很多的样板代码。 1.前言 去年年底的时候,我所在的团队由于业务调整,技术栈也随之发生改变,由之前的 PHP +Java 变成了 Golang + Java。初次接触 Golang,颇不适应,首先就是它那不同一般的语法,然后是没有一个成熟好用的开发框架。语法问题时间长了代码写的多了也就慢慢适应了,但是没有顺手的开发框架就太影响开发效率和代码质量了,作为一个资深的 Java + Spring 全家桶开发者,我希望能改变这一现状。经过一段时间的使用和探索,我发现完全可以搞出一套像 S...阅读全文

博文 2019-08-12 16:04:08 滴滴技术

为什么踏上了Golang之旅?

作为一个 PHPer AND NODEer,最近踏上了golang的学习之旅。为什么做了这个决定呢?第一大厂都已经对php的抛弃了,虽然现在有swoole,可是大厂真的对它做了很好的支持嘛?不太懂,至少现在swoole的生态,和应用的场面是和node.js差不多的。 因为用习惯了laravel,有composer包的支持,所以现在好多国产PHP框架把JAVA 的那套Spring 微服务搞起来,也支持composer,可是并不像laravel那样原生的支持。如果你遇到了队列,[当然Swoole可以处理],redis,还有mongodb等一系列扩展的时候,你永远逃离不了的是,你必须安装PHP扩展,还有使用一些来阿里云服务的是PHP的SDK都是以HTTP API协议进行调用的,如果你的服务在高风期...阅读全文

博文 2019-11-10 21:33:27 更多精彩内容我为什么不看好 PHP ? 转载看了有点糟心半瓶阳光o_o为什么Laravel会脱颖而出如来神掌laravel 原理机制Mr_Z_HengLaravel如何优雅的使用Swoole万年场保安从PHP 到Golang 的笔记 ( 转 )沐青之枫

Gin框架系列03:换个姿势理解中间件

什么是中间件 中间件,英译middleware,顾名思义,放在中间的物件,那么放在谁中间呢?本来,客户端可以直接请求到服务端接口。 现在,中间件横插一脚,它能在请求到达接口之前拦截请求,做一些特殊处理,比如日志记录,故障处理等。这就是今天要讲述的中间件,那么,它在Gin框架中是怎么使用的呢? 如何使用中间件 我们来看一下逢gin必调的方法Default,方法中有一个变量engine,它Use了Logger和Recovery两个函数,这两个函数就是gin框架的日志和故障处理中间件。 func Default() *Engine { debugPrintWARNINGDefault() engine := New() engine.Use(Logger(), Recovery()) return...阅读全文

博文 2020-04-09 16:34:22 平也

Go 编程:那些隐晦的操作符

文发布于个人站点: GitDiG.com, 原文链接: Go 编程:那些隐晦的操作符 本篇作为 Go 编程“边角料”的最后一篇,主要针对 Go 语言提供的操作符进行一次总结。刚好回应上篇一位读者关于表达式是否要加'.'的问题做个回复。 在 Go 语言中,一共提供了47个操作符,包括标点符号。摘自官方文档,分别是: + & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^= 除以上操作符以外,在 Go 语言中还有一个特殊的符号 _, 以及一个非 Go 语言操作符的特殊字节?。 刨去一些常用的操作符,对其中较隐晦...阅读全文

博文 2019-07-17 08:02:46 JayL

Golang接口的小疑问

学习接口的时候有个2个小疑问 接口的方法是否能被部分实现? 实现部分接口方法的结构体是否能转化为该接口类型? 写了点代码测试,如下: package main import "fmt" type Human struct { age int8 gender int8 } type Man interface { GetAge() int8 GetGender() int8 } func (human *Human) GetAge() int8 { return human.age } func main(){ var humanS = Human {32, 1} fmt.Printf("%d", humanS.GetAge()) var man Man man = humanS fmt.Pr...阅读全文

博文 2019-09-29 21:33:05 aside section ._1OhGeD

Go基础系列:WaitGroup用法说明

正常情况下,新激活的goroutine的结束过程是不可控制的,唯一可以保证终止goroutine的行为是main goroutine的终止。也就是说,我们并不知道哪个goroutine什么时候结束。 但很多情况下,我们正需要知道goroutine是否完成。这需要借助sync包的WaitGroup来实现。 WatiGroup是sync包中的一个struct类型,用来收集需要等待执行完成的goroutine。下面是它的定义: type WaitGroup struct { // Has unexported fields. } A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls ...阅读全文

博文 2018-11-23 09:12:07 f-ck-need-u

五分钟学Java:如何才能学好Java Web里这么多的技术

副本_未命名.jpg 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 系列文章介绍 本文是《五分钟学Java》系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章,有兴趣看本系列更多文章可以关注我的公众号【Java技术江湖】 系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更加浅显易懂,并且我也会把我学习时用的资料,书籍和文章拿出来分享给大家,节省你我的时间。所谓授人以鱼也要授人以渔,是本系列文章希望达到的目标。 本文思维导图 在这里插入图片描述 什么是Java Web 不知道Java We...阅读全文

博文 2020-03-05 03:32:48 程序员黄小斜

详解GO语言,一文告诉你PHP程序员为什么要学习GO语言?

很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。 发展历史2007年9月,Rob Pike在Google分布式编译平台上进行C++编译,在漫长的等待过程中,他和Robert Griesemer探讨了程序设计语言的一些关键性问题,他们认为,简化编程语言相比于在臃肿的语言上不断增加新特性,会是更大的进步。随后他们在编译结束之前说服了身边的Ken Thompson,觉得有必要为此做一些事情。几天后,他们发起了一个叫Golang的项目,将它作为自由时间的实验项目。2008年5月 Google发现了GO语言的巨大潜力,得到了Google的全力支持,这些人开始全职投入G...阅读全文

博文 2019-12-11 15:33:07 六星教育技术共享

已刪除

出現這個問題要怎麼解決 原先用goland編輯器正常 使用visual studio code編輯器卻發生問題 main.go:13:2: import "./a" is a program, not an importable package a\main.go:13:2: cannot find package "./a" in: C:\Users\ASUS\Desktop\golang\uintptrescapes.dir\a exit status 1 Process exiting with code: ...阅读全文

博文 2019-07-13 10:04:50 cho010012

用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解

摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app。其同时解决了开发效率、发版速度以及用户体验三个核心问题。那么WEEX是如何实现的?目前WEEX已经完全开源,并捐给Apache基金会,我们可以通过分析其源码来一探究竟。 **点此查看原文:http://click.aliyun.com/m/43048/** 作者:阿里-移动云-大前端团队 传统的移动端开发,一个完整的业务需要维护三份终端代码:Android、iOS、H5,这带来了极大的开发成本以及维护成本。尤其是对处于业务初创期需要快速试错的业务以及需要支持定期运营活动的业务。所以业界也一直在探索跨平台方案,旨在通过一套代码完成各个终端的业务逻辑。相关方案经过不断演化...阅读全文

python协程进阶,原来实现一个事件循环可以如此简单!

引言 目前很多公司选择将python项目使用golang重构,很大一方面原因是因为golang的并发能力,golang自带的语法糖支持使并发编程变的相对简单,也更能充分的使用多核CPU的计算资源。 相应的,python长期受制于GIL,无法在多线程时使用多核CPU,所以一直以来在谈及python的缺陷时,性能总是无法回避的一个问题。当然,一些python著名的第三方组织也一直通过各种手段来改善python的并发性能,如twisted的异步模型使用事件驱动机制来提升python性能,著名的爬虫框架scrapy便是以twisted作为底层网络库来开发的,还有gevent,它使用greenlet在用户态完成栈和上下文切换来减少切换带来的性能损耗,同样还有著名的web协程框架tornado,他使用生...阅读全文

博文 2019-06-30 18:32:39 急速奔跑中的蜗牛

Go 编程: 从 K8S 资源定义到 YAML 配置框架的实现

文地址:Go 编程: 从 K8S 资源定义到 YAML 配置框架的实现 在 Go 语言中,实现 YAML 配置定义与解析是非常简单的, 以最新YAML 包 gopkg.in/yaml.v3 为例: import "gopkg.in/yaml.v3" type StructA struct { A string `yaml:"a"` } type StructB struct { StructA `yaml:",inline"` B string `yaml:"b"` } var b StructB err := yaml.Unmarshal([]byte(data), &b) 非常直白,貌似不值一谈。再看看现实, YAML 文件用途之广泛,特别是在Kubernetes 平台上的应用,简直就是...阅读全文

golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-micro 入门笔记2.1 micro工具之micro api 本文应用环境 名称 描述 操作系统 win10 go version go version go1.12.7 windows/amd64 GOPATH E:\winlion\gopath GOPROXY goproxy.io G111MODULE on 命令行工具 cmder工具,可自行百度安装 命令行说明 micro web指令全部参数如下 NAME: micro web - Run ...阅读全文

博文 2019-08-26 10:04:16 非正式解决方案

Go Web 编程之 Hello World

概述 计划写一个讲 Go Web 编程的系列文章。从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识。然后到框架的使用。中间会穿插一些源码的分析。最后做一个实战项目。 目前 Go 社区已经有非常多关于 Web 开发的库或框架。大而全的有beego,revel。超高性能的有echo,fasthttp,gin(目前 GitHub 星标最多)。还有不少专注于具体某个方面的,最多要属路由了,例如:mux/httprouter。 那为什么还要从最原始的 net/http 包开始学起?因为这些库/框架大多是基于 net/http 包做了包装,提供易于使用的功能,如路由参数(/:name/:age)/路由分组等。熟练掌握了基础知识和 net/http,学习其他框架必...阅读全文

博文 2019-12-10 16:34:45 darjun

Go defer, panic&recover

Go defer, panic&recover 定义与使用 defer A defer statement pushes a function call onto a list. The list of saved calls is executed after the surrounding function returns. Defer is commonly used to simplify functions that perform various clean-up actions. defer语句将函数调用放进一个栈,并在最终函数return前调用这些函数。也就是将一系列函数延迟执行,常常用来做一些清理操作。 那为什么需要defer?直接在函数return前调用这些函数不行?看个...阅读全文

博文 2019-12-27 19:32:40 陆铭恒

golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布

本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-micro 入门笔记2.1 micro工具之micro api golang微服务框架go-micro 入门笔记2.2 micro工具之micro web broker代理 微服务之间需要通过broker来传递消息,go-micro支持http/nats/memory三种broker,其中http是默认的broker。 同时,go-micro以强大的插件形式,提供如下几种常见的broker。 $ls gocloud/ googlepubsub/ grpc/ kafka/ mqtt/ nats/ ns...阅读全文

博文 2019-08-29 16:32:54 非正式解决方案

Container - 为 Go语言而生的运行时依赖注入容器

Container 是一款为 Go 语言开发的运行时依赖注入库。Go 语言的语言特性决定了实现一款类型安全的依赖注入容器并不太容易,因此 Container 大量使用了 Go 的反射机制。如果你的使用场景对性能要求并不是那个苛刻,那 Container 非常适合你。 并不是说对性能要求苛刻的环境中就不能使用了,你可以把 Container 作为一个对象依赖管理工具,在你的业务初始化时获取依赖的对象。 使用方式 go get github.com/mylxsw/container 要创建一个 Container 实例,使用 containier.New 方法 cc := container.New() 此时就创建了一个空的容器。 你也可以使用 container.NewWithContext(...阅读全文

博文 2020-05-25 18:32:43 mylxsw

Go 译文之词法分析与解析 - Part One

作者:Adam Presley | 地址:Writing a Lexer and Parser in Go - Part 1 译者前言 一直对词法分析与解析的话题比较感兴趣,最近发现了好几篇相关的优秀文章,准备好好翻译和研究下。我的理解,词法分析与解析的应用还是比较广泛的,无论简单的配置文件、各种模板语言、还是我们每天在写编程语言都离不开它。 本篇文章一个系列文章的第一篇,主要介绍的是词法分析与解析的一些基础概念,包括什么是词法分析,什么是解析,Token 如何表示等等。 正文如下: 从今天开始,我将会用三篇文章介绍在 Go 中如何构建一个简单的词法分析与解释器。文中介绍的内容主要是基于 Rob Pike 在 2011 年关于 Lexical Scanning In Go 的演讲。这个系列文...阅读全文

博文 2019-07-20 19:04:16 波罗学

Mix PHP V2.1 发布,基于 Swoole 4.4+ 单线程协程 PHP 框架

MixPHP 是什么 一个基于 Swoole 开发的高性能 PHP 框架,经过两年发展收获了很多中小型团队的支持,框架版本经历了: V1.*: 基于 Swoole 的常驻内存型 PHP 高性能框架 V2.0: 基于 Swoole 的 FastCGI、常驻内存、协程三模 PHP 高性能框架 V2.1: 基于 Swoole 4.4+ 单线程协程 PHP 框架 ???? 更新 本次 v2.1 重构版本主要修改了框架核心封装部分,而功能库如:Database/Redis/Auth 等库使用方式只是微调,大致重构内容如下: mix-php/mix 库修改为子模块的方式包含框架所有库,require mix/mix 时该库会替换 composer 上的同名库,用户提交 PR 时只需修改该库提交,贡献将出...阅读全文

博文 2019-10-17 16:33:07 aside section ._1OhGeD

Dubbo2.6.x—注册中心源码分析 dubbo-registry模块 (api and zookeeper)

文章有点长,亲,要慢慢看! 1. 概述 1.1 注册中心作用 在Dubbo中,注册中心为核心模块,Dubbo通过注册中心实现各个服务之间的注册与发现等功能,而本次源码的分析为registry模块的api和zookeeper的实现。 服务的提供者和消费者都需要把自己注册到注册中心,提供者让消费者感知到服务存在,从而消费者发起远程调用,也让服务治理中心感知到有服务提供者上线;消费者则是让服务治理中心可以发现自己。 1.2 Zookeeper Zookeeper是一个提供分布式协调服务的开源软件,常用于解决分布式应用中经常遇到的一些数据管理问题。Zookeeper功能非常强大,可以实现如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能。关于Zookeeper,大家如果想了解可以关注一...阅读全文

博文 2020-01-11 21:32:47 苡仁ilss

好程序员web前端学习教程之Node Js流程

好程序员web前端学习教程之Node Js流程1,项目前期准备: 以express框架为例npmiexpress-generator-g//全局安装express框架express-e//生成express应用骨架npmi//安装依赖npmstart//在3000端口监听 拓展:目前最市面上最流行的node框架有:--Sail.jsSails.js就像是Node.js平台上的Rails框架。这是一个可靠可伸缩的开发框架,面向服务的架构,提供数据驱动的API集合。用来开发多玩家游戏、聊天应用和实时面板引用非常方便,也可用于开发企业级Node.js应用。Sails.js基于Node.js,Connect,Express和Socket.io构建。--Koa.jskoa.js是下一代的Node.js...阅读全文

博文 2019-03-29 13:42:32 hcxy

五分钟学Java:如何才能学好Java Web里这么多的技术?

副本_未命名.jpg 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 系列文章介绍 本文是《五分钟学Java》系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章,有兴趣看本系列更多文章可以关注我的公众号【Java技术江湖】 系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更加浅显易懂,并且我也会把我学习时用的资料,书籍和文章拿出来分享给大家,节省你我的时间。所谓授人以鱼也要授人以渔,是本系列文章希望达到的目标。 本文思维导图 什么是Java Web 不知道Java Web这个词是从什么时候...阅读全文

博文 2020-03-05 03:32:48 程序员黄小斜

【Zinx第三章-基础路由模块】Golang轻量级并发服务器框架

【Zinx教程目录】Zinx源代码https://github.com/aceld/zinx (请拷贝网址,在浏览器打开[简书不让自动跳转])完整教程电子版(在线高清)-下载Zinx框架视频教程(框架篇)(完整版下载)链接在下面正文 Zinx框架视频教程(应用篇)(完整版下载)链接在下面正文 Zinx开发API文档Zinx第一章-引言Zinx第二章-初识Zinx框架Zinx第三章-基础路由模块Zinx第四章-全局配置Zinx第五章-消息封装 Zinx第六章-多路由模式 Zinx第七章-读写分离模型 Zinx第八章-消息队列及多任务 Zinx第九章-链接管理 Zinx第十章-连接属性设置 【Zinx应用案例-MMO多人在线游戏】(1)案例介绍(2)AOI兴趣点算法(3)数据传输协议protoc...阅读全文

博文 2019-07-09 09:02:38 aceld

Snow——简单易用的Go语言业务框架

项目地址 中文文档 changelog Snow Snow是一套简单易用的Go语言业务框架,整体逻辑设计简洁,支持HTTP服务、队列调度和任务调度等常用业务场景模式。 Goals 我们致力于让PHPer更方便地切入到Go语言开发,在业务框架选择上贴合PHP主流框架的设计思想,以更低的学习成本快速熟悉框架,致力于业务逻辑的开发。 Features HTTP服务:基于gin进行模块化设计,简单易用、核心足够轻量;支持平滑重启; 任务调度:基于cron进行模块化设计,简单易用; 队列调度:基于自研的队列调度服务worker,通过Queue接口化,解耦队列调度与底层队列驱动;支持平滑关闭; Cache: 通用的接口化设计,框架实现了redis作为缓存底层驱动,支持可扩展; Database: 使用成...阅读全文

博文 2019-07-08 20:02:38 wilee

聊聊在Go语言里使用继承的翻车经历

Go不是面向对象的语言,但是使用组合、嵌套和接口可以支持代码的复用和多态。关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出的全部的方法。比如下面这个例子: type ShapeInterface interface { GetName() string } type Shape struct { name string } func (s *Shape) GetName() string { return s.name } type Rectangle struct { Shape w, h float64 } 复制代码Shape类型上定义了GetName()方法,而在矩形Rectangle的定义中匿名嵌套了Sha...阅读全文

博文 2020-04-20 13:34:22 kevinyan

RocketMQ主从同步源码分析

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 之前写了一篇关于 RocketMQ 队列与 Kafka 分区副本的区别文章,里面提到了 RocketMQ 的消息冗余主要是通过主备同步机制实现的,这跟 Kafka 分区副本的 Leader-Follower 模型不同,HA(High Available) 指的是高可用性,而 RocketMQ 的HA机制是通过主备同步实现消息的高可用。 HA 核心类 HA 的实现逻辑放在了 store 存储模块的ha目录中,其核心实现类如下: image HAService:主从同步的核心实现类 HAService$AcceptSocketService:主服务器监听从服务器连接实现类 HAServic...阅读全文

博文 2019-10-14 20:33:36 aside section ._1OhGeD

关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT7,OBJECT8, 我们需要将这些数据缓存到这4台服务器上,相应的问题是 如何设计数据存放策略?即ObjectX 应该存放在哪台服务器上? 为了解决这个问题,我们有如下几个思路。 1. 余数hash方案 采用hash(Objectx)%4来确定服务器节点 假设 hash(OBJECT1)=2,由 2%4=2,可知,Object1则应该存放到节点N2上 假设 hash(OBJECT2)=3,由 3%4=3,可知,Object2则应该存放到节点N3上 假设 hash(OBJECT3)=1,由 1%...阅读全文

博文 2019-08-24 01:32:49 非正式解决方案