Go语言之反射
一、反射的基本概念
(一)什么是反射
反射可以再运行时动态获取变量的各种信息,比如变量的类型、值等
如果时结构体变量,还可以获取到结构体本身的各种信息,比如结构体的字段、方法
通过反射,还可以修改变量的值、调用方法
不过使用反射,需要引入一个包:reflect
典型用法是用静态类型interface{}保存一个值,通过调 ...
.NET/JAVA/GO 固定时间窗口算法实现(无锁线程安全)
一.前言
最近有一个生成 APM TraceId 的需求,公司的APM系统的 TraceId 的格式为:APM AgentId+毫秒级时间戳+自增数字,根据此规则生成的 Id 可以保证全局唯一(有 NTP 时间同步),前两个字段好说,最后一个字段也不复杂,我的想法是按秒来进行自增。比如说1秒的时候,自增计数为100,在2秒的时候会重置为0,然后进行自增 ...
Go vs Java vs C# 语法对比
目录1. 说明2. 对比2.1 关键字(keywords)2.1.1 Go2.1.2 Java2.1.3 C#2.1.4 小结2.2 基本数据类型2.2.1 Go 基本数据类型2.2.2 Java 基本数据类型2.2.3 C# 基本数据类型2.2.4 小结2.3 值类型和引用类型2.3.1 Go 值类型和引用类型2.3.2 Java 值类型和引用类型2.3.3 C# 值类型和引用类型2.3.4 小结2.4 变量2.5 运算2.5.1 Go ...
Go 学习路线(2022)
原文链接: Go 学习路线(2022)
Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发。
那么,怎么学呢?
我发现,在互联网时代,学习的困难不是说没有资料,而是资料太多,不知道应该看哪个,从哪开始看。
所以,我整理了一份 Go 学习路线,这份学习路线不以数量取胜,努 ...
kubernetes-client go基础实践
准备工作
1. 检查k8s的版本
[root@k8s-node1 ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5", GitCommit:"aea7bbadd2fc0cd689de94a54e5b7b758869d691", GitTreeState:"clean", BuildDate:"2021-09-15T21:10:45Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/a ...
带你十天轻松搞定 Go 微服务系列(一)
本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
环境搭建(本文)
服务拆分
用户服务
产品服务
订单服务
支付服务
RPC 服务 Auth 验证
服务监控
链路追踪
分布式事务
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速 ...
go socket实现灵活发送接收消息
使用socket实现类似微信单聊自由发送或接收消息的功能.
server端:
func main() {
listener, err := net.Listen("tcp", ":8080")
if err != nil {
panic(err)
}
log.Println("Listening... ...")
for {
conn, err := listener.Accept()
if err != nil {
panic(err)
}
log.Println("connect success")
...
go操作excel
第三方包准备:
go get -u github.com/xuri/excelize/v2
案例: 读取excel,去除空行,筛选第二列不为空的行并将最终结果存入新的excel中.
思路: 读取excel,使用GetRows()方法读取指定sheet中所有数据,如果excel数据量庞大,可以指定一个int类型的flag,通过GetCellValue()方法逐行读取,因为我只保存两列数据,所 ...
JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)
JavaScript的执行过程
前言
编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行。那么在解析阶段JS引擎又会进行哪些操作,接下来就一起来了解一下JavaScript在执行过程中的详细过程,包括执行上下文、GO、AO、VO和VE等概念的理解。
1.初始化全局对象
首先,JS引擎 ...
Go 字符串拼接6种,最快的方式 -- strings.builder
我们首先来了解一下Go语言中string类型的结构定义,先来看一下官方定义:
// string is the set of all strings of 8-bit bytes, conventionally but not// necessarily representing UTF-8-encoded text. A string ...
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
什么是流处理
如果有 java 使用经验的同学一定会对 java8 的 Stream 赞不绝口,极大的提高了们对于集合类型数据的处理能力。
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
Stream 能让我们支持链式调用和函数编程的风 ...
Go 语言标准库之 os 包
os 包提供了平台无关的操作系统功能接口,主要是文件相关的I/O,本文会重点对文件操作进行介绍。
文件 I/O
在 Go 中,文件描述符封装在os.File结构中。os.File代表一个打开的文件对象,可以使用该对象进行文件读写操作。
type File struct {
*file // os specific
}
type file struct {
pfd poll.FD
n ...
go学习(四)新建go的Web项目
一、vscode搭建Go环境
1、安装go环境
官网或golang中文网 ,下载xx.windows-amd64.msi
cmd查看版本:go version
我用的是golang 1.16.5,golang 1.18版本添加了泛型。
2、使用 Go Module
2.1 go module简介
(1)不再需要GOROOT和GOPATH
使用Go Module进行包管理,就不再需要GOROOT和GOPATH了!
Go开发相关的环境变量(GOR ...
Go 疑难杂症汇总
1. revision v0.0.0: unknown revision v0.0.0
go get -u github.com/uudashr/gopkgs/cmd/gopkgs 报错:
[root@lubanseven home]$ go get -u github.com/uudashr/gopkgs/cmd/gopkgs
go: downloading github.com/uudashr/gopkgs v1.3.2
go: downloading github.com/uudashr/gopkgs/cmd/gopkgs v0.0.0-20191024034442-58e9141 ...
【Go反射】创建对象
前言
最近在写一个自动配置的库cfgm,其中序列化和反序列化的过程用到了大量反射,主要部分写完之后,我在这里回顾总结一下反射的基本操作。
第一篇【Go反射】读取对象中总结了利用反射读取对象的方法。
第二篇【Go反射】修改对象中总结了利用反射修改对象的方法。
本篇总结一下创建操作,即创建新的简单类型(int、uint、f ...
【Go反射】修改对象
前言
最近在写一个自动配置的库cfgm,其中序列化和反序列化的过程用到了大量反射,主要部分写完之后,我在这里回顾总结一下反射的基本操作。
上一篇【Go反射】读取对象中总结了利用反射读取对象的方法。
本篇总结一下写入操作,即对简单类型(int、uint、float、bool、string)、指针、切片、数组、map、结构体的修改操作, ...
Go结构体与接口
一、结构体(struct)
相当于Java中的类,结构体名称首字母需大写,结构体名称首字母大写是公有的,包外可访问;首字母小写是私有的,仅在包内可访问
结构体命名需要使用驼峰命名法,且不能出现下划线
Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体(stru ...
--go_out: protoc-gen-go: Plugin failed with status code 1.
person.proto文件
//指定版本
//注意proto3与proto2的写法有些不同
syntax = "proto3";
//包名,通过protoc生成时go文件时
option go_package="/address2";
//手机类型
//枚举类型第一个字段必须为0
enum PhoneType {
HOME = 0;
WORK = 1;
}
//手机
message Phone {
PhoneType type = 1;
string numb ...
我好像发现了一个Go的Bug?
从一次重构说起
这事儿还得从一次重构优化说起。
最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码。
用责任链模式,最大的好处是可以针对每次请求灵活地插拔路由能力,如:
这样实现会在每次请求到来时去 new 出整个责任链,可以预见 ...
go: go.mod file not found in current directory or any parent directory; see 'go help mod 解决
go: go.mod file not found in current directory or any parent directory; see 'go help mod
go:在当前目录或任何父目录中找不到 go.mod 文件; 参见“去帮助模块”
1、原因go module没有开启
yang@master:~/go/GOROOT/bin/hello$ go env
GO111MODULE=""
2、解决办法:
go的环境设置问题,执行:
go env -w GO11 ...