<span>Go - httpclient 常用操作</span>

httpclient 模块介绍 httpclient是基于net/http 封装的GoHTTP客户端请求包,支持常用的请求方式、常用设置,比如: 支持设置Mock信息 支持设置失败时告警 支持设置失败时重试 支持设置项目内部的Trace 支持设置超时时间、Header等 请求说明 方法名 描述 httpclient.Get() GET请求 httpclient.Post() POST请求 httpclient.PostForm() POST请求,form形式 httpclient.PostJSON() P

  • 0
  • 0
  • 阅读 ( 1286 )

<span>企业项目迁移go-zero全攻略(二)</span>

承接上篇:上篇文章讲到go-zero架构设计和项目设计。本篇文章接着这个项目设计,将生成的app模块中gateway和RPC进行改造。废话不多说,让我们开始! gatewayservice gateway中我做了一些自定义,在端请求我们后台接口情况下,虽然多数情况是不需要关心错误码的,但是避免不了要某些场景还是需要根据固定错误码去做特殊处理,我自己定义了一个错误类,这个错误类只在gateway中使

  • 0
  • 0
  • 阅读 ( 861 )

<span>PHP设计模式—访问者模式</span>

  定义: 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。   结构: Visitor:抽象访问者,为该对象结构中ConcreteElement的每一个类声明一个Visit操作。 ConcreteVisitor:具体访问者,实现每个由Visitor声明的操作。每个操作实现算法的一部分,而该算法片段乃是对应于结构中对象的类。 Elem

  • 0
  • 0
  • 阅读 ( 1774 )

<span>PHP设计模式—迭代器模式</span>

  定义: 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。   结构: Iterator:迭代器接口,用于定义得到开始对象、得到下一个对象、判断是否到有效、当前对象等抽象方法,统一接口,目前PHP已经集成有该类。 IteratorAggregate:容器接口,目前PHP已经集成有该类。 ConcreteAggregate:具体容器类,继承IteratorAggregate。 ConcreteIt

  • 0
  • 0
  • 阅读 ( 1085 )

<span>golang1.16内嵌静态资源指南</span>

今天是万圣节,也是golang1.16新特性冻结的日子。不得不说自从go2路线发布之后golang新特性的迭代速度也飞速提升,1.16中有相当多的重要更新,包括io标准库的重构,语言内置的静态资源嵌入等。 本次将要介绍的是新的静态资源嵌入功能,虽然之前已经有相关的提案,但实际的api和提案还有些出入,今天新特性冻结也就意味着1.16的api已经趋于稳定,是时候学习新知识了。 本文

  • 0
  • 0
  • 阅读 ( 1438 )

<span>Golang 数组 切片 字典 基本知识点</span>

数组 数组的声明 vararrayName[arraySize]dataType eg: vararray1[5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型。 数组的初始化 当数组定义好以后,如果没有给数组元素指定值,则所有元素被自动初始化为类型所对应的零值 vararray1[5]int //[00000] 变量的类型零值 在Go语言中,当一个变量被定义为某一种类型后,Go语言会自动初始化其值为零(ZeroValue) 零值并不等于空值

  • 0
  • 0
  • 阅读 ( 1122 )

<span>[系列] Go - 基于 GORM 获取当前请求所执行的 SQL 信息</span>

前言 为了便于精准排查问题,需要将当前的请求信息与当前执行的SQL信息设置对应关系记录下来,记录的SQL信息包括: 执行SQL的当前时间; 执行SQL的文件地址和行号; 执行SQL的花费时长; 执行SQL的影响行数; 执行的SQL语句; 数据库组件使用的是GORM。 思路 1、在执行SQL前,设置开始执行时间(计算执行时长会用到); 2、在执行SQL后,第一,获取当前请求的上下文,为什么

  • 0
  • 0
  • 阅读 ( 975 )

<span>企业项目迁移go-zero全攻略(一)</span>

作者:Mikael 最近发现golang社区里出了一个新兴的微服务框架。看了一下官方提供的工具真的很好用,只需要定义好.api文件模版代码都可以一键生成,只需要关心业务;同时core中的工具极大减少了开发成本。 废话不多说,来看看这个微服务框架:go-zero 起源 聊聊与go-zero结缘 最先接触go-zero是2020年10月国庆假期,说来也巧,看到有人在go-micro群中问go-zero情况,当时go-zero作者在群

  • 0
  • 0
  • 阅读 ( 1104 )

<span>一道有趣的golang排错题</span>

很久没写博客了,不得不说go语言爱好者周刊是个宝贝,本来想随便看看打发时间的,没想到一下子给了我久违的灵感。 go语言爱好者周刊78期出了一道非常有意思的题目。 我们来看看题目。先给出如下的代码: packagemain import( "fmt" "time" ) funcmain(){ ch1:=make(chanint) gofmt.Println(&lt;-ch1) ch1&lt;-5 time.Sleep(1*time.Second) } 请问这串代码的输出是什么。 我最先想到的是5,毕竟

  • 0
  • 0
  • 阅读 ( 872 )

<span>go调度: 第三部分-并发</span>

前言 这个是用来讲述go调度器机制和特性的第三部分.这个主要关注并发. 博客三部分的顺序: 1) go调度:第一部分-操作系统调度 2) go调度:第二部分-go调度器 3) go调度:第三部分-并发   介绍 当我在解决一个问题,尤其是一个新问题的时候,开始阶段,我不会考虑并发是不是有用.我寻找一个顺序化解决方案,并且确保这个方案有效.然后,我进行评估,来看看并发是否合适.有些情况下,并

  • 0
  • 0
  • 阅读 ( 814 )

