Go技术栈
Go技术栈
后端码匠
道阻且長,行則將至
展开
-
【Go】根据身份证(或生日)计算年龄
排列顺序从左至右依次为:六位数字地址码、八位数字出生日期码、三位数字顺序码和一位数字校验码。地址码(前六位数):表示身份证编码对象常住户口所在省份、地市,以及县(市、旗、区)的行政区划代码,按照GB/T2260的规定执行。其中:前1、2位数字表示所在省份的代码;第5、6位数字表示:所在县(市、旗、区)的代码。第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期。这里我们定义:用户出生满1年后,年龄算1岁,不满1年算0岁,以此类推,大于1年不到2年算1岁。原创 2023-10-10 10:53:23 · 507 阅读 · 0 评论 -
Go 保护机制
Go 保护机制原创 2022-04-01 10:49:22 · 228 阅读 · 0 评论 -
Go实现希尔排序
希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。func Shell2Sort(arr []int) []int { // 进行分组 for gap := len(arr) / 2; gap > 0; gap = gap / 2 { // 插入排序 // i 待排序的元素 for i := gap; i < len(arr); i++ { // j 在比较过程中, 待排序元素的位置 for j := i; j原创 2022-02-12 11:57:59 · 548 阅读 · 0 评论 -
Go语言在Linux环境下输出彩色字符
Go语言在Linux环境下输出彩色字符Go语言要打印彩色字符与Linux终端输出彩色字符类似fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, "testPrintColor", 0x1B)其中0x1B是标记,[开始定义颜色,1代表高亮,40代表黑色背景,32代表绿色前景,0代表恢复默认颜色。显示效果为:package mainimport ( "fmt" "os")func main() { fmt.Println("") // 前原创 2022-01-24 16:06:25 · 1175 阅读 · 0 评论 -
Go 质数
实现package mainimport ( "fmt")func main() { fmt.Println("1-10万之间的质数为:") // i应直接从2开始 for i := 2; i <= 1e6; i++ { for n := 2; n <= i; n++ { // 当走到最后n等于i 了,则说明下面的i%n==0 && n < i 始终没有成立。说是这个数是个质数。 if n == i { fmt.Printf("%原创 2021-12-02 11:04:50 · 341 阅读 · 0 评论 -
Go sync.WaitGroup的用法
介绍经常会看到以下了代码:package mainimport ( "fmt" "time")func main(){ for i := 0; i < 100 ; i++{ go fmt.Println(i) } time.Sleep(time.Second)}主线程为了等待goroutine都运行完毕,不得不在程序的末尾使用time.Sleep() 来睡眠一段时间,等待其他线程充分运行。对于简单的代码,100个for循环可以转载 2021-11-22 20:42:19 · 187 阅读 · 0 评论 -
Go 指针 unsafe.Pointer
Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确类型的对象,进行严格类型检查。下面的代码会产生编译错误 :package mainimport ( "fmt")func main() { u := uint32(32) i := int32(1) fmt.Println(&u, &i) // 打印出地址 p := &i // p 的类型是 *int32 p = &u // &u的类型是 *uint32,原创 2021-11-04 10:28:56 · 199 阅读 · 0 评论 -
Go image: unknown format 错误解决
Go image: unknown format 错误解决当使用image.Decode处理图片文件时,如报image: unknown format 错误。func GetImgData(url string) ([]byte, error) { resp, err := http.Get(url) if err != nil { log.Errorf("[IMG_DATA] getImage url:%s, error:%v", url, err) return nil, err }原创 2021-11-03 11:18:07 · 2616 阅读 · 0 评论 -
【Go】结构体的值传递和地址传递示例
【代码】【Go】结构体的值传递和地址传递示例。原创 2021-11-02 20:04:30 · 1244 阅读 · 0 评论 -
Go go-metrics
go-metrics介绍go-metrics — 对Go应用的某个服务做监控、做统计,应用级监控和测量。源码 : https://github.com/rcrowley/go-metrics文档:https://pkg.go.dev/github.com/rcrowley/go-metricsMetrics提供5种基本的度量类型:Gauges, Counters, Histograms, Meters和 Timers。GaugeGauge是最简单的度量类型,只有一个简单的返回值,他用来记录一些原创 2021-11-01 17:04:04 · 1373 阅读 · 1 评论 -
Go URL
URL简介URL全称Uniform Resource Location统一资源定位符,用于定位Internet中待访问的文档或资源。URL提供了一种定位Internet上任意资源的手段,资源可通过各种不同的方案(比如HTTP、FTP、SMTP)来访问,因此URL语法随着方案不同而不同。<schema>://<user>:<password>@<host>:<port>/<path>:<params>?<query原创 2021-11-01 16:40:45 · 885 阅读 · 0 评论 -
Go数组与切片
go数组与切片Go 语言数组Go 语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明 number0, number1, …, number99 的变量,使用数组形式 numbers[0], numbers[1] …, numbers[99] 更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。声明数组原创 2021-10-29 14:35:13 · 1294 阅读 · 0 评论 -
Go 中string和int类型相互转换
string转成int:int, err := strconv.Atoi(string)string转成int64:int64, err := strconv.ParseInt(string, 10, 64)int转成string:string := strconv.Itoa(int)int64转成string:string := strconv.FormatInt(int64,10)原创 2021-10-27 16:35:22 · 406 阅读 · 1 评论 -
Go如何按行读取文本
golang如何按行读取文本golang的库bufio.Scanner是非常方便用来处理文本文件。下面的例子是按行读取文本文件。package mainimport ( "os" "log" "fmt" "bufio")func main() { err := HandleText("a.txt") if err != nil { panic(err) }}func HandleText(textfile stri原创 2021-10-27 16:33:06 · 1089 阅读 · 1 评论 -
Go if _,ok:=range map; ok判断key是否在map中
由于golang没有提供item是否在array当中的判断方法,如果程序里面频繁用到了这种判断,可以将array转化为以array当中的成员为key的map再用上面的方法进行判断,这样会提高判断的效率。判断方法示例代码if _, ok := map[key]; ok { } ...原创 2021-10-27 11:09:22 · 528 阅读 · 1 评论 -
Go sycn.Map知识点
sync.Map 有以下特性:无须初始化,直接声明即可。sync.Map 不能使用 map 的方式进行取值和设置等操作,而是使用 sync.Map 的方法进行调用,Store 表示存储,Load 表示获取,Delete 表示删除。使用 Range 配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值,Range 参数中回调函数的返回值在需要继续迭代遍历时,返回 true,终止迭代遍历时,返回 false。简单的使用栗子func syncMapDemo() { var smp sy原创 2021-10-26 18:46:40 · 167 阅读 · 0 评论 -
Go的json解析:Marshal与Unmarshal
Go的json解析:Marshal与Unmarshal简介Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。实现Json Marshal:将数据编码成json字符串type Stu struct { Name string `json:"name"` Age int HIgh bool转载 2021-10-26 14:17:10 · 2589 阅读 · 0 评论 -
Go语言中json解析不出来的原因很有可能是
看看结构体成员变量首字母是不是大写原创 2021-10-25 20:58:34 · 682 阅读 · 0 评论 -
Go 语言的%d,%p,%v等占位符的使用
Go语言的%d,%p,%v等占位符的使用1、首先需要了解哪些占位符分别代表什么这些是死知识,把常用的记住,不常用的直接查表就行了golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。定义示例类型和变量type Human struct {Name string}var people = Human{Name:"zhangsan"}1)普通占位符占位符说明举例输出%v相应值的默认格式。Printf("%v", people原创 2021-10-25 11:16:25 · 5188 阅读 · 0 评论 -
Go中bytes.Buffer理解
buffer前言最近操作文件,进行优化使用到了buffer。好像也不太了解这个,那么就梳理下,buffer的使用。例子我的场景:使用xml拼接了office2003的文档。写入到buffer,然后处理完了,转存到文件里面。type Buff struct { Buffer *bytes.Buffer Writer *bufio.Writer}// 初始化func NewBuff() *Buff { b := bytes.NewBuffer([]byte{}) return &转载 2021-10-14 12:00:14 · 2933 阅读 · 0 评论 -
Golang的time包:秒、毫秒、纳秒时间戳输出
时间戳分类10位数的时间戳是以 秒 为单位;13位数的时间戳是以 毫秒 为单位;19位数的时间戳是以 纳秒 为单位;Golang中写法:package mainimport ( "time" "fmt")func main() { fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix()) fmt.Printf("时间戳(纳秒):%v;\n",time.Now().UnixNano()) fmt.Printf("时间戳(毫秒):%原创 2021-10-14 11:44:33 · 1395 阅读 · 0 评论 -
Golang 中的指数符号 e
十的连乘1e3 = 10001e6 = 10000005.6e20 = 5.6 * 1e20原创 2021-10-08 17:18:36 · 1251 阅读 · 0 评论 -
【curl】使用curl命令发送json格式请求体的post请求
使用curl命令发送json格式请求体的post请求原创 2021-10-08 15:43:25 · 48712 阅读 · 0 评论 -
Go语言参数校验(go-playground / validator)
基本使用Go语言没有像Java一样的注解快速进行参数的校验,但可以通过struct tag(结构体标签)进行序列化。常用的如:type User struct { ID string `json:"id"` Name string `json:"name"` Age string `json:"age"`} 但需要更复杂的校验,这时需要用一些专业的库来完成。go-playground / validator作为一款优秀的Go语言校验库,基于标记为结构体和单个字段实现值验证。使用简单、快捷。添原创 2021-10-08 15:27:33 · 2257 阅读 · 0 评论 -
Go语言GO111MODULE设置
GO111MODULE是 go modules 功能的开关,关于go modules本文不详述,这个涉及到go的一种很重要的管理机制,后面会有专门的文章来分析,我们可以简单的理解为,在没有go modules机制时,go工程中对于第三方功能包的管理非常复杂,也非常专业,这就导致程序员在进行开发的时候,对于第三方功能包的管理很不方便,所以才有了go modules机制。这个机制的开关是通过GO111MODULE环境变量来配置的。GO111MODULE=off无模块支持,go命令行将不会支持module功能原创 2021-10-07 09:18:38 · 5277 阅读 · 0 评论 -
Go环境变量
# MySet# GO#GO#GOROOTexport GOROOT=/usr/local/Cellar/go/1.16.6/libexec#GOPATHexport GOPATH=/Users/maxinze/dev/GoWorkSpace/golearnexport GOBIN=$GOPATH/binexport PATH=$PATH:$GOBIN#GOPATH root binexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin# GO111ex原创 2021-09-22 16:40:08 · 215 阅读 · 0 评论 -
Golang map输出排序
package mainimport ( "fmt" "sort")func main() { fmt.Println("====依据key排序=====") z := map[int]string{ 1: "Mike", 2: "Nike", 3: "LiNing", 4: "Erck", } var keys []int for key := range z { keys = append(keys, key) } sort.Ints(keys)原创 2021-09-24 16:17:30 · 291 阅读 · 0 评论 -
Go基础:格式化输出--Printf、Sprintf、Fprintf
Print:输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用 %v)fmt.Print(str)Println:输出到控制台并换行fmt.Println(tmp)Printf :只可以打印出格式化的字符串。只可以直接输出字符串类型的变量fmt.Printf("%d",a)Sprintf:格式化并返回一个字符串而不带任何输出。s := fmt.Sprintf("a %s", "string") fmt.Printf(s)Fprintf:来格式化并输出到 io.Writer原创 2021-09-27 10:57:37 · 287 阅读 · 0 评论 -
Go语言基础之基本数据类型
直接上代码package mainimport ( "fmt" "math")func main() { // 整型 fmt.Println("===整型===") // 十进制 var a int = 10 fmt.Printf("%d \n", a) // 10 fmt.Printf("%b \n", a) // 1010 占位符%b表示二进制 // 八进制 以0开头 var b int = 077 fmt.Printf("%o \n", b) // 77 /原创 2021-02-19 22:18:10 · 184 阅读 · 0 评论