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

ubuntu No module named 'apt_pkg'

我们在使用 ubuntu 的时候会经常用 apt-get install 安装一些软件或者依赖包。 但是很多时候我们使用 apt-get install 的时候找不到软件,这是因为我们没有配置好安装的源,所以我们就会使用 sudo add-apt-repository 来添加安装源,但是今天在用上面的命令来添加 Golang 的下载源的时候就报了一个错误。 No module named 'apt_pkg' 为什么会报错 首先造成这个错误的原因是我以前做 python 开发的时候修改了系统里面的 : 系统最初 python3 -> 链接文件是指向 /usr/bin/python3.5 但是我需要使用 python3.6 所以我下载了新版本的 python3.6 但是我们在使用那个添加源的命令...阅读全文

博文 2019-04-01 21:34:39 _AlphaBaby_

一个简单的 HTTP 服务器 (二) (go语言)

// http.go package main import ( "log" "net/http" ) 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...阅读全文

博文 2017-04-23 13:00:41 痞子汤

gf框架之分页模块(一) - 基本介绍

文章来源: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...阅读全文

博文 2018-05-21 12:34:37 John

用 Go 创建一个新的智能合约语言 - 词法分析器部分

这是用 Go 创建新的智能合约语言项目的第二篇文章。在上一篇文章中,介绍了项目的概念,为什么我们决定去构建新的智能合约语言和简要的架构。这个项目就是 WIP 并且开放了源码,你可以在 [这里](https://github.com/DE-labtory/koa) 访问它并随时向我们做出贡献。 - **前面的文章:** [**新语言概念,目标,架构**](https://studygolang.com/articles/17960) ![koa architecture](https://raw.githubusercontent.com/studygolang/gctt-images/master/create-new-smartcontract-language-with-go-lexer...阅读全文

博文 2019-03-10 19:56:46 PotoYang

goreplay-使用真实流量测试你的应用

场景:最近项目准备升级,其中一个步骤就是需要删除一些不再维护的gem,这样就会涉及大量代码的修改,除了增加测试覆盖率以外,最好能使用线上真实的流量来访问测试环境,然后通过newrelic更加详尽的捕捉潜在的错误。 那这里就涉及到流量分流或者流量复制的问题,而goreplay便是解决该问题的一个优秀的工具。 顾名思义,goreplay是基于go语言实现的,要在生产服务器上安装go环境。安装参考:https://golang.org/doc/install, 准备好go语言环境后,goreplay直接提供了编译好的版本,十分方便,直接解压即可,可参考以下步骤: wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor...阅读全文

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() 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: ...阅读全文

博文 2016-08-30 01:00:08 htyu_0203_39

Go语言的浮点型比较大小及其函数式编程魅力

我们在编程中经常需要对两个浮点型比较大小,下面我就来分享一段这样的代码,同时也展示了Go语言函数式编程的独特魅力: import ( "fmt" "math" ) func main() { // 设置精确度为0.00001 var a Accuracy = func() float64 { return 0.00001 } fmt.Println(a.Equal(0.11111222, 0.11111222233333)) //打印结果为:true } type Accuracy func() float64 func (this Accuracy) Equal(a, b float64) bool { return math.Abs(a-b) < this() } func (this ...阅读全文

博文 2016-09-12 12:00:29 henrylee2cn

分布式爬虫对新站的协助

为了保障搜索引擎优化的质量一般在搭建新站的时候,前期会对内容一点点的进行填充,但是到了后期填充量会变得越来越大,所消耗的时间和精力也会逐步的增加,因此很多站长在做新的网站的时候首选分布式爬虫抓取信息进行填充,来保障网站定期更新量。分布式爬虫,可以大体理解为集群爬虫,如果有蜘蛛抓取任务,可以试用多台机器同时运行,很大的提升了工作效率。但是分布式爬虫并不是没有缺陷,也就是说效率提升的越快,那么网站触发反爬虫的机会也就越大。为了保障分布式爬虫的顺利使用,建议站长可以使用代理IP,使用代理IP一定要保障http代理IP的资源充足和http代理ip的上网安全和高匿性...阅读全文

博文 2019-02-27 16:39:39 xiniuxiaoniu

微服务的断路器实现图解Golang通用实现

断路器背景 微服务连锁故障场景 在分布式环境中,各个微服务相互调用,当某些情况下,比如后端中间件服务故障、第三方服务中断导致某个服务无限期不可用,短时间无法恢复,则可能会导致连锁故障,最终影响压垮整个业务集群 断路器与重试 断路器模式不同于重试模式,重试模式是使应用程序可以重试操作以期望它会成功,而断路器模式是防止应用程序执行一个可能失败的操作,减少执行可能失败操作的CPU、内存、线程等资源的浪费,从而保证服务的整体可用 断路器设计解析 基于代理模式的断路器 断路器相当于一个请求操作执行的代理,托管请求操作的执行 实现原理流程: 拦截服务执行的请求,通过当前状态决定是否直接返回,如果否则执行后续操作 尝试执行操作,并获取返回结果 根据返回结果和当前统计信息,决定当前断...阅读全文

博文 2019-05-15 14:36:12 qq5cd4cba85dd8a

理解服务端对 TCP 握手的处理,以及什么是 backlog

理论 握手过程 我们知道,客户端与服务端之间建立 TCP 连接需要经过三次握手的过程: 客户端向服务端发送 SYN 服务端返回 SYN + ACK 客户端发送 ACK 至于 TCP 连接为什么需要三次握手,这三次握手是怎样确保传输的可靠性的? 这个问题,交给以后专门写篇文章来讲。 而这篇文章的重点是,在这三次握手的过程中,服务端是怎样维护一个连接的? 两种状态 两个队列 一图胜千言: 站在服务端的角度来看,自 Linux kernel 2.2 之后,整个过程分为如下几个步骤: 服务端进行 listen 系统调用(上层函数可能与 listen syscall 不同名)之后,端口处于监听状态。 在第一次握手之后,服务端收到了客户端发来的 SYN 包,将该连接标记为 SYN_RCVD(半连接状态)...阅读全文

博文 2019-12-24 21:32:41 Xavier

Go 每日一库之 carbon

简介 一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库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...阅读全文

博文 2020-02-16 10:34:15 darjun

Go语言学习笔记(七)之方法

在面对对象编程(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...阅读全文

博文 2019-04-13 16:19:16 goelo

自己动手,写一个json2xml小工具

项目地址:json2xml 什么是antlr antlr(ANother Tool for Language Recognition)是一个强大的语法分析器生成工具,它可用于读取,处理,执行和翻译结构化的文本和二进制文件。目前,该工具广泛应用于学术和工业生产领域,同时也是众多语言,工具和框架的基础。今天我们就用这个工具实现一个go语言版的json2xml转换器; antlr的作用 关于一门语言的语法描述叫做grammar, 该工具能够为该语言生成语法解析器,并自动建立语法分析数AST,同时antlr也能自动生成数的遍历器,极大地降低手工coding 语法解析器的成本; 实践开始 言归正传,拿json2xml为例,实现一个工具; 安装 以macOS为例 brew install antlr 编...阅读全文

博文 2018-05-28 12:34:38 yyt030

从零开始搭建MongoDB数据库服务

摘要: 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 首先介绍一下『数据库即服务』。 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 _MongoDB_004_jpeg _MongoDB_005_jpeg 首先介绍一下『数据库即服务』。『数据库即服务』其实是『Database-as-a-serv...阅读全文

DockOne微信分享(一一五):基于Neutron的Kubernetes SDN实践经验之谈

【编者的话】本次分享将给大家介绍Kubernetes的网络通信原理,并介绍几种典型的Kubernetes网络实现方案。最后分享下我们公司ECP容器管理平台的在Neutron基础上为Kubernetes实现的SDN方案(Skynet)实践经验和演进。 【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述和架构、部署和核心机制分析、进阶篇——Kubernetes调工作原理及源码分析等。 首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景。 CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范、参数规范、响应规范等等。CNI只要求在容器创建时为容器分配网络资源、删除容器时释放网络...阅读全文

博文 2017-06-25 16:25:36 swordboy

从nginx热更新聊一聊Golang中的服务器热更新(上)

静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本? 最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新 1. 热更新是什么? 简单翻译成人类可读的实例是如下这个样子: 举个例子,你现在在坐卡车,卡车开到了150KM/H 然后,有个轮胎,爆了 然后,司机说,你就直接换吧,我不停车。你小心点换 嗯。就这个意思 2.网关中的热更新 服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的...阅读全文

博文 2019-03-14 03:34:40 Lateautumn_Lin

Go基础学习记录之Session和Cookie

Session和Cookie session和cookie是两个非常常见的Web概念,也很容易被误解。但是,它们对于页面授权以及收集页面统计信息非常重要。我们来看看这两个用例。 假设我们要抓取限制公共访问的页面,例如Twitter用户的主页。当然,您可以打开浏览器并输入用户名和密码来登录和访问该信息,但所谓的“网络爬行”意味着我们使用程序自动执行此过程而无需任何人为干预。因此,当我们使用浏览器登录时,我们必须找出幕后的真实情况。 当我们第一次收到登录页面并输入用户名和密码时,按下“登录”按钮后,浏览器会向远程服务器发送POST请求。服务器验证登录信息并返回HTTP响应后,浏览器重定向到用户主页。这里的问题是,服务器如何知道我们拥有所需网页的访问权限?由于HTTP是无状态的,因此服务器无法知道...阅读全文

博文 2018-10-24 15:34:47 DurbanZhang

关于路由

**自学习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)) } ...阅读全文

