斜杠golang

Golang GMP原理(1)

Golang GMP原理(1) 概念梳理 线程 线程一般指内核级线程,核心如下: 操作系统的最小调度单元 创建 销毁 调度由内核完成,cpu要完成内核态与用户态的转换 可充分利用多核,实现并行 协程 协程线程对应 协程,又称为用户级线程,核心点如下: 与线程存在映射关系,为M:1 创建、销毁、调度在 ......
原理 Golang GMP

golang常用的http请求操作

之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子 golang发起GET请求 基本的GET ......
常用 golang http

Golang每日一库之bcrypt

本文 官方文档: https://pkg.go.dev/golang.org/x/crypto/bcrypt 前言 之前讲过JWT Token https://www.cnblogs.com/zichliang/p/17303759.html JWT呢是信息是经过数字签名的,因此可以被验证和信任。 ......
Golang bcrypt

在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

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