一道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

基于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

Golang实现代理TCP客户端

目标网站pornhvb.com,代理服务器pornhvbproxy.com,通过代理服务器实现流量转发。 package main func handle(src net.Conn){ dst,err:=net.Dial("tcp","pornhvb.com:80") if err!=nil{ lo ......
客户端 客户 Golang TCP

golang实现RPC

一、RPC工作流程:摘自《go web编程》 二、go支持三个级别的RPC( HTTP,TCP,JSONRPC) 三、实现http的RPC实例: 3.1 GO RPC的函数只有符合以下条件才能被远程访问 函数必须是首字母是大写 必须有两个首字母大写的参数 第一个参数是接收的参数,第二个参数是返回给客 ......
golang RPC

Golang defer使用

学习于https://www.liwenzhou.com/posts/Go/function/的文章 1. defer的执行顺序类似于栈,“后进先出”,也就是最先defer的语句最后执行,而最后defer的最先执行 func main() { defer fmt.Println("1") defer ......
Golang defer

windows10下golang使用protobuf前奏

1.更改代理(方便步骤3) 方法一:go env -w GOPROXY="https://goproxy.cn" 颜色标注部分为代理 方法二:$env:GOPROXY="https://goproxy.cn" 该方法对我有效 http://mirrors.aliyun.com/goproxy/ 阿里 ......
前奏 protobuf windows golang 10

golang net/rpc inject data to service function

在golang中,net/rpc库比较牛,只需要写函数,然后使用现成的 ServerCodec 就可以完成rpc服务了。但是有个问题,service函数的参数都是来自客户端的,如果服务器想为某个特殊的函数注入一些配置或状态参数,就不好弄了。 解决方案: 修改service函数,比如原来的参数是 Fu ......
function service golang inject data

golang 反编译

使用反汇编工具 可以使用反汇编工具将Go程序反汇编为汇编代码。常用的工具有go tool objdump和llvm-objdump等。使用这些工具可以将机器码转换为汇编代码,但是汇编代码并不易于阅读。使用反编译工具 可以使用反编译工具将Go程序反编译为高级语言代码,如C或者C++。常用的工具有Hex ......
golang

一道题

已知 $\Box ACBE$ 中,$AB=AC$,圆 $O$ 的半径 $r=\dfrac{5}{2}$,$BC=4$。 作 $OH\perp BC$,根据垂径定理可得,$BH=CH=2$。 $\therefore OH=\sqrt{{OB}^2-{BH}^2}=\dfrac{3}{2}$,$AH=A ......
一道

golang中通过原始socket实现tcp/udp的服务端和客户端示例

这些天稍微空点,总结下golang中通过tcp/udp实现服务端客户端的编程实现,毕竟长久以来,如果要截单的http服务,我们直接使用net/http包实现服务,或者使用框架如gin/echo/beego等。 以下就直接上代码,稍微看看都能懂起。 1.TCP的实现 server package ma ......
示例 客户端 客户 golang socket

golang 中常用的超时控制的方案示例

在 go 中,我们很容易就可以实现超时控制,今天分享2种解决方案: 1.select + time.After 2.select + context 其实两种方案中,我们都是通过 channel 来控制的,在方案1中,对于 time.After, 通过返回一个只读 <- chan Time 实现,而 ......
示例 常用 方案 golang

力扣上一道题-异或运算

看了书上的按位运算,大概了解了异或运算的意思: 简单来说,就是对应的位不相等,为真。因为位操作是针对二进制,只有0和1,所以前面那句话可以举例为: 0^0=0; 1^1=0; 1^0=1; 0^1=1; 题目如下: 题目 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素 ......
一道

node可以用nvm快速切换版本,golang如何快速切换版本?用gvm就行。

使用 gvm 可以带来以下好处: 快速切换 Golang 版本,方便进行版本测试和开发; 可以在多个项目中同时使用不同版本的 Golang 包和工具,避免冲突; 可以通过 gvm 管理不同版本的 Golang,方便安装、卸载和更新; 可以自由选择 Golang 的镜像源,下载更快。 我使用的是win ......
版本 golang node gvm nvm

Golang 知识点

make 和 new 的区别: make 用于创建切片、映射和通道,返回的是创建类型的引用。 new 用于创建任意类型的指针,返回的是该类型的指针。 // make 用法示例 slice := make([]int, 5) // 创建一个包含5个元素的整型切片 // new 用法示例 var poi ......
知识点 知识 Golang