<span> [Go] golang中接口值(interface)与nil比较或指针类型之间比较的注意问题</span>

注意问题,当对interface变量进行判断是否为nil时,只有当动态类型和动态值都是nil,这个变量才是nil 下面这种情况不是nil funcf(outio.Writer){ //...dosomething... ifout!=nil{ out.Write([]byte("done!n")) } } varbuf*bytes.Buffer f(buf)      上面的情况,动态类型部分不是nil ,因此out就不是nil   动态类型为指针的interface之间进行比较也要注意  当两个

  • 0
  • 0
  • 阅读 ( 1370 )

<span>[Go] golang中接口值(interface)的比较</span>

当写项目的过程中,有时候进行逻辑判断,如果没注意对两个interface类型的变量进行比较,会造成混乱问题 接口比较的时候,只有当这两个变量的动态类型,动态值都相等的时候,才是相等的 一个nil的interface类型,是包含下面俩的,动态类型和动态值       使用fmt.Printf("%Tn",w) 可以打印interface变量的动态类型 比如项目里,这俩变量虽然都是interface{}的值都是1,但是不能进行直接比较 ,这

  • 0
  • 0
  • 阅读 ( 1380 )

<span>golang遍历时修改被遍历对象</span>

目录前言遍历切片遍历map总结 前言 很多时候需要将遍历对象中去掉某些元素,或者往遍历对象中添加元素,这时候就需要小心操作了。 对于go语言中的一些注意事项我做了总结和示例,留下点笔记。 遍历切片 遍历切片时去掉元素,错误示例: funcmain(){ arr:=[]int{1,2,3,4} fori:=rangearr{ ifarr[i]==3{ arr=append(arr[:i],arr[i+1:]...) } } fmt.Println(arr) } 最终报错panic:runtimeer

  • 0
  • 0
  • 阅读 ( 918 )

<span>深入理解Go Context</span>

目录emptyCtx类型cancelCtx类型timerCtx类型valueCtx类型 在Go语言并发编程中,用一个goroutine来处理一个任务,而它又会创建多个goroutine来负责不同子任务的场景非常常见。如下图 这些场景中,往往会需要在API边界之间以及过程之间传递截止时间、取消信号或与其它请求相关的数据 谁是性能卡点呢?得通知它们任务取消了。 这时候就可以使用Context了。context包在Go1.7的时候被加入到

  • 0
  • 0
  • 阅读 ( 1167 )

<span>GO 语言 error handing</span>

ErrorhandlingandGo https://blog.golang.org/error-handling-and-go    文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。 __________________________________________________________________________________ 若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)

  • 0
  • 0
  • 阅读 ( 1275 )

<span>你知道Golang源码各目录的作用吗?</span>

我是平也,这有一个专注Gopher技术与成长的开源项目「gohome」 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢? 目录总览 . ├──AUTHORS ├──CONTRIBUTING.md ├──CONTRIBUTORS ├──LICENSE ├──PATENTS ├──README.boringcrypto.md ├──README.md ├──SECURITY.md ├──api ├──doc ├──favicon.ico ├──lib ├──misc ├

  • 0
  • 0
  • 阅读 ( 942 )

<span>golang Gin framework with websocket</span>

概述 golangwebsocket库 示例 后端 前端 结论 概述 对于golang的web开发,之前写过2篇blog,分别介绍了: 在Gin框架下,各类httpAPI的开发方法(包括文件上传,下载等)golangWeb方案 Gin框架下反向代理的使用:反向代理的使用 这里再给之前的Web方案中加上Websocket的部分,基本就能涵盖日常开发所需的所有接口类型了. golangwebsocket库 这里使用的websocket库来自Gorillawebtoolkit 下面用代码来演示如何在Gin框

  • 0
  • 0
  • 阅读 ( 1439 )

<span>[Go] 使用go mod进行依赖管理</span>

开启两个环境变量 goenv-wGO111MODULE=ongoenv-wGOPROXY=https://goproxy.cn,direct   在自己的项目里 gomodinit 然后如果有引用github上的包,直接gomodtidy,就会自动安装   golang开启gomod支持 files===&gt;settings  

  • 0
  • 0
  • 阅读 ( 842 )

<span>一文读懂goroutine和channel</span>

开源库「gohome」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎gohome~ 背景介绍 大家都知道进程是操作系统资源分配的基本单位,有独立的内存空间,线程可以共享同一个进程的内存空间,所以线程相对轻量,上下文切换开销也小。虽然线程已经比较轻量了,但还是占近1M的内存,而今天介绍的有“轻量级线程”之称的Goroutine,可以小至几十K甚至几K,切换的开

  • 0
  • 0
  • 阅读 ( 1203 )

<span>golang--深入简出,带你用golang的反射撸一个公用后台查询方法</span>

一些基本方法 本篇不会介绍反射的基本概念和原理等,会从每个常用的方法入手,讲解一些基本和进阶用法,反射不太适合在业务层使用,因为会几何倍的降低运行速度,而且用反射做出来的程序健壮度不高,一旦一个环节没有处理好就会直接panic,影响程序的运行,但是在后台上使用还是很适合的,可以极大的降低代码量,从繁复的增删改查操作和无边的抛err(面向错误编

  • 0
  • 0
  • 阅读 ( 788 )