Golang开发命令行之flag包的使用方法

Golang开发命令行之flag包的使用方法

1、命令行工具概述 日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,鼠标能够让用户更容易上手,降低用户学习成本。 而对于开发者,键盘操作模式能显著提升生产力,还有在一些专业工具中, 大量使用快捷键代替繁琐的鼠标操作,能够使开发人员更加专注于工作,提高效率,因为键盘操作模式更容易产生肌肉记忆 举个栗子:我司业务研发,前些年在我们的强力推动下(被迫)转向使用了 git 作为版本控制,开始使用的是图形化“小乌龟”工具。后续出现几次问题解决起来较麻烦后,推荐其使用原生的 git 命令行。如今,使用...

2022-11-25 370 0
Golang标准库和外部库的性能比较

Golang标准库和外部库的性能比较

前言: 我已经在生产中使用 Go 一段时间了,因为它的构建规模较小,并且由 goroutines 提供的并发性能以及直接在机器上运行构建的能力,所以我非常喜欢它的快速和可靠。 由于标准包的速度非常快,您可以在不使用任何第三方库或框架的情况下构建生产就绪的微服务。这并不是说 Go 中没有提供更多灵活性或速度的框架,只是它们不那么受欢迎。 官方通常告诉你坚持使用标准库。具有讽刺意味的是, golang 框架 的顶级 Google 搜索结果一般都是关于为什么不应该使用标准库。 我对标准库的替代品进行了一些研究和基...

2022-11-25 436 0
go语言编程学习实现图的广度与深度优先搜索

go语言编程学习实现图的广度与深度优先搜索

图的实现 所谓图就是节点及其连接关系的集合。所以可以通过一个一维数组表示节点,外加一个二维数组表示节点之间的关系。 //图的矩阵实现 typedef struct MGRAPH{ nodes int[]; //节点 edges int[][]; //边 }mGraph; 然而对于一些实际问题,其邻接矩阵中可能存在大量的0值,此时可以通过邻接链表来表示稀疏图,其数据结构如图所示 其左侧为图的示意图,右侧为图的邻接链表。红字表示节点序号,链表中为与这个节点...

2022-11-25 403 0
Go 语言 JSON 标准库的使用

Go 语言 JSON 标准库的使用

Go 语言中的 encoding/json 库提供了复杂的将 Go 中各种类型与JSON格式之间转换的功能, 我们主要使用以下几个功能: 将一个切片、结构体或字典序列化成 JSON 格式的字符串【字节流】。 将一个 JSON 格式的字符串【字节流】反序列化成一个切片、结构体或字典。 序列化 序列化使用 json 库中的Marshal函数: func Marshal(v interface{}) ([]byte, error) 1. 结构体序列化 比如使用以下的结构体表示一部电影:...

2022-11-25 363 0
Golang通脉之方法详情

Golang通脉之方法详情

方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。 Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集 方法只是一个函数,它带有一个特殊的接收器类型,它是在func关键字和方法名之间编写的。接收器可以是struct类型或非struct类型。接收方可以在方法内部访问。...

2022-11-25 414 0
Golang通脉之数据类型详情

Golang通脉之数据类型详情

1、标识符与关键字 在了解数据类型之前,先了解一下go的标识符和关键字 1.1 标识符 在编程语言中标识符就是定义的具有某种意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符允许由字母数字和_(下划线)组成,并且只能以字母和_开头:abc , _ , _123, a123。 1.2 关键字 关键字是指语言预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言有25个关键字: break default func i...

2022-11-25 444 0
Golang通脉之map详情

Golang通脉之map详情

Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map 是一种无序的键值对的集合。map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值 map 是一种集合,所以可以像迭代数组和切片那样迭代它。不过,map 是无序的,无法决定它的返回顺序,这是因为 map 是使用 hash 表来实现的,Go语言中的map是引用类型,必须初始化才能使用。 使用map过程中需要注意的几点: map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必...

2022-11-25 409 0
Golang中channel的原理解读(推荐)

Golang中channel的原理解读(推荐)

