golang-goroutine goroutine golang

在Golang中使用Testify mock框架

1. 前言 2. 实现代码 3. Mock和测试 4. Mock无参方法 5. Mock带参数的方法 6. Mock带参数的方法, 但是参数具体内容非测试重点 7. Mock带参数的方法, 并校验实际参数 8. Mockery 9. 参考 1. 前言 我使用golang已经有一段时间了,但直到最近我 ......
框架 Testify Golang mock

golang1.6版本json包解析嵌套指针的问题小记

指针的指针问题 本地跑的好好的,测试环境跑的好好,预发布环境(准线上环境),跪了。 起因就是: 1 a := &struct{s:""} 2 json.Unmarshal([]byte{}, &a) 3 fmt.Println(a.s) //报错行 第一行代码进行 &取地址,获得指针变量。 第二行代 ......
小记 指针 golang1 版本 golang

Golang单元测试

1. 前言 2. 先决条件 3. 创建单元测试的示例程序 4. 创建单元测试 5. 使用go test运行测试 6. Table-driven的单元测试 7. 测试覆盖率 8. Go基准测试 9. 为代码写示例 10. 总结 11. 参考文档 1. 前言 原文: How To Write Unit ......
单元 Golang

Golang 并发&同步的详细原理和使用技巧

Golang 并发概要说明 并发模型 Golang 的并发模型属于一种很典型的 CSP(communicating sequential processes) 并发模型,其核心是不要通过共享内存来通信,而应该通过通信来共享内存。具体实现,就是通过 goroutine 来实现并发,然后并发的 goro ......
使用技巧 原理 技巧 Golang amp

golang - 字符串数组是否存在某个值 -解决

做了个工具 // IsContainOne 字符串数组是否存在某个值 func IsContainOne(arr []string, v string) bool { sort.Strings(arr) index := sort.SearchStrings(arr, v) if index < l ......
数组 字符串 字符 golang

Golang - 6 Golang中包的使用、安装第三方包

6 包 包:包是在一个文件夹下,这个文件夹下所有go文件的第一行要声明包 关键词:import 1 包的使用 ① 包内部,首字母小写,不可导出;大写开头,表示可导出【函数、变量、结构体】 ② 包内部的变量,只能定义一次 ③ 包内部的东西,在包内部可以直接使用 比如同一个包下,不同go文件中可以直接使 ......
Golang 第三方

Golang - 5 Golang的流程控制:if/else、for、switch

5 流程控制 1 if/else 1.1 语法 // 基本形式 if 条件1 { }else 条件2 { }else { } 多个分支 age := 99 if age>=80 { fmt.Println("耄耋老人") }else if age>=70 && age<80 { fmt.Printl ......
Golang 流程 switch else for

golang —— append 的奇妙用法

将切片 b 的元素追加到切片 a 之后:a = append(a, b...) 复制切片 a 的元素到新的切片 b 上: b = make([]T, len(a)) copy(b, a) 删除位于索引 i 的元素:a = append(a[:i], a[i+1:]...) 切除切片 a 中从索引 i ......
golang append

golang之日志分割