​使用BSN一天学会区块链开发-C#篇

作者:曹国波《使用BSN一天学会区块链开发》系列文章可以帮助具有一定开发经验的开发者,在不需要学习区块链开发语言的情况下,在区块链服务网络(BSN)上完成区块链应用的开发。本文主要介绍用户如何通过链下业务系统使用C#语言与链上数据进行交互而进行的相关操作流程说明,但在说明链下业务系统与链上进行数据交互之前,首先对用户如何在区块链服务门户注册、应用发布服务、应用服务参与以及应用管理进行一一说明。注册和登录打开区块链服务网络网址:www.bsnbase.com, 点击登录页面中的【内测申请】按钮进入内测申请页: 根据页面中的提示填写内测申请信息并提交内测申请,内测申请用户分为个人用户和企业用户两种,申请人应根据自己的用户类型任选一种进行申请, 内测申请提交后需等待系统审核,待系统审核通过后将向申...阅读全文

博文 2020-01-08 19:33:22 区块链服务网络BSN

Go 中 io 包的使用方法

前言 在 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) ,那它就是一个...阅读全文

博文 2018-07-11 11:34:44 simon

Golang 游戏leaf系列(二) 网络消息流程概述

最开始接触到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...阅读全文

博文 2019-05-28 21:34:45 懒皮

