HiKariのTechLab

光の技术屋


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

【极客日常】解决国内go1.13的go mod无法安装依赖的问题

发表于 2019-10-07 | 更新于 2024-04-07 | 分类于 极客日常

在从零单排Golang第一话中讲到了Golang的基础开发环境配置,其中讲到了Go的依赖管理方面,提及了以后的趋势会采用官方的go mod进行管理。关于这一块,现在有了更加简单的方法。

最新的Go1.13中已经将go mod列为默认的包管理方法,但国内用户go mod vendor时还是有可能会出错,这是因为在go get时会检查哈希值,需要访问官方的sumdb。由于众所周知的不可抗因素,sumdb没法直接访问,这样就会造成下载依赖失败。解决的方法也很简单,只需要一行终端命令即可:

1
go env -w GOPROXY=https://goproxy.cn,direct

如果采用idea+Go插件开发的话需要注意,idea可能会托管环境变量,这个时候需要进入settings, languages & frameworks, go, go modules里,设置proxy为https://goproxy.cn,direct,就ok了。

【从零单排Golang】第四话:Win10安装minikube,用client-go部署mongodb

发表于 2019-10-03 | 更新于 2024-04-07 | 分类于 从零单排Golang

前言

Github传送门

提起Golang,就不得不提起kubernetes,在崇尚上云的今天,kubernetes已成为服务端同学必需掌握之学问。在第三话中,我们介绍了docker容器,它相当于虚拟操作系统,可以提供环境供各种不同的应用运行,从而实现轻量部署。但要是业务复杂,需要部署较多应用的话,就会遇到许多运维相关的问题,比如:

  • 应用关联的资源很多都需要持久化存储,它们的存储空间需要怎样分配及调度呢?
  • 不同地域的应用,如何取得相互联系?
  • 在应用集群中,如果有一个子应用挂了,该怎么办?
  • 。。。

这些问题,单靠docker是解决不了的(也不是docker所要关心的),需要在docker的基础上做更高层次的运维平台才能解决,而kubernetes,就是方案之一。复杂的调度逻辑,都会由kubernetes负责,而运维开发人员则基本只需向kubernetes提供资源及其描述,就能满足运维需求,从而提升工作效率。

既然准备入坑,就需要强行踩下去,因此今天就试试“家中上云”,单机搭建kubernetes,部署一个mongodb数据库。废话不多说,咱们开始吧~

minikube——在Win10本地搭建kubernetes

阅读全文 »

【DIY小记】CSGO究极装机优化设置指南

发表于 2019-09-21 | 更新于 2024-04-07 | 分类于 DIY小记

前言

上周电脑突发极其奇怪的bug,启动了不到一会儿CPU阻塞,所有程序打不开,安全模式查毒、修复系统、清存储卸软件均没有获得较好的效果。因此索性重装了Windows,所有一切推倒重来。

既然推倒重来,那CSGO就是不得不装的一款游戏。CSGO到现在也有10年的历史了,然而在网上能搜到的游戏优化设置要么过时,要么没有详尽的整合。因此,本文章借着装机经验,整理了自己优化CSGO的历程~

由于笔者为Win10+N卡,因此在Linux/Mac以及非N卡下玩CSGO的同学,部分配置还需另行google~

Win10游戏设置

运行在Win10的游戏需要关闭Win10自带的游戏优化与配置

首先关闭XBox自带的DVR(游戏内录像之类),有很多种方法,这里通过注册表方式解决:

阅读全文 »

【Lua杂谈】lua专用rpc协议sproto——基础介绍&用于协议测试的二次开发

发表于 2019-09-12 | 更新于 2024-04-07 | 分类于 Lua杂谈

前言

rpc(远程过程调用),是不同主机间的交互的机制之一。好比说,我们想要获取服务器的某个资源,我们就可以发送一条讯息给服务器,然后服务器解析信息,再返回推送资源的信息,这样,便实现了我们客户端跟服务器的相互的“远程调用”。

为了让不同主机之间能够相互理解发送的讯息,我们需要约定统一的信息格式标准,使得不同的主机可以发送基于这个信息格式的讯息,也可以解析这个格式。这种标准,我们称之为协议(protocol)。

Lua中协议选择有许多种,protobuf、json均可。但是今天,就稍微介绍一下云风同志当年为lua量身设计的sproto协议以及其用于协议测试的二次开发。So, let the party begin~

sproto协议描述

sproto是专用于lua的协议框架,相对于protobuf跟json,sproto在数据的序列化/反序列化效率上有极大的优势。rpc中为了快速效率地传送协议数据,会将数据组装压缩发送,接收端再解压拆解数据识别消息,从而减小了网络传输的开销。这个数据处理过程便可称之为序列化/反序列化。

