onconfigchange golang viper
golang Context应用举例
Context本质 golang标准库里Context实际上是一个接口(即一种编程规范、 一种约定)。 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() err ......
Golang method | Interfaces 示例
方法与接口(method Interface) package interFaces import ( "fmt" "log" ) // manager Appstore online account type Account struct { surName string givenName st ......
Golang视频学习地址
GO 视频学习资料 Go编程基础: https://study.163.com/course/courseMain.htm?courseId=306002 8小时转职Golang工程师(如果你想低成本学习Go语言):https://www.bilibili.com/video/BV1gf4y1r79 ......
Golang 命名返回值和普通返回值
1、概述 在Go语言中,函数可以有命名返回值和普通(匿名)返回值。命名返回值会被视为定义在函数顶部的变量,并且在使用 return 语句返回时,不再必须在其后面指定参数名,也就是支持“裸”返回;而使用普通返回值时,使用 return 语句返回时,需要在其后面指定与普通返回值相同类型的参数名。 实际上 ......
golang 多生产者+多消费者模式
参考 https://gist.github.com/vitan/aedb628a40478cf8b6a33dc87a5ff52f https://gist.github.com/mochow13/74ee57078d58536929575ab481dd9693 1 package main imp ......
Golang 的骚操作:go:linkname
背景 在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:time.Now调用的 now(), time.Sleep , reflect.makechan // Provided by package runtime. func now() (sec int64, nsec int32, ......
golang 1.18 workspace mode
why ? 为什么需要workspace 历史发展和版本依赖的管理 GOPATH 最开始的模式 开发者需要设置一个环境变量 GOPATH,用于指定项目的工作空间。GOPATH 是一个目录路径,其中包括了三个重要的子目录:src、bin 和 pkg 通过 go get 命令,GOPATH/src 下的 ......
每日一库:使用Viper处理Go应用程序的配置
在开发Go应用程序时,处理配置是一个常见的需求。配置可能来自于配置文件、环境变量、命令行参数等等。Viper是一个强大的库,可以帮助我们处理这些配置。 什么是Viper? Viper是一个应用程序配置解决方案,用于Go应用程序。它支持JSON、TOML、YAML、HCL、envfile和Java p ......
golang 的循环导入
内容来自对 chatgpt 的咨询 循环导入概念 在Go语言中,循环导入是一个需要避免的问题。它发生在两个或更多的包彼此导入对方,形成一个导入循环,导致编译器无法处理。 例如,假设你有两个包,包A和包B。包A导入了包B,然后包B又导入了包A,这就形成了一个循环导入。在这种情况下,编译器将无法确定要首 ......
golang 代码实现判断当前时间是否在"19:00"和"24:00"这两个时间范围内
代码是 chatgpt 写的 package main import ( "fmt" "time" ) func main() { now := time.Now() // 获取今天的年月日 year, month, day := now.Date() // 创建两个新的时间点,它们在今天的 19: ......
golang 怎么使用接口中声明的方法
假设你有一个golang 的 interface,里面声明了1个函数,怎么调用这个函数 type Man interface { Eat(ctx context.Context, food string}) error } 使用方式 创建结构体实现这个接口声明的方法,然后创建该结构体对象,调用方法 ......
golang 使用redis设置分布式锁 demo
内容来自对 chatgpt 的咨询 分布式锁是在多个节点上运行的应用程序中协调工作的一种常用方法,而Redis是实现分布式锁的流行选择。以下是使用Go语言和github.com/go-redis/redis库来设置Redis分布式锁的一个简单示例: 首先,确保你已经安装了该库: go get -u ......
golang 对字符串进行base64编解码、md5 编码
内容来自对 chagpt 的咨询 一、对字符串进行 base64 编解码 base64 编码 要在Go语言中对字符串进行base64编码,你可以使用标准库中的encoding/base64包。以下是一个简单的示例: package main import ( "encoding/base64" "f ......
golang 把内容写到 csv 文件或者 xlsx 文件里
内容来自对 chatgpt 的咨询 csv 格式 csv 格式的文件使用 wps 或者 office 打开后是一个 excel 表格的形式,很容易看到表格里的数据。csv 格式跟 markdown 格式有点像,只需要按照固定的语法放置文本,保存后,用对应的渲染软件打开,就能得到想要的效果。 比如下面 ......
从一个golang 员工emp数组中,找到其中name相同的元素,把结果放到一个新数组里,代码实现
内容来自对 chatgpt 的咨询 为了找到具有相同名称的员工,并将结果放入一个新的数组中,我们可以首先使用一个映射(map)来存储每个名称及其出现的次数。然后,我们可以遍历原始数组并使用映射来判断是否有重复的名称。 以下是一个示例代码,演示如何实现这一目标: package main import ......
golang: 仅声明但未初始化的切片可以执行 for range 和 append 操作;仅声明但未初始化的 map,可以执行 for range 操作,但是不能执行添加元素操作
仅声明但未初始化的切片可以执行 for range 和 append 操作 你可以对一个未初始化的切片进行append和for range操作。 一个未初始化的切片的零值是nil,且其长度和容量都为0。你可以安全地使用append函数向其添加元素: var aaa []int64 aaa = app ......
Docker - ERROR: failed to solve: golang:latest: error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
Dockerfile: FROM golang:latest WORKDIR /app ADD . . RUN go get RUN go build -o app . CMD ["/app/app"] zzh@ZZHPC:/zdata/MyPrograms/Go/aaa$ docker build ......
Go项目学习(3)-cobra+viper仿SpringBoot读取配置
一开始只是想简单做一个cobra+viper的组合,做着做着因为从SpringBoot带来的习惯,想看看能不能仿制一个类似的功能,做起来貌似真的还阔以。 ......
Golang函数或方法传递nil值的一个坑
package t13_niu_error import ( "bytes" "fmt" "io/ioutil" "net/http" "testing" ) // 将请求获取的数据转为string,支持GET或POST请求 func BaseRequestString(requestMethod, ......
最简单的方式实现 Golang的级别日志
lo.go package lo import ( "log" "os" ) const ( TRACE int = iota DEBUG INFO WARN ERROR FATAL ) type LevelLogger struct { level int logger *log.Logger } ......
golang 实现 socks5 正向代理服务器
socks5proxy.go package main import ( "encoding/binary" "errors" "flag" "fmt" "io" "net" "strconv" ) var port int func main() { flag.IntVar(&port, "p", ......
玩一玩 golang 1.21 的 pgo 编译优化
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 1.下载镜像 暂时不想替换本机的 golang 版本,于是打算在容器里编译: docker pull --platform=linux/amd64 golan ......
Go项目学习(2)-viper
前言 GitHub地址 Api地址 详细教程可直接参考Github,已经很详细了,这里只进行简单入门知识总结。 介绍 用来获取配置,配置可来自flag、环境变量、配置文件、远程配置…… 获取配置的优先级:Set,flag,env,config,key/value stroe,default。 配置项 ......
GOLANG:调用delphi7编写的dll
0. delphi对winapi有很强的封装,使其更易用。 1. delphi声明dll内函数 需要尽量以此方式: procedure test(data: pchar; count: integer);stdcall; 2.golang 调用方法: str := []byte("abcdedf") ......
Golang 反射 && 单元测试
一.反射 1 package reflecttest 2 3 import ( 4 "fmt" 5 "reflect" 6 ) 7 8 // 语法:const [name] [type] = [value] 9 // const 只能修饰int\float\string\bool作为常量 10 co ......
golang fyne 添加系统托盘
环境:go fyne 要求:电脑右下方添加系统托盘,点击图标显示托盘菜单 效果: 实现: 1 package main 2 3 import ( 4 "fyne.io/fyne/v2" 5 "fyne.io/fyne/v2/app" 6 "fyne.io/fyne/v2/widget" 7 "fyn ......
golang fyne 自定义窗口、托盘图标 myApp.SetIcon(icon)
环境:go fyne 要求:更改窗口和托盘中的图标。如果添加了托盘托盘的图标也会更新 注意:更改图标的代码要在创建窗口和托盘的前面 效果: 文件位置: 实现: 1 package main 2 3 import ( 4 "fyne.io/fyne/v2" 5 "fyne.io/fyne/v2/app ......
golang fyne 创建两个窗口,窗口居中。点击按钮显示第二个窗口 myApp.NewWindow("new")
环境:go fyne 实现:在窗口的按钮中,点击按钮弹出第二窗口,并且窗口居中 注意:创建的第一个窗口和第二个窗口必须是通过同一个 myApp := app.New()创建出来的 效果: 实现: 1 package main 2 3 import ( 4 "fmt" 5 6 "fyne.io/fyn ......
golang-goroutine
常见的并发模型 1.多线程 每个线程一次处理一个请求,线程越多可并发处理的请求数就越多,但是在高并发下,多线程开销会比较大。 2.协程 无需抢占式的调度,开销小,可以有效的提高线程的并发性,从而避免了线程的缺点的部分,线程基础上的进一步抽象 3.基于异步回调的IO模型 说一个熟悉的,比如nginx使 ......
golang项目搭建笔记-cobra
cobra介绍 GitHub地址 cobra中,一个命令主要概念为command,arguement,flag,可以理解为谓语、宾语、状语 格式为APPNAME COMMAND ARG --FLAG,例如: git clone URL --bare 项目搭建 cobra提供了非常方便的工具cobra ......