golang goquery selector(选择器) 示例大全

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 最近研究Go爬虫相关的知识,使用到goquery这个库比较多,尤其是对爬取到的HTML进行选择和查找匹配的内容时,goquery的选择器使用尤其多,而且还有很多不常用但又很有用的选择器,这里总结下,以供参考。 如果大家以前做过前端开发,对jquery不会陌生,goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。 基于HTML Element 元素的选择器这个比较简单,就是基于a,p等这些HTML的基本元素进行选择,这种直接使用Element名称作为选...阅读全文

利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的 zookeeper是什么? Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图: 具体思路 看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服...阅读全文

建站宝盒到底有多大的威力令人为之痴迷?

建站宝盒是针对中小企业用户建站需求而打造的一款自助建站系统。用户只需通过在线申请账号和密码的方式建网站,不用自己上传源代码,只需登录网站管理系统即可选择网站模板风格、上传文字和图片内容、设置网站栏目、维护网站内容,其针对不同行业特点精心设计的网站栏目和网页风格。 此外,建站宝盒支持三种语言中文版网站、繁体版网站、英文版网站、运用功能强大的管理平台。建站宝盒大大节省建立网站的成本,极大地缩短了企业建站的时间。 ![5.jpg](https://static.studygolang.com/180427/a0738317884ddcaeebd9d5b132fd9a31.jpg) 简单易用 强大灵活 传统网站建设做出的网站管理后台功能简单,后期维护、网站建设周期长,修改...阅读全文

Golang 网络编程丝绸之路 - TCP/UDP 地址解析

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...阅读全文

博文 2019-06-08 23:32:43 LeonHuayra

RabbitMQ系列笔记介绍篇

导语 rabbitMQ是市面上应用很广的一种应用间传送数据的通信方式,是由erlang语言开发,主要特点就是异步通信,实现服务与服务之间的解耦。特点可靠性:提供了持久化、传输时确认、发布时确认、跟踪机制灵活的路由:有四种交换器负责分发路由集群:支持集群多种协议:支持STOMP、和MQTT协议多语言:支持大部分流行语言友好的界面:提供了直观的管理界面可扩展:提供了许多插件。应用场景高并发排队机制:比如在秒杀场景,提示用户正在等待,在队列里存放了有序的待处理的消息,而不是所有的消息杂乱无章服务之间的解耦:服务之间可通过发布订阅的模式,让Rabbitmq队列通知订阅了该消息的服务执行相关代码。工作机制在其通信的过程中,有两个重要的角色,分别是生产者和消费者,需要强调的是RabbitMQ服务器并不产...阅读全文

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

GO语言的修饰器编程

之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程的模式...阅读全文

博文 2017-06-02 08:03:21 徐学良

兄弟连Go语言培训教程带你实战GO案例(6)Go Base64编码

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 GoBase64编码 Go提供了对base64编码和解码的内置支持 packagemain //这种导入包的语法将默认的base64起了一个别名b64,这样 //我们在下面就可以直接使用b64表示这个包,省点输入量 importb64"encoding/base64" import"fmt" funcmain(){ //这里是我们用来演示编码和解码的字符串 data:="abc123!?$*&()'-=@~" //Go支持标准的和兼容URL的base64编码。 //我们...阅读全文

TiDB Markdown Plugin - 在你的Markdown文档中运行一个真实的数据库示例

TiDB Markdown Plugin Repo: https://github.com/imiskolee/tidb-wasm-markdown一款可以让TiDB运行在Markdown中的插件。 背景 周三看到朋友圈在疯狂的刷 TiDB - Wasm 这个有意思的东西(让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案)。这的确是一件让人兴奋的工作成果,为WASM的应用提供了不错的思路。就这个项目本身而言也是有很大的价值。 我们在编程语言学习的时候,有诸如JSFiddle、Go Playground等很多不同的交互性环境可以使用,并且可以将这些环境内嵌到教学文章之中,形成了交互性的教学资料。但是在数据库的文章之中,只能是纯粹的纸上谈兵,读者很难进行直观的感受与实操。...阅读全文

一个简单的 HTTP 服务器 (三) (go语言)

// 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...阅读全文

博文 2017-04-23 13:00:41 痞子汤

1小时掌握SVN版本控制系统

课程介绍 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与用户交互demo

大学里大家应该基本上都写过一些和控制台进行交互的课后作业,下面是一个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...阅读全文

博文 2020-02-25 13:32:43 iuoui

Golang之iOS自动化接口测试(一)需求简介

1.为什么要搞这种东西? 1.测试资源不够 ,没有时间测试iOS的需求 2.因为平时测试的不多, 所以对上报等问题总是漏测 3.会有一些改动, 会影响之前的一些上报逻辑 4.想自己跑一边所有的上报逻辑, 展示上报, 点击上报, trace上报等 2.为什么选择了Golang? 1.以前用python写过自动化的iOS app安装, 脱壳,打开,卸载等操作,想试试其他的方法. 2.考虑并尝试了privoxy , anyproxy ,对https的代理返回等都不够友好,花了很多时间没弄好,anyproxy有些https抓不到, 也不知道什么原因, 但是挺好写 3.同事跟我说要不试试golang, 看了下, 感觉可以符合需求, 还能学习新的知识点 安排 3.大致思路 1.因为我要测试的是SDK ,...阅读全文

博文 2020-04-30 21:32:54 西博尔

Functional Go: 持久化数据结构简介

函数式编程模型因其天生对并发具备良好的支持,近些年来越来越受到重视。从这篇文章开始, 我将以一个系列的博客来记录函数式编程的一个重要组件:持久化数据结构在 Go 语言下的实现。 这篇文章是系列文章的一部分,如果还没有浏览过文章的其它部分请参考: 持久化数据结构简介 (本文) Vector Trie 的实现 Transient 及持久化 函数式编程不是新概念,像 Haskell、Clojure、Scala 等函数式/类函数式编程语言也已经出现和存在了很长时间, 很多函数式编程的概念现今已经被应用在很多其他领域,比如 Facebook 在 React 的基础上提出的 Flux 应用结构抽象就强调了引入持久化数据结构的好处。 事实上,Facebook 还开源了自己的 JavaScript 持久化数...阅读全文

TCP连接的状态变迁

全部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 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

一个实现 Twitter SnowFlake 算法 的 Go 分布式 UID 生成器

goSnowFlake 根据 Twitter SnowFlake 算法, 实现的分布式线程安全 UID 生成器 Feature 线程安全的 UID 生成器 绿色可插拔,无需依赖 Redis,Mysql,无状态 适合分布式系统 实现 Twitter SnowFlake 理论 Description 0 41 51 64 +---------------+----------------+-----------+ |timestamp(ms) | worker node id | sequence | +---------------+----------------+-----------+ id = timestamp | workerid | sequence (eg. 145106344...阅读全文

博文 2017-02-09 08:11:48 zheng_ji

【Golang 基础】 Go 语言 函数式编程

Go 语言函数式编程   在 Go 语言中函数是一等公民,它作为一个变量、类型、参数、返回值,甚至可以去实现一个接口,但是 Go 语言中函数不支持重载、嵌套和默认参数。 通过使用 func 关键字来定义函数 package main func main(){ } 函数支持的特性 作为变量; func test(){ // 函数体 } funcTest := test fmt.Println(funcTest()) 匿名函数 test := func(){ // 函数体 } 作为类型; package main import "fmt" type iAdder func(int, int) int func main(){ var adder iAdder = func(a int, b in...阅读全文

博文 2019-03-29 06:34:40 爱写作的程序猿

golang学习之struct

结构体定义的一般方式如下: 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...阅读全文

博文 2016-11-08 13:00:12 caiyezi

小心踩雷!一个小小的正则表达式竟把CPU拖垮......

通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。public static void main(String[] args) { String badRegex ="^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\\\/])+$"; String bu...阅读全文

博文 2018-10-12 18:34:41 西安北大青鸟官微

1.Golang的Http源码阅读(http协议)

解释服务器的几个概念: 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...阅读全文

博文 2018-07-26 10:35:00 geange

gRPC源码/transport/客户端 服务端

综述 http2Client实现自ClientTransport接口http2Server实现自ServerTransport接口 https://github.com/messixukej... 在liangzhiyang/annotate-grpc-go基础上补充了部分注释 客户端:http客户端连接创建 原理(引自http2-spec/HTTP2中英对照版(06-29).md at master · fex-team/http2-spec · GitHub.md)):Upon establishment of a TCP connection and determination that HTTP/2 will be used by both peers, each endpoint ...阅读全文

博文 2018-06-11 11:34:38 蓝白狂想

go 学习笔记之学习函数式编程前不要忘了函数基础

在编程世界中向来就没有一家独大的编程风格,至少目前还是百家争鸣的春秋战国,除了众所周知的面向对象编程还有日渐流行的函数式编程,当然这也是本系列文章的重点. 越来越多的主流语言在设计的时候几乎无一例外都会参考函数式特性( lambda 表达式,原生支持 map,reduce...),就连面向对象语言的 Java8 也慢慢开始支持函数式编程,所以再不学习函数式编程可能就晚了! 但是在正式学习函数式编程之前,不妨和早已熟悉的面向对象编程心底里做下对比,通过对比学习的方式,相信你一定会收获满满,因此特地整理出来关于 Go 语言的面向对象系列文章,邀君共赏. 猜猜看go是不是面向对象语言?能不能面向对象编程? go 学习笔记之详细说一说封装是怎么回事 go 学习笔记之是否支持以及如何实现继承 go 学...阅读全文

博文 2019-09-16 10:02:41 雪之梦技术驿站

[uber-zap/part2]自定义记录器

说明 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上 正文 使用预设的记录器可以节省时间,但如果确定要调整记录器,需要探索自定义记录器的方法 使用zap配置结构体创建记录器 可以使用配置zap.Config创建记录器,这是一个结构体,可以使用需要的值填充结构体,然后调用结构体的.Build()方法来获取记录器 cfg := zap.Config{...} logger, err := cfg.Build() 需要注意的是:zap.Config的结构体没有默认值,至少为zap需要的三个设置提供值 encoder: 只需要添加个Encoding:"XXX",使用json就会创建一个JSON的encoder,另一个值是console 可以使用结构zapcore.EncoderC...阅读全文

博文 2019-03-30 12:34:38 小龙虾

基于2PC和延迟更新完成分布式消息队列多条事务Golang版本

背景 分布式多消息事务问题 在消息队列使用场景中,有时需要同时下发多条消息,但现在的消息队列比如kafka只支持单条消息的事务保证,不能保证多条消息,今天说的这个方案就时kafka内部的一个子项目中基于2PC和延迟更新来实现分布式事务 2PC 2PC俗称两阶段提交,通过将一个操作分为两个阶段:准备阶段和提交阶段来尽可能保证操作的原子执行(实际上不可能,大家有个概念先) 延迟更新 延迟更新其实是一个很常用的技术手段,简单来说,当某个操作条件不满足时,通过一定手段将数据暂存,等条件满足时在进行执行 基于2PC和延迟队列的分布式事务实现 系统架构 实现也蛮简单的, 在原来的业务消息之后再添加一条事务消息(事务消息可以通过类似唯一ID来关联到之前提交的消息), worker未消费到事物提交的消息,就...阅读全文

博文 2019-05-18 11:34:37 仔仔

跟我一起学习GO语言06-01

前面写过关于深度拥抱区块链文章,区块链开发语言GO,被称为互联网时代的C语言,接下来我会以一个初学者的方式,由浅入深的介绍同时也会有搭配相应的代码,一步一步的学习GO语言,都说技多不压身,所以希望大家也一起践行,践行很重要。 首先我们要安装Go语言的开发包,根据自己的需求可以下载不同的对应平台的安装包,当然Go语言不管是在Windows平台、Mac平台还是Linux平台上都是支持的,这个无需担心不支持的情况,下载网址:https://studygolang.com/dl,可以到golang中国上查找相关资料也可以,网址:https://www.golangtc.com/ 下载好自己对应的版本,然后安装,因为占用空间不是很大,所以可以直接默认下一步下一步的推荐安装即可,接下来就是搭建开发环境,...阅读全文

博文 2019-06-01 13:34:41 搬砖人1314