golang slice

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

go slice使用

1. 简介 在go中,slice是一种动态数组类型,其底层实现中使用了数组。slice有以下特点: *slice本身并不是数组,它只是一个引用类型,包含了一个指向底层数组的指针,以及长度和容量。 *slice的长度可以动态扩展或缩减,通过append和copy操作可以增加或删除slice中的元素。 ......
slice go

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

TypeError: _vm.searchList.slice is not a function

调用slice()的时候 报错 这个是因为属性只有集合里面有 应该是你定义成对象了 把a.slice() 这个a改成数组 a:[] 如果a是对象 a:{} 就会报这个错 ......
searchList TypeError function slice not

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

Golang实现TCP端口扫描器

简易版 package main func worker(ports,results chan int){ for p:=range ports{ address:=fmt.Sprintf("bilibili.com:%d",p) conn,err:=net.Dial("tcp",address) ......
扫描器 端口 Golang TCP