package main import ( "context" "encoding/json" "fmt" "github.com/olivere/elastic" "log" ) func main() { client, err := elastic.NewClient(elastic.SetURL("http://192.168.2.10
RDB 文件使用二进制方式存储 Redis 内存中的数据,具有体积小、加载快的优点。本文主要介绍 RDB 文件的结构和编码方式,并借此探讨二进制编解码和文件处理方式,希望对您有所帮助。 本文基于 RDB version9 编写, 完整解析器源码在 github.com/HDT3213/rdb RDB 文件的整体结构 如下图
从一篇博客上学习到的方式。作用于树状数据处理返回,很巧妙,学习到了,记录下来。 实现思路 1.获取所有数据list 2.遍历所有数据list,转换为map。以唯一ID为key 3.遍历所有数据list,(这里继续用list,是为了保证按照顺序输出) 4.遍历中,取所有的父级ID。定义为一级子集。 5.
for select时,如果通道已经关闭会怎么样?如果只有一个case呢? select用于监听channel,在通道关闭时,channel会返回类型的空值,直接用`<-`取值时无论通道是否关闭都会有值返回.所以当使用select监听通道时,如果某个channel已经关闭,则每次都会执行这个case; 如果只有
Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现 map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和 HashTable 等。 Map 是一种无序的键值对的集合。Map 最重要的一点是
学习网址:https://www.bilibili.com/video/BV1ME411Y71o?spm_id_from=333.337.search-card.all.click 1.官网 : https://go.dev/ 2.下载,安装 3.验证 命令工具输入 go version 出现版本号 4.设置共gopath(环境变量) 我的电脑=>右键=>高级系统设置=>高级=>环境变量=>用户变量=>是否有
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 1.1 HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守
在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包,如何导出包的内容及如何导入其他包。 一、包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。 二、定义包 我们还
Golang基础 1. 主要特征 1.1 特征 垃圾回收 丰富的内置类型 多返回值 匿名函数 闭包 OOP 并发编程 反射 错误处理 1.2 命名规则 首字母可以是不能是数组 可以由Unicode字符、下划线、数字构成 长度不限 严格固定首字母大小写,有不同含义 1.3 Go项目 一个Golang工程中主要包含三
golang数组类型系列 数组 数组变量结构 //很单纯,只是将数据放到内存中而已,没有特殊结构。下面的字符串、切片、字典实际上都是结构体 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组的长度是数组类型的组成部分,不同长度或不同类型的数据组
本文主要介绍Go语言中切片(slice)及它的基本使用。 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。 例如: func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ sum = sum + v } return sum } 这个求和函数只能接受
一、Array(数组) 数组是同一种数据类型元素的集合。在Go语言中,声明时就确定,使用时可以修改数组成员,但是数组大小不可变。基本语法: //定义一个长度为3元素类型为int的数组。 var a[3] int 一、数组定义 var 数组变量名 [元素数量]T 比如:var a [5]int, 数组的长度必须是常量,并且长度
什么是method(方法)?method是函数的另外一种形态,隶属于某个类型的方法。 method的语法: func (r Receiver) funcName (parameters) (result) receiver可以看作是method的第一个参数,method并且支持继承和重写。 Go中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。 这几天已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓
下载 cd /opt/soft sudo wget https://go.dev/dl/go1.18.1.linux-amd64.tar.gz 解压 sudo tar -xzvf go1.18.1.linux-amd64.tar.gz 进入解压后的go目录 cd go 创建GOPATH目录 mkdir GOPATH 配置环境变量 打开家目录下的.bashrc文件 vim ~/.bashrc 添加两行配置 expo
转载自:https://www.ohyee.cc/post/note_go_read_openwrt_timezone openwrt 运行golang 时候发现打印时间错误。golang读取时区的过程: 读取TZ环境变量 读取/etc/localtime文件 本地时区读取失败,使用 UTC 时间 所以我们可以设置/etc/localtime 的时区。但是/etc/localtime文件不是
slice 切片的底层类似一个struct struct{ ptr *[]byte//指针 len int//长度 cap int//容量(扩容原理) } slice知识点 package main import ( "fmt" ) func test(slice []int) { slice[0] = 100 //会改变切片的值,因为传进来的切片是指针,属于实参传递了 //这里有可能会造成
golang 中 copy 函数用于合并两个切片; func copy(dst, src []Type) int 注意copy的长度是dest 和 src 中最小的长度值; package main import ( "fmt" ) func main() { src := []int{1, 2} dest := []int{} copy(dest, src) fmt.Println(dest) // [] } pack
很多人认为 父 goroutine 结束后 子goroutine 一定会结束 结论只要main 不结束 goroutine 一定会运行 代码验证 package main import ( "fmt" "time" ) func main() { fmt.Println("main start") go func() { fmt.Println("parent start") go func() {
很多人在博客看到 slice 扩容策略如下 当大于 1024 则1.5倍 大于1024则两倍 这个结论是错误的 a:= []int{1,2} a= append(a,3,4,5) // 如果是2倍应该 容量是8 但是实际 5 ####### 查阅源码 runtime/slice.go func growslice(et *_type, old slice, cap int) slice {
官方一段话 time.After 内存gc 不会回收 其实不是 源码 / After waits for the duration to elapse and then sends the current time // on the returned channel. // It is equivalent to NewTimer(d).C. // The underlying Timer is not recovered by the garbage collect
什么是protobuf# protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。 protobuf与json区别# JSON与
概要 在调用第三方 API 的时候, 基本都有访问限速的限制条件. 第三方的 API 有多个的时候, 就不太好控制访问速度, 常常会导致 HTTP 429(Too Many Requests) 然后就会有一段时间的禁止访问. 为了应对这种限速的情况, 通过一个简单的请求队列来控制访问的速度, 之后基本没遇
定义 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式,可以看到定义简单,算是设计模式中最简单的一个模式了。 饿汉模式 即还未使用该对象时,对象已经创建完成。方法是通过golang 的init函数,在导包时就自动执行。 package mian import "fmt" var
Json 形式输出 Golang 如果想要按json字符串的形式输出某个对象,先使用 json.Marshal()函数把对象转换成[]byte数组,然后string(obj)强转成字符串后用%v输出,或者直接使用%s输出 对一个对象marshal后,如果 %s 输出能获取到json格式化后的字符串,如果使用 %v 输出,会输出一个字节数组,因为