golang
文章平均质量分 66
我怕天黑却不怕鬼
这个作者很懒,什么都没留下…
展开
-
go使用logrus日志中间件
go使用logrus日志中间件package mainimport ( "fmt" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" "os" "path" "time")func Logger() *logrus.Logger { now := time.Now() logFilePath := "" if dir, err := os.Getwd(); err原创 2021-12-29 14:57:10 · 424 阅读 · 0 评论 -
go 优雅的重启或停止web服务器
我们可以使用 fvbock/endless 来替换默认的 ListenAndServe。更多详细信息,请参阅 issue #296。router := gin.Default()router.GET("/", handler)// [...]endless.ListenAndServe(":4242", router)原创 2021-12-29 14:54:47 · 696 阅读 · 0 评论 -
理解 Go interface 的 5 个关键点
理解 Go interface 的 5 个关键点1、interface 是一种类型type I interface { Get() int}首先 interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为。go 允许不带任何方法的 interface ,这种类型的 interface 叫 empty interface。如果一个类型实现了一个 interface 中所有原创 2021-10-14 10:49:46 · 229 阅读 · 0 评论 -
Golang 高效的原地数组去重
Golang 高效的原地数组去重使用 struct{} 节省空间, 指定 cap=len(arr) 避免 map 扩容。记录非重复元素索引 j,将元素前移,原地去重,只需一次遍历。时间复杂度:O(n)空间复杂度:O(n)func removeDuplication_map(arr []string) []string { set := make(map[string]struct{}, len(arr)) j := 0 for _, v := range arr {原创 2021-10-13 09:44:28 · 1342 阅读 · 0 评论 -
Go基础语法学习
Go基础语法学习Go语言基础Go是一门类似C的编译型语言,但是它的编译速度非常快。这门语言的关键字总共也就二十五个,比英文字母还少一个,这对于我们的学习来说就简单了很多。先让我们看一眼这些关键字都长什么样:下面列举了 Go 代码中会使用到的 25 个关键字或保留字:breakdefaultfuncinterfaceselectcasedefergomapstructchanelsegotopackageswitchconstfallthroug原创 2021-10-13 09:43:12 · 339 阅读 · 0 评论 -
Go中的字符串使用----strings和strconv
Go中的字符串使用----strings和strconvGo中的字符串操作字符串是工作中最常用的,值得我们专门的练习一下。在Go中使用strings包来操作字符串,这也是内置的包哈,不像Java中要么手写,要么引入common-lang 或者 别的第三方。另外涉及到字符串与其他类型之间的转换使用了strconv包来操作。strings包1. 字符串包含关系strings.Contains(s, substr string) bool判断s串中是否包含substr串。2. 判断子字符串或字符在原创 2021-10-11 16:41:18 · 308 阅读 · 0 评论 -
Go标准库--net/http学习
Go标准库–net/http学习Go中对网络的支持提供了标准库,net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。 http包提供了HTTP客户端和服务端的实现。 一般我们用http肯定多一些,下面来看一下http的使用方式。1. Post和Get请求的使用创建一个最简单的get请求:package mainimport ( "fmt" "io/ioutil" "net/http")func main() { resp, err :=原创 2021-10-11 16:39:43 · 587 阅读 · 0 评论 -
Go中的指针
Go中的指针学Java以来,让程序员忽略了指针和内存地址这些概念,Java帮我们封装了对象,简化了对象引用之间的关系。在Go语言中,又帮我们回忆起这些概念。我们创建的每一个对象在内存中都有一个位置去存储,每个内存块都有一个地址表示当前位置,通常用十六进制表示,如0x24005676543。Go语言取地址的符号是&。放在一个变量前使用就会返回相应变量的内存地址。比如下面的代码:var a = 3fmt.Printf("num is : %d, it's location in memory:原创 2021-10-11 16:37:57 · 140 阅读 · 0 评论 -
Go中的文件读写
Go中的文件读写在 Go 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄 。我们来看一下os包的使用方式。1.读取文件os包提供了两种打开文件的方法:Open(name string) (*File, error)func OpenFile(name string, flag int, perm FileMode) (*File, error) 第一个方法是以只读的方式去打开文件,如果文件不存在或者程序没有足够的权限打开这个文件,Open函数会返回错误;第二个方法会原创 2021-10-11 16:36:31 · 380 阅读 · 0 评论 -
Go中的结构体
Go中的结构体前面我们或多或少的都使用了结构体这种数据结构,本身结构体也有很多特性,我们一一来看。结构体的作用是将一个或者多个任一类型的变量组合在一起的数据类型,类似于我们在Java中class的作用。在结构体重也可以嵌套结构体。结构体还可以有自己的方法。1.定义结构体我们先定义一个结构体:结构体定义如下:type 标识符 struct { field1 type field2 type}例子:type Staff struct { UserId int16 UserName原创 2021-10-11 16:34:17 · 128 阅读 · 0 评论 -
Go中的interface学习
Go中的interface学习学过Java的同学都知道在Java中接口更像是一种规范,用接口定义了一组方法,下面实现这个接口的类只管按照写好的方法名和返回值去实现就好,内部如何实现是各个方法自己的事情,接口本身不关注。另外Java中实现接口的类必须显式的声明实现了哪个接口: implement InterfaceName,仔细思考一下会有如下问题:如果你修改了接口名,那么类也得跟着修改;你必须先定义接口,才能去实现它;一个类可以实现多个接口,Java中接口的设计更像是弥补继承的不足,如果你希望实原创 2021-10-11 16:32:35 · 655 阅读 · 0 评论 -
Go中的反射reflect
Go中的反射reflect前面我们在学习到struct结构体的时候,因为结构体中的字段首字母大写,而我们想把json文件映射到该结构体上时,需要在在结构体字段后面加上json标签,表明结构体字段和json字段的映射关系。这其中就用到了反射的方式去获取标签,取出该标签对应的json字段然后存储到结构体字段上。Go语言中提供了反射的包为reflect。在 reflect 包中,主要通过两个函数TypeOf() 和ValueOf()实现反射,TypeOf()获取到的结果是reflect.Type 类型,Val原创 2021-10-11 16:29:39 · 253 阅读 · 0 评论 -
Go中配置文件读取的几种方式
Go中配置文件读取的几种方式日常开发中读取配置文件包含以下几种格式:json 格式字符串K=V 键值对xml 文件yml 格式文件toml 格式文件前面两种书写简单,解析过程也比较简单。xml形式书写比较累赘,yml是树形结构,为简化配置而生,toml是一种有着自己语法规则的配置文件格式,我们一一来看使用方式,各位看官自行比较哪种更加实用。1.读取json格式的文件package mainimport ( "encoding/json" "fmt" "io/ioutil"原创 2021-10-11 16:27:20 · 2012 阅读 · 0 评论 -
Go中的并发编程和goroutine
[Go中的并发编程和goroutine]并发编程对于任何语言来说都不是一件简单的事情。Go在设计之初主打高并发,为使用者提供了goroutine,使用的方式虽然简单,但是用好却不是那么容易,我们一起来学习Go中的并发编程。1. 并行和并发并行(parallel): 指在同一时刻,有多条指令在多个处理器上同时执行。并发(concurrency): 指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,通原创 2021-10-11 16:25:26 · 191 阅读 · 0 评论 -
Go中的fmt几种输出的区别和格式化方式
Go中的fmt几种输出的区别和格式化方式在日常使用fmt包的过程中,各种眼花缭乱的print是否让你莫名的不知所措呢,更让你茫然的是各种格式化的占位符。。简直就是噩梦。今天就让我们来征服格式化输出,做一个会输出的Goer。fmt.Print有几个变种:Print: 输出到控制台,不接受任何格式化操作Println: 输出到控制台并换行Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出别的类型)Sprintf:格式化并返回一个字符串而不带任何输出Fpri原创 2021-10-11 16:16:35 · 669 阅读 · 0 评论