sproto的设计类似于protobuf,基本类型为string、binary、integer以及boolean四种。对于array序列的支持,则加上引用星号*即可;对于非整数的支持方面,用户可以parse string来处理实数,或者指定integer的小数位数来处理小数(decimal)。除此之外,用户也可以像编程里面strcut那样自定义类型,类型与类型之间也可以嵌套。

我们可以从readme中寻找各种例子。数据类型的例子如下:

阅读全文 »

【从零单排Golang】第三话:利用docker client本地部署MySQL

发表于 2019-09-01 | 更新于 2024-04-07 | 分类于 从零单排Golang

前言

Github传送门

最近回忆起了在学校那会儿趣事:刚开始上数据库原理课程,一开始装Microsoft SQL Server,全班同学都在吐槽,怨声载道——这个说数据库咋启动不了,那个说数据库咋卸载不干净,个个焦头烂额,实在是好一番风景。唉,那时候就在想,要是有一个类似于软件管家的东西托管Microsoft SQL Server,让我们一键安装/卸载,可不就好了。

进入工业界,接触了运维方面的知识,才了解到docker的存在。不同于当年常用的虚拟机软件(VMWare WorkStation),docker并未对操作系统的硬件支撑做虚拟化,只是操作系统的进程,但却模拟了一个操作系统的环境,因此相对于虚拟机而言,docker更加轻量。轻量的运行环境意味着基于docker的部署,在管理与调度上会更加容易。看,kubernetes!

再回到我们的学习生活,拿MySQL为例吧——有了docker,安装卸载MySQL,就会变得无比容易。首先docker pull mysql;而后整理一下配置——通过-v映射数据在本地的存储路径,通过-p暴露出来mysql容器的端口,通过-e设置MySQL密码等环境变量;之后docker run带上上面的设置,我们的MySQL就启动了!要彻底卸载的话,只需要三行命令:docker stop ${MySQL容器ID}、docker rm ${MySQL容器ID}与docker image rm ${MySQL镜像ID},就ok了,是不是EZPZ?

正好,docker是基于Golang编写。因此本期从零单排,我们就用Golang来挑战一下如何与docker交互吧~

编写Golang程序部署MySQL

首先,我们研究一下相关的技术栈:官方提供的Golang客户端库docker client为Golang与docker间搭建了桥梁,其实质是对docker engine api的抽象;而docker engine api实质则是一个HTTP后端,是对docker内部镜像与容器管理功能的抽象。

通过docker client库,我们只需关心相关的参数输入。库中的方法会自动拼装参数,发送至docker engine api,从而实现交互。docker client的一些小例子,可以参考这里。

接下来,我们必须研究一下,要部署MySQL容器,需要有哪些步骤:

阅读全文 »

【Lua杂谈】一文上手coroutine协程

发表于 2019-08-25 | 更新于 2024-04-07 | 分类于 Lua杂谈

前言

提到lua,就不得不提协程coroutine。coroutine是lua的一种内在机制,为lua提供了原生的异步支持。从用户层面来看,用户不需关心coroutine的内在实现,而只需要用coroutine调度function即可,因此非常方便。

对于一个function而言,coroutine可以将function的代码分片,使得一个function可以分阶段运行。在实现上,function的状态管理会与CPU的机制相似。如果把一个function当做一个任务来看待的话,在coroutine的封装下,这个任务会被分解成多个阶段的子任务。这样,我们就可以把多个任务的子任务相互协调调度,实现更加灵活的功能交互。

因此,本期Lua杂谈,就来小试一抔coroutine的使用吧。

coroutine的基本用法

官方5.3.5版本的coroutine库,提供了如下的接口:

1
2
3
4
5
6
7
8
9
10
11
// lcorolib.c
static const luaL_Reg co_funcs[] = {
{"create", luaB_cocreate},
{"resume", luaB_coresume},
{"running", luaB_corunning},
{"status", luaB_costatus},
{"wrap", luaB_cowrap},
{"yield", luaB_yield},
{"isyieldable", luaB_yieldable},
{NULL, NULL}
};

用户可以通过coroutine.wrap与coroutine.create两种方式封装一个function(任务)。通过wrap封装任务会返回一个纯粹的lua函数(type为function),而用create封装则返回的是一个封装好的线程。

在Lua中,线程thread与协程coroutine的概念内涵有较多相似之处,但我们可以认为,线程是更加宏观广泛的概念,协程则是一种特殊的线程。线程强调的不同的routine之间运行是否独立;而协程强调的则是不同routine之间具有相互co的协作功能。