数据结构 channel的数据结构在$GOROOT/src/runtime/chan.go文件下: type hchan struct { qcount uint // 当前队列中剩余元素个数 dataqsiz uint // 环形队列长度,即可以存放的元素个数 buf unsafe.Pointer // 环形队列指针 elemsize uint16 // 每个元素的大小 clo...

2022-11-25 391 0
Golang通脉之类型定义

Golang通脉之类型定义

1、自定义类型 在Go语言中有一些基本的数据类型,如 string 、 整型 、 浮点型 、 布尔 等数据类型, Go语言中可以使用 type 关键字来定义自定义类型。 type是Go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的核心概念struct、interface、函数等的使用。 2、类型定义 2.1 定义结构体 使用 type 可以定义结构体类型: //1、定义结构体 //结构体定义 type person...

2022-11-25 385 0
Go语言并发编程 sync.Once

Go语言并发编程 sync.Once

sync.Once用于保证某个动作只被执行一次,可用于单例模式中,比如初始化配置。我们知道init()函数也只会执行一次,不过它是在main()函数之前执行,如果想要在代码执行过程中只运行某个动作一次,可以使用sync.Once,下面来介绍一下它的使用方法。 先来看下面的代码: package main import ( "fmt" "sync" ) func main() { var num = 6 var once sync.Once add_one := fu...

2022-11-25 412 0
Go 并发读写 sync.map 详细

Go 并发读写 sync.map 详细

map 的两种目前在业界使用的最多的并发支持的模式分别是: 原生 map + 互斥锁或读写锁 mutex。 标准库 sync.Map(Go1.9及以后)。 有了选择,总是有选择困难症的,这两种到底怎么选,谁的性能更加的好?我有一个朋友说 标准库 sync.Map 性能菜的很,不要用。我到底听谁的... 今天煎鱼就带你揭秘 Go sync.map,我们先会了解清楚什么场景下,Go map 的多种类型怎么用,谁的性能最好! 接着根据各 map 性能分析的结果,针对性的对 sync.map 进行源码...

2022-11-25 446 0
关于Go 是传值还是传引用?

关于Go 是传值还是传引用?

关于Go 是传值还是传引用?很多人都讨论起来 下面我们就带着问题一起探索答案吧 1、Go 官方的定义 本部分引用 Go 官方 FAQ 的 “When are function parameters passed by value?”,内容如下。 如同 C 系列的所有语言一样,Go 语言中的所有东西都是以值传递的。也就是说,一个函数总是得到一个被传递的东西的副本,就像有一个赋值语句将值赋给参数一样。 例如: 向一个函数传递一个 int 值,就会得到 int 的副本。而传递一个指针...

2022-11-25 402 0
关于Go 空结构体的 3 种使用场景

关于Go 空结构体的 3 种使用场景

前言: 在 Go 语言中,有一个比较特殊的类型,经常会有刚接触 Go 的小伙伴问到,又或是不理解。 他就是 Go 里的空结构体(struct)的使用,常常会有看到有人使用: ch := make(chan struct{}) 还清一色的使用结构体,也不用其他类型。高度常见,也就不是一个偶发现象了,肯定是背后必然有什么原因。 1、为什么使用 说白了,就是希望节省空间。但,新问题又来了,为什么不能用其他的类型来做? 这就涉及到在 Go 语言中 ”宽度“ 的概念,宽度描述了一个类型的实例所...

2022-11-25 445 0
Golang 利用反射对结构体优雅排序的操作方法

Golang 利用反射对结构体优雅排序的操作方法

最近开始实习,工作技术栈主要Python和Golang,目前的任务把Python模块重构为GO模块,然后出现了一个问题,就是要将一个结构体按结构体中各个字段进行排序,然后写入Redis,对于Pyhon来说for循环就能解决,但是对于Go语言来说,每一次排序都要写一个比较函数,写出来的代码太丑,非常长,代码结构是一致,只是比较字段不一样而已,个人无法接受啊,网上搜索也没搜索到合适解决方法,所以自己想了一个解决方法来优雅排序。 比较函数: func reflectCmp(i, j interface{}, fi...

2022-11-25 433 0
Go语言之fo循环与条件判断

Go语言之fo循环与条件判断

一、for循环 Go 语言中没有 while 循环,只有一个 for 循环 for 变量初始化;条件;变量自增/自减 { 循环体内容 } 1、基本使用 for i := 0; i < 10; i++ { fmt.Println(i) } 2、省略第一部分 i := 0 for ; i < 10; i++ { fmt.Println(i) } 3、省略第一和三部分(这是一个 while 循环) for 条件 { 循环体内容...

2022-11-25 383 0