请教各位大佬 这个错误是什么意思啊h2i.go 出现错误
说接收器名字必须h2i 我就是配环境出现...阅读全文
说接收器名字必须h2i 我就是配环境出现...阅读全文
trim_test.go:479:11: illegal byte order mark println(" 民商法学院") 测试代码: func TestTrim(t *testing.T) { //因编辑器去除了此编码字符串,此处模拟字符 println(string('\uFEFF')+"民商法学院\n") println(strings.TrimSpace(string('\uFEFF')+"民商法学院\n")) } 需要将空字符串转换到16进制(FEFF): println(string('\uFEFF')+"民商法学院\n") println(strings.TrimSpace(strings.TrimPrefix(string('\uFEFF')+"民商法学院\n",strin...阅读全文
网上找了几种方案,糅合在一起,再自己作一下---分隔符的split切分,就可以随意解析出我们需要的yaml里的资源定义啦。引处,我感兴趣的是Deployment~ 需要关注的点:gopkg.in/yaml.v3这种方式自定义能力强,在只需要自己感兴趣的资源时,非常有用。yaml_k8s这种方式比较标准,也不用自定义结构,但和k8s的API版本相关,非严谨或是版本统一的情况,推荐使用。 代码送上: package main import ( "encoding/json" "fmt" "os" "strings" apps_v1 "k8s.io/api/apps/v1" yaml_k8s "k8s.io/apimachinery/pkg/util/yaml" yaml_v3 "gopkg.in...阅读全文
这是两部分系列文章中的第一部分,该文章采用教程的方式来探讨 Go 编译器。Go 编译器复杂而庞大,需要一本书才可能描述清楚,所以这个系列文章旨在提供一个快速而深度优先的方式进入学习。我计划在以后会写更多关于编译器领域的描述文章。 我们会修改 Go 编译器来增加一个新的(玩具性质)语言特性,并构建一个经过修改的编译器进行使用。 ## 任务 —— 增加新的语句 很多语言都有 `while` 语句,在 Go 中对应的是 `for`: ```go for
# xxl-job-executor的gin中间件 ## 背景 xxl-job-executor-go是xxl-job的golang执行器,可以独立运行,有时候我们要与项目或者框架(如:gin框架)集成起来合并为一个服务,本项目因此而生。 ## 执行器项目地址 https://github.com/xxl-job/xxl-job-executor-go ## 与gin集成示例 ```go package main import ( "github.com/gin-gonic/gin" "github.com/gin-middleware/xxl-job-executor" "github.com/xxl-job/xxl-...阅读全文
2017-08-22怪盗kidou腾讯课堂Coding学院点击蓝字,关注我们哦! 作者:怪盗kidou链接:http://www.jianshu.com/p/e544b7a76dac说明:本文内容仅限于本人熟知的内容,HTTP的内容任意一个知识点都可以单独写一篇博客,所以别指望靠一篇博客可以讲清楚,本文的主要作用是为以后的博客作铺垫,所以更详细的HTTP协议内容可参考RFC 2616,本人水平有限,如有不正确的地方欢迎留言指出。1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一行为请求行。1.1 请求行请求行(Request Line)分为三个部分:请求方法、...阅读全文
程序功能 此程序的主要功能是将文件中数据导入到clickhouse数据库中。 【问题描述】 服务器内存每隔一段时间会耗尽 【问题分析】 由于使用的是go语言开发的,所以采用了业界流行的工具pprof。 参考URL:https://cizixs.com/2017/09/11/profiling-golang-program/ 工具的使用与思路: 1)先修改源代码 2)安装工具观察 3)根据工具抓取的现象进行分析 4)修复内存缺陷代码, 再根据分析结果修复内存泄漏的地方 5)发布代码进行再跟踪分析 ================================================== 1)修改代码: 使用这个工具前需要在代码中写几行代码,以便能使用这个工具的来收集数据。 1 //引...阅读全文
### 前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了`pick_first`和`round_robin`两种负载均衡策略,轮询法`round_robin`不能满足因服务器配置不同而承担不同负载量,这篇文章将介绍如何实现自定义负载均衡策略--`加权随机法`。 `加权随机法`可以根据服务器的处理能力而分配不同的权重,从而实现处理能力高的服务器可承担更多的请求,处理能力低的服务器少承担请求。 ### 自定义负载均衡策略 gRPC提供了`V2PickerBuilder`和`V2Picker`接口让我们实现自己的负载均衡策略。 ```go type V2PickerBuilder interface { Build(info PickerBuildInfo) balancer.V2...阅读全文
mac的brew命令那么方便,像我这么懒的人就喜欢这个 brew 如果没有Homebrew的人我们来先安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 然后尽情的使用brew吧。 go 接下来就是主题了,安装我们的go brew update && brew upgrade && brew install go 等待安装完毕后试试go env命令是否成功运行呢? 配置环境变量 #GOROOT export GOROOT=/usr/local/Cellar/go/1.9.1/libexec #GOPATH export GOPATH=$HOM...阅读全文
导读 之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程...阅读全文
课程介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 课程目标 • 掌握CSS开发技术 适合人群 • 前端开发者 课时列表 • 课时1:CSS基础 • 课时2:CSS选择器(上) • 课时3:CSS选择器(下) • 课时4:CSS属性_背景、颜色、边框 • 课时5:CSS属性_字体文本...阅读全文
有没有高人帮忙看看?下面是全部源码(从网上抄的),我是想获取当前内存使用量。
```go
package main
/*
#include
profiler (官方 Fork)是基于 Web 的内存分析器,它可以帮助你跟踪你的服务的内存使用情况,并报告自定义的属性。  func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) log.Println("Starting server ...") log.Fatal((http.ListenAndServe(":8888", mux))) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hel...阅读全文
文章来源:http://gf.johng.cn/597431 分页管理由gpage包实现,gpage提供了强大的动态分页及静态分页功能,并且为开发者自定义分页样式提供了极高的灵活度。 使用方式: import "gitee.com/johng/gf/g/util/gpage" 方法列表:godoc.org/github.com/johng-cn/gf/g/util/gpage func New(TotalSize, perPage int, CurrentPage interface{}, url string, route ...string) *Page func (page *Page) EnableAjax(actionName string) func (page *Page) F...阅读全文
这是用 Go 创建新的智能合约语言项目的第二篇文章。在上一篇文章中,介绍了项目的概念,为什么我们决定去构建新的智能合约语言和简要的架构。这个项目就是 WIP 并且开放了源码,你可以在 [这里](https://github.com/DE-labtory/koa) 访问它并随时向我们做出贡献。 - **前面的文章:** [**新语言概念,目标,架构**](https://studygolang.com/articles/17960)  Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文
建网站不可避免的要使用各种各样的静态资源,这一节,就来看看,如何加载css,js图片等等这些资源。 在之前的基础上构造一简单的个HTML的测试文件
this is header
this is main
{{.Name | showname}}
断路器背景 微服务连锁故障场景 在分布式环境中,各个微服务相互调用,当某些情况下,比如后端中间件服务故障、第三方服务中断导致某个服务无限期不可用,短时间无法恢复,则可能会导致连锁故障,最终影响压垮整个业务集群 断路器与重试 断路器模式不同于重试模式,重试模式是使应用程序可以重试操作以期望它会成功,而断路器模式是防止应用程序执行一个可能失败的操作,减少执行可能失败操作的CPU、内存、线程等资源的浪费,从而保证服务的整体可用 断路器设计解析 基于代理模式的断路器 断路器相当于一个请求操作执行的代理,托管请求操作的执行 实现原理流程: 拦截服务执行的请求,通过当前状态决定是否直接返回,如果否则执行后续操作 尝试执行操作,并获取返回结果 根据返回结果和当前统计信息,决定当前断...阅读全文
简介 一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库time使用起来不太灵活,特别是日期时间的创建和运算。carbon库是一个时间扩展库,基于 PHP 的carbon库编写。提供易于使用的接口。本文就来介绍一下这个库。 快速使用 第三方库需要先安装: $ go get github.com/uniplaces/carbon 复制代码后使用: package main import ( "fmt" "time" "github.com/uniplaces/carbon" ) func main() { fmt.Printf("Right now is %s\n", carbon.Now().DateTimeString()) today, _ := carbo...阅读全文
在面对对象编程(OOP),我们常把某个对象实现的具体行为的函数称作方法。例如 C++中A类的某个函数实现了某种行为,我们就叫做 A 的方法。在 golang 中如果要定义一个方法,只需要在函数声明时,在函数名前加上某个变量,即该变量实现了某个方法。 ##### 方法声明 ```go type Point struct{ X, Y float64 } //按照传统方法,我们可能会按照下面的方式来写 func Distance(p, q Point) float64 { return math.Hypot(q.X - p.X, q.Y - p.Y) } //但在 go 语言中则是这样 func (p Point) Distance(q Point) float64 { return math.H...阅读全文
项目地址:json2xml 什么是antlr antlr(ANother Tool for Language Recognition)是一个强大的语法分析器生成工具,它可用于读取,处理,执行和翻译结构化的文本和二进制文件。目前,该工具广泛应用于学术和工业生产领域,同时也是众多语言,工具和框架的基础。今天我们就用这个工具实现一个go语言版的json2xml转换器; antlr的作用 关于一门语言的语法描述叫做grammar, 该工具能够为该语言生成语法解析器,并自动建立语法分析数AST,同时antlr也能自动生成数的遍历器,极大地降低手工coding 语法解析器的成本; 实践开始 言归正传,拿json2xml为例,实现一个工具; 安装 以macOS为例 brew install antlr 编...阅读全文
使用的编译器是gogland ...阅读全文
【编者的话】本次分享将给大家介绍Kubernetes的网络通信原理,并介绍几种典型的Kubernetes网络实现方案。最后分享下我们公司ECP容器管理平台的在Neutron基础上为Kubernetes实现的SDN方案(Skynet)实践经验和演进。 【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述和架构、部署和核心机制分析、进阶篇——Kubernetes调工作原理及源码分析等。 首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景。 CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范、参数规范、响应规范等等。CNI只要求在容器创建时为容器分配网络资源、删除容器时释放网络...阅读全文
静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本? 最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新 1. 热更新是什么? 简单翻译成人类可读的实例是如下这个样子: 举个例子,你现在在坐卡车,卡车开到了150KM/H 然后,有个轮胎,爆了 然后,司机说,你就直接换吧,我不停车。你小心点换 嗯。就这个意思 2.网关中的热更新 服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的...阅读全文
Session和Cookie session和cookie是两个非常常见的Web概念,也很容易被误解。但是,它们对于页面授权以及收集页面统计信息非常重要。我们来看看这两个用例。 假设我们要抓取限制公共访问的页面,例如Twitter用户的主页。当然,您可以打开浏览器并输入用户名和密码来登录和访问该信息,但所谓的“网络爬行”意味着我们使用程序自动执行此过程而无需任何人为干预。因此,当我们使用浏览器登录时,我们必须找出幕后的真实情况。 当我们第一次收到登录页面并输入用户名和密码时,按下“登录”按钮后,浏览器会向远程服务器发送POST请求。服务器验证登录信息并返回HTTP响应后,浏览器重定向到用户主页。这里的问题是,服务器如何知道我们拥有所需网页的访问权限?由于HTTP是无状态的,因此服务器无法知道...阅读全文
**自学习golang以来,无论是beego还是web.go亦或是站长大人的dreamgo的路由,感觉都不明白是怎么写的,下面我把自己的一种实现方式给写出来,希望大家指点一二。** `目录结构` ``` web controller index.go xxx router route.go util util.go view index.html main.go #入口 ``` `web入口路由handler处理` ``` func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } ...阅读全文
前言 在 Go 中,输入和输出操作是使用原语实现的,这些原语将数据模拟成可读的或可写的字节流。为此,Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出,如图: Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作本文重点介绍如何实现标准库中 io.Reader 和 io.Writer 两个接口,来完成流式传输数据。 io.Reader io.Reader 表示一个读取器,它将数据从某个资源读取到传输缓冲区。在缓冲区中,数据可以被流式传输和使用。如图: 对于要用作读取器的类型,它必须实现 io.Reader 接口的唯一一个方法 Read(p []byte)。换句话说,只要实现了 Read(p []byte) ,那它就是一个...阅读全文
最开始接触到Leaf,就是被它的网络消息功能吸引的。那么先看看这部分功能吧。从文档中得知: Leaf 可以单独使用 TCP 协议或 WebSocket 协议,也可以同时使用两者,换而言之,服务器可以同时接受 TCP 连接和 WebSocket 连接,对开发者而言消息来自 TCP 还是 WebSocket 是完全透明的。 一、network和gate 这个功能在源码中是如何实现的呢,看看network目录下tcp开头的,和ws开头的,有xx_conn,xx_msg,xx_server,正好各有3个文件。在conn.go里有个Conn interface,所以xx_conn肯定是实现这个接口的两个不同类型。按照这个思路,顺便看一下processor.go里的解析器接口,也是有json.go和pr...阅读全文
本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 最近研究Go爬虫相关的知识,使用到goquery这个库比较多,尤其是对爬取到的HTML进行选择和查找匹配的内容时,goquery的选择器使用尤其多,而且还有很多不常用但又很有用的选择器,这里总结下,以供参考。 如果大家以前做过前端开发,对jquery不会陌生,goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。 基于HTML Element 元素的选择器这个比较简单,就是基于a,p等这些HTML的基本元素进行选择,这种直接使用Element名称作为选...阅读全文
目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的 zookeeper是什么? Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图: 具体思路 看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服...阅读全文
建站宝盒是针对中小企业用户建站需求而打造的一款自助建站系统。用户只需通过在线申请账号和密码的方式建网站,不用自己上传源代码,只需登录网站管理系统即可选择网站模板风格、上传文字和图片内容、设置网站栏目、维护网站内容,其针对不同行业特点精心设计的网站栏目和网页风格。 此外,建站宝盒支持三种语言中文版网站、繁体版网站、英文版网站、运用功能强大的管理平台。建站宝盒大大节省建立网站的成本,极大地缩短了企业建站的时间。  简单易用 强大灵活 传统网站建设做出的网站管理后台功能简单,后期维护、网站建设周期长,修改...阅读全文
TL;DR 在使用 Golang 编写 TCP/UDP socket 的时候,第一步做的就是地址解析。 func ResolveTCPAddr(network, address string) (*TCPAddr, error) func ResolveUDPAddr(network, address string) (*UDPAddr, error) 下面是对这两个函数的源码分析。 ResolveTCPAddr 该函数返回的地址包含的信息如下: // src/net/tcpsock.go type TCPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone } TCPAddr 里,IP 既可以是 IP...阅读全文
导语 rabbitMQ是市面上应用很广的一种应用间传送数据的通信方式,是由erlang语言开发,主要特点就是异步通信,实现服务与服务之间的解耦。特点可靠性:提供了持久化、传输时确认、发布时确认、跟踪机制灵活的路由:有四种交换器负责分发路由集群:支持集群多种协议:支持STOMP、和MQTT协议多语言:支持大部分流行语言友好的界面:提供了直观的管理界面可扩展:提供了许多插件。应用场景高并发排队机制:比如在秒杀场景,提示用户正在等待,在队列里存放了有序的待处理的消息,而不是所有的消息杂乱无章服务之间的解耦:服务之间可通过发布订阅的模式,让Rabbitmq队列通知订阅了该消息的服务执行相关代码。工作机制在其通信的过程中,有两个重要的角色,分别是生产者和消费者,需要强调的是RabbitMQ服务器并不产...阅读全文
之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程的模式...阅读全文
TiDB Markdown Plugin Repo: https://github.com/imiskolee/tidb-wasm-markdown一款可以让TiDB运行在Markdown中的插件。 背景 周三看到朋友圈在疯狂的刷 TiDB - Wasm 这个有意思的东西(让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案)。这的确是一件让人兴奋的工作成果,为WASM的应用提供了不错的思路。就这个项目本身而言也是有很大的价值。 我们在编程语言学习的时候,有诸如JSFiddle、Go Playground等很多不同的交互性环境可以使用,并且可以将这些环境内嵌到教学文章之中,形成了交互性的教学资料。但是在数据库的文章之中,只能是纯粹的纸上谈兵,读者很难进行直观的感受与实操。...阅读全文
// http.go package main import ( "log" "net/http" "time" ) func main() { server := &http.Server{ Addr: ":8888", WriteTimeout: 2 * time.Second, } mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) server.Handler = mux log.Println("Starting server ...") log.Fatal(server.ListenAndServe()) } type myHandler struct{} f...阅读全文
课程介绍 SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。 课时列表 • 课时1:SVN的配置及使用(SVN简介) • 课时2:SVN的配置及使用(搭建SVN服务器端) • 课时3:SVN的配置及使用(配置SVN客户端) • 课时4:SVN的配置及使用(项目发布与检出) • 课时5:SVN的配置及使用(冲突解决) 开始学习http://click.aliyun.com/m/27888/...阅读全文
大学里大家应该基本上都写过一些和控制台进行交互的课后作业,下面是一个go版本的简单交互程序。 package main import ( "bufio" "fmt" "os" ) func main() { in := bufio.NewReader(os.Stdin) // 声明并初始化读取器 fmt.Println("What is your name?") input, err := in.ReadString('\n') // 以回车为分隔符 if err != nil { fmt.Printf("oh, get error: %v\n", err) return } name := input[:len(input)-1] // 去除回车 fmt.Printf("Hello, %s...阅读全文
1.为什么要搞这种东西? 1.测试资源不够 ,没有时间测试iOS的需求 2.因为平时测试的不多, 所以对上报等问题总是漏测 3.会有一些改动, 会影响之前的一些上报逻辑 4.想自己跑一边所有的上报逻辑, 展示上报, 点击上报, trace上报等 2.为什么选择了Golang? 1.以前用python写过自动化的iOS app安装, 脱壳,打开,卸载等操作,想试试其他的方法. 2.考虑并尝试了privoxy , anyproxy ,对https的代理返回等都不够友好,花了很多时间没弄好,anyproxy有些https抓不到, 也不知道什么原因, 但是挺好写 3.同事跟我说要不试试golang, 看了下, 感觉可以符合需求, 还能学习新的知识点 安排 3.大致思路 1.因为我要测试的是SDK ,...阅读全文
全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。  状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文
结构体定义的一般方式如下: type identifier struct { field1 type1 field2 type2 ... } type T struct {a, b int} 也是合法的语法,它更适用于简单的结构体。 var t *T t = new(T) 变量 t 是一个指向 T的指针,此时结构体字段的值是它们所属类型的零值,使用 new 函数给一个新的结构体变量分配内存,它返回指向已分配内存的指针。 无论变量是一个结构体类型还是一个结构体类型指针,都使用同样的 选择器符(selector-notation) 来引用结构体的字段,即: type myStruct struct { i int } var v myStruct // v是结构体类型变量 var p *mySt...阅读全文
解释服务器的几个概念: Request 用户请求的信息 Response 服务器返回的信息 Conn 用户的每次请求链接 Handler 处理请求和生成返回信息的处理逻辑 先写个小程序看看 func MyConn() { // 监听9090端口 listener, _ := net.Listen("tcp", "localhost:9090") defer listener.Close() // 建立用户请求的连接 conn, _ := listener.Accept() defer conn.Close() // 读取Request的内容 buff := make([]byte, 10000) len, _ := conn.Read(buff) fmt.Fprintln(os.Stdout...阅读全文
说明 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上 正文 使用预设的记录器可以节省时间,但如果确定要调整记录器,需要探索自定义记录器的方法 使用zap配置结构体创建记录器 可以使用配置zap.Config创建记录器,这是一个结构体,可以使用需要的值填充结构体,然后调用结构体的.Build()方法来获取记录器 cfg := zap.Config{...} logger, err := cfg.Build() 需要注意的是:zap.Config的结构体没有默认值,至少为zap需要的三个设置提供值 encoder: 只需要添加个Encoding:"XXX",使用json就会创建一个JSON的encoder,另一个值是console 可以使用结构zapcore.EncoderC...阅读全文
背景 分布式多消息事务问题 在消息队列使用场景中,有时需要同时下发多条消息,但现在的消息队列比如kafka只支持单条消息的事务保证,不能保证多条消息,今天说的这个方案就时kafka内部的一个子项目中基于2PC和延迟更新来实现分布式事务 2PC 2PC俗称两阶段提交,通过将一个操作分为两个阶段:准备阶段和提交阶段来尽可能保证操作的原子执行(实际上不可能,大家有个概念先) 延迟更新 延迟更新其实是一个很常用的技术手段,简单来说,当某个操作条件不满足时,通过一定手段将数据暂存,等条件满足时在进行执行 基于2PC和延迟队列的分布式事务实现 系统架构 实现也蛮简单的, 在原来的业务消息之后再添加一条事务消息(事务消息可以通过类似唯一ID来关联到之前提交的消息), worker未消费到事物提交的消息,就...阅读全文
前面写过关于深度拥抱区块链文章,区块链开发语言GO,被称为互联网时代的C语言,接下来我会以一个初学者的方式,由浅入深的介绍同时也会有搭配相应的代码,一步一步的学习GO语言,都说技多不压身,所以希望大家也一起践行,践行很重要。 首先我们要安装Go语言的开发包,根据自己的需求可以下载不同的对应平台的安装包,当然Go语言不管是在Windows平台、Mac平台还是Linux平台上都是支持的,这个无需担心不支持的情况,下载网址:https://studygolang.com/dl,可以到golang中国上查找相关资料也可以,网址:https://www.golangtc.com/ 下载好自己对应的版本,然后安装,因为占用空间不是很大,所以可以直接默认下一步下一步的推荐安装即可,接下来就是搭建开发环境,...阅读全文
前言 本章主要说一下如何去使用Jetbrains的各类工具,并且在上周参加了Jetbrains开发者日的大会,把参会的感受和体验在这里分享给各位。话不多说,我们进入正题。 使用 想必各位一定使用过Jetbrains的任意一款产品,就算没用过也应该听说过吧。Jetbrains从开始至今总共分为三大模块 Developer Ide (集成开发工具) Language (Jetbrains的开发语言 Kotlin) DevOps (任务管理,持续集成,持续部署的一些东西) 对于Developer Ide我推荐使用Jetbrains ToolBox,它是管理所有Jetbrains Ide的工具。 Jetbrains平均一个月做一次小更新,安装了Jetbrains ToolBox就不必再去关心更新的事...阅读全文