基于这两种方式调度任务的代码写法大同小异。以下以create封装任务为例,我们一起看看会是怎样的进行——

阅读全文 »

【测试人生】iOS审核&静态扫描二三事

发表于 2019-08-19 | 更新于 2024-04-07 | 分类于 测试人生

我们的日常生活离不开手机,有些同学喜欢用国产的安卓机,而另一些同学喜欢用简约的iPhone。

对比安卓和iOS的软件生态,我们可以发现:安卓软件的投放渠道繁多,题材花样繁复,质量大小不一,而iOS的投放渠道则为App Store独家,相对安卓软件来讲,不仅质量均衡,而且用户不必担心手机病毒的困扰。这一点,就归功于App Store严格的审核制度。

阅读全文 »

【GitHub探索】安卓自动化测试工具SoloPi

发表于 2019-08-11 | 更新于 2024-04-07 | 分类于 GitHub探索

前言

随着MTSC2019的召开,八月份各种测试工具相继开源,其中一款名为SoloPi的安卓自动化测试在月trending榜中排位靠前。移动App自动化测试是当前测试领域的风口之一,并且要开发一款兼容性好、需求适应多样的App,也并非三日之寒。为此,欢迎本期GitHub探索的主角——SoloPi!

测试环境为华为P20Pro,安卓版本8.1.0,SoloPi版本为0.9.1,下载地址可进入GitHub Release查看。由于只有一个测试机,所以本次仅测试SoloPi的性能测试以及录制回放功能。下面,让我们开始试水吧~

阅读全文 »

【从零单排Golang】第二话:初探服务端CRUD,gin+gorm黄金搭档

发表于 2019-08-04 | 更新于 2025-04-12 | 分类于 从零单排Golang

前言

Github传送门

学一门新语言,如果太专注于语法,那肯定学的不够快。如果有一定的需求目标,带着这个目标去学习一门新语言,这样才能学得快。

工作中写后端的时间比例不在少数,而且传闻Go也因其适用于服务端而著名。在Go社区中最为火热的服务端框架跟数据库抽象ORM层当属gin跟gorm了,因此本期单排的目标便是用gin+gorm打一个简易的框架,实现基本CRUD的目标。走你~

准备工作

在第一话中已经大致了解了Go项目的生成,故本次gin+gorm的搭建也以此为基础。

服务端领域的各种术语在不同的场景跟技术栈下有不同的含义。但总体来讲,一个简单的服务端App都会有以下的层次:

  • 校验层:预处理请求,校验请求是否合法(大小、字段、cors、oauth之类),并判断是否拦截。通常也被称作中间层middleware
  • 控制层:处理合法请求的起点——收集整理相应服务模块的结果,判断请求是否合理,决定返回的数据,遵循宽进严出原则。一般叫做Controller,gin里面叫做handler。
  • 业务层:处理真实的业务逻辑,通过和数据层以及各个业务模块的交互从而校验并构建业务数据,交由控制层决策,一般可称之为service
  • 数据层:抽象持久化数据(数据库)到代码层面并提供一系列交互访问的方法,ORM与DAO层都算在内

基于以上结构,大致构建了以下的目录结构:

阅读全文 »

【测试人生】一个测试开发的用户思维

发表于 2019-07-28 | 更新于 2024-11-03 | 分类于 测试人生

近几天一直在思考什么是用户思维,决定结合这一年的工作,把自己的想法记录下来。

在这之前,自己一直秉持一种观念——测试开发从工作内容上,更加符合“开(码)发(农)”的定义,因此应当更加着重于技术深耕,并且在业务对接时,也尽可能地从从技术实现的角度去阐述观点与想法。但是在经过同事伙伴们的提点,以及和家中领导激烈讨(吵)论(架)了一番之后,这个观念就慢慢地改变了。

测试,不仅仅是根据需求,利用各种工具,对开发交付的产品进行功能、性能、安全等测试,发现bug而后提交复现/解决方案,从而确保产品稳定(QC)。而另一些方面在于——如何确保研发计划完备进行,预防产品设计缺陷,从而保证产品体验;如何优化产品生命周期流程,从而使产品顺利上线运营(QA)。作为偏中台的测试开发,扮演的角色更像是“优化产品生命周期”的实现者,而前线上的QA与QC,则成为了我们的用户。因此在业务对接时,首先都需要尽可能满足前线同学的需求,让他们引领效率工具/平台的设计。

阅读全文 »
1…16171819
ひかり.HDQ

ひかり.HDQ

talk is cheap, code is rich
189 日志
14 分类
417 标签
GitHub Mail CSDN Juejin Steam Bilibili
© 2019 – 2025 ひかり.HDQ
|