自己学习记录,可以分享给大家,如有不对或不足之处请勿喷! 日志分割和日志钩子框架是使用开源三方的名字叫:file-rotatelogs,lfshook hook.go package mlog import ( rotatelogs "github.com/lestrrat-go/file-rota ......
golang 日志

Golang - 4 Golang 函数

4 Golang 函数 函数 函数 是将一个或者一类问题包装为一个代码块,可以被多次调用,提高代码重用性。 函数也是一种类型,参数和返回值都是类型的一部分,并且返回值可以是一个函数 (1)语法规则 func 函数名(参数1 类型, 参数2 类型, ...) (返回值1类型, 返回值2类型, ...) ......
Golang 函数

golang -WARNING: undefined behavior - version of Delve is too old for Go version 1.19.3 (maxi mum supported version 1.17)-解决

1.背景 启动警告 这是idea 内置的dlv.exe调试器版本太低了 2.解决 安装最新的 go install github.com/go-delve/delve/cmd/dlv@latest 安装成功后, 在golang的安装位置多出来个新的dlv.exe idea打开配置 写上自己的地址即可 ......
version undefined supported behavior WARNING

关于golang线程安全

最近在字节面试,面试有一个提问: golang中的string赋值是线程安全的吗?如果是,怎么验证,如果不是,怎么验证第一反应,golang的string底层结构: type stringStruct struct { str unsafe.Pointer len int } 其中 str 是一个不 ......
线程 golang

引用 maxmind golang 库导致的程序无法 recover crash 的问题

新做的 Gateway 程序打算使用一个 maxmind 第三方库来解析地理信息,想了一下比较简单找了一个库直接使用。 项目跑了一天得到了一堆 panic,程序崩溃超过 1s 丢了不少数据。 从 stack 信息可以看到调用 amxminddb-golang 这个库的 readLeft 出现了错误, ......
maxmind recover 程序 golang 问题

golang 使用 net包实现 tcp server 示例

之前用到 golang 进行网络编程时,主要就是使用 net/http 和 web 框架 gin,这些网络库的底层其实也还是用的标准库自带的 net包,很多是对路由或者其他做封装,而且 golang 本身的长处之一也是网络IO的处理,这也得益于其底层的 IO模型,今天我们分享的是基于 TCP ser ......
示例 golang server net tcp

Go语言入门12(协程 goroutine)

协程 进程和线程 进程 ​ 当运行一个应用程序的时候,操作系统会为这个应用程序启动一个进程。可以将这个进程看作一个包含了应用程序在运行中需要用到和维护的各种资源的容器。这些资源包括但不限于内存地址空间、文件和设备的句柄以及线程 线程 ​ 一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中所 ......
goroutine 语言

Golang - time包获取当前日期/时间戳并格式化输出

获取时间对象 package main import ( "fmt" "time" ) // 24小时制 https://www.zhihu.com/question/366830553 const LAYOUT = "2006-01-02 15:04:05" //只能用这个日期 func main ......
日期 格式 时间 Golang time

golang 中的闭包之函数执行完毕后对携程中使用的闭包变量的影响

看到一个问题感觉很神奇啊,按照以前 Java 或者其他的语言惯例,函数执行完毕后再去引用函数内定义的变量应该会出问题,但是 go 好像不是这个样子,当函数执行完毕退出后,携程中依旧能够正常使用闭包捕获的变量,如: package main import ( "fmt" ) type mystruct ......
闭包 变量 函数 golang

golang 中通过strings/bytes/bufio 等包实现相关IO

在 go 的 IO 中,除了 io 、os 等包,我们还有 strings 、 bytes 、bufio 等实现 IO 读写,这其中有些实现了 io.Reader,有些同时实现了 io.Reader和io.Writer 接口。接下来我们一个个看相关的使用。 1.strings 在 strings包 ......
strings golang bytes bufio

golang 通过 os 包进行文件读写

go 中 os包 主要与操作系统打交道,实际底层还是通过相关的系统调用实现文件的读写操作,今天我们就来聊聊通过 os包 实现文件的读写操作。 我们在使用 os包 进行相关操作时,主要流程: 读操作 open -> read -> close 写操作 open -> read -> write -> ......
文件 golang os

golang 通过 io 包进行文件读写

在 golang 语言中,实现io的读与写,只要实现了如下的读写接口即可: // go 1.19/src/io/io.go type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Writ ......
文件 golang io

[译]Golang template 小抄

[译]Golang template 小抄 目录 [−] 解析和创建模板 命名模板 创建模板 解析多个模板 解析字符串模板 执行模板 执行简单模板 执行命名的模板 模板编码和HTML 上下文编码 安全字符串和 HTML注释 模板变量 . 字符 模板中的变量 模板动作 if/else 语句 移除空格 ......
template Golang

golang reflect.DeepEqual的一个小坑

go语言中,可以使用reflect.DeepEqual()函数比较两个值是否深度一致。 但是在比较的时候有一个小坑需要注意:如果结构体中有切片,切片中的数据顺序如果不通,比较结果会判定为值不一致 如以下代码中,比较两个结构体是否相等,其中两个结构体中TargetList的值顺序不同,最终比较结果为: ......
小坑 DeepEqual reflect golang

1 Golang入门

1 Golang入门 1 Golang介绍 1.1 简介 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言 Go是【静态 强类型】语言,是区别于解析型语言的编译型语言(静态:类型固定 强类型:不同类型不允许直接运算) 解析型语言——源代由解析器对代码进行解释执行 编 ......
Golang

2 Golang语法基础

2 Golang语法基础 1 变量命名规范 Go语言中的函数名、变量名、常量名、类型名和包名等所有的命名,都遵循一个简单的命名规则: ① 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线 ② 大写字母和小写字母是不同的:Name和name是两个不同的变 ......
语法 基础 Golang

golang 笔记

In Go, the := operator is a shortcut for declaring and initializing a variable in one line (Go uses the value on the right to determine the variable's ......
笔记 golang

idea - 在Terminal 交叉编译golang 解决

1. 背景 在idea Terminal 栏执行 go build xxx.go 打包的是exe 文件 交叉编译 配置 SET CGO_ENABLE=0 SET GOOS=linux SET GOARCH=arm64go build xxx.go 发现编译文件仍然是exe 2.解决 需要切换为cmd ......
Terminal golang idea

golang - 交叉编译

1.背景 golang是跨平台语言,但是打包的二进制文件不适配各个环境 怎么办? 可以交叉编译 win系统打包为exe执行文件, linux则是无后缀的执行文件,但是linux的cpu架构不同,二进制文件也是不同的,因此打包时需要指定cpu架构 2.解决 linux执行指令 lscpu 查看cpu信 ......
golang

termux - 安装golang 开发环境

echo y | pkg install golang 配置go mod 代理 export GOPROXY="https://goproxy.io" 检查设置有没有生效 go env ......
环境 termux golang

基于golang实现ssh terminal

基于golang实现ssh terminal 实现ssh terminal相对比较容易,简单来说需要初始化ssh连接后,通过ssh连接创建一个会话,定义好输入、输出,然后再请求pty(需要定义好modes)与远程会话进行关联。 package main import ( "fmt" "github. ......
terminal golang ssh

golang中sync.Pool的使用示例

先上代码: package main import ( "fmt" "sync" ) var pool sync.Pool type person struct { Name string Age int } func init() { pool = sync.Pool{New: func() an ......
示例 golang Pool sync