- 博客(139)
- 收藏
- 关注
原创 Goland Mac M1芯片无法Debug 原因总结与处理方法汇总
其中,不论使用何种IDE(VSCode和Goland),都会出现类似的情况,个人认为是这些IDE都集成了Delve(传递服务器)进行debug,其中debug的过程中IDE的做法是起了一个server来获取Delve发送来的stdout(标准输出)来达到debug的目的。搞清楚了这些,那么我们强行给localhost赋个值应该就能避免找不到Server的问题了,不论是windows还是mac or linux,应该都可以设置host为localhost解决,具体如下。
2023-04-03 19:56:03
1164
原创 算法复杂度 O(1),O(n),O(logn),O(nlogn)的区别
时间复杂度是指执行这个算法所需要的计算工作量空间复杂度是指这个算法所需要的内存空间
2022-12-28 17:20:01
2242
原创 网络编程(十四) :什么是Socket ?
1)Socket 是什么;2)Socket 是如何创建的;3)Socket 是如何连接的;4)Socket 是如何收发数据的;5)Socket 是如何断开连接的;6)Socket 套接字的删除等。
2022-12-21 15:11:39
558
原创 netstat命令详解
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
2022-11-08 11:49:42
2456
原创 Golang正则查找与替换
package main; import ( "regexp" "fmt" "strings") func main() { //1、过正则来判断字符串是否匹配 if ok, _ := regexp.Match("^[0-9a-zA-Z_]+$", []byte("hello")); ok { fmt.Println("ok"); } //上面的例子也可以通过MatchString实现 if ok, _ := re
2021-09-16 16:41:47
4903
原创 match_phrase与match_phrase_prefix query
一、在开始之前,完成数据准备:# 创建映射PUT /tehero_index{ "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 1 } }, "mappings": { "_doc": { "dynamic": false, "properties": { "id": { "type": "i
2021-08-29 22:51:35
2084
原创 Golang 的 “omitempty” 关键字略解
用法熟悉 Golang 的朋友对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明,例如在表示一个地址的时候, json 数据如下所示{ "street": "200 Larkin St", "city": "San Francisco", "state": "CA", "zipcode": "94102"}与之相对应的 Golang 结构体表示定义如下type a
2021-06-19 18:10:11
799
原创 Go语言中切片操作的那些技巧
切片操作常用技巧复制最简单的、最常用的方法就是使用内置的copy函数。b = make([]T, len(a)) // 一次将内存申请到位copy(b, a)除了使用内置的copy函数外,还有下面两种使用append函数复制切片的方法。b = append([]T(nil), a...)b = append(a[:0:0], a...)这两种方法通常比使用copy函数复制的方法要慢一些,但是如果在复制之后有更多的元素要添加到b中,那么它们的效率会更高。剪切将切片a中索引i~
2021-06-04 08:12:31
1025
1
原创 gorm使用原生sql
gorm v1版本对于复杂sql的支持一般,所以会用到原生。查询只需要会用gorm的Raw,Scan这两个api 即可,Raw填入sql和参数,Scan映射结果插入用 Exec这个api
2021-05-30 14:12:02
1188
原创 说说 golang 中的 string、[]rune()、[]byte()
在看本篇文章之前,建议先了解一下字符编码的知识,这里推荐两篇大神写的文章字符编码笔记:ASCII、Unicode 和 UTF-8字符串和编码string// string is the set of all strings of 8-bit bytes, conventionally but not// necessarily representing UTF-8-encoded text. A string may be empty, but// not nil. Values of stri
2021-04-05 23:19:11
354
1
原创 Golang 语言中数组和切片的区别
01 介绍在很多编程语言中都有数组,而切片类型却不常见。实际上,Golang 语言中的切片的底层存储也是基于数组。因为数组是固定长度的,而切片比数组更加灵活,所以在 Golang 语言中,数组使用的并不多,切片使用更加广泛。02 数组和切片的区别数组的零值是元素类型的零值,切片的零值是nil;数组是固定长度,切片是可变的长度数组是值类型,切片是引用类型数组:func main () { var arr1 [4]int fmt.Printf("arr1 val:%d
2021-04-04 23:30:37
2389
原创 Golang 语言中 map 的键值类型选择,它是并发安全的吗?
golang 原生 map 键类型选择在 golang 语言中,map 可以看作是一个 hash 表,其中 hash 的 key 的类型是受限的,而 val 的类型可以是任意类型。hash 表持有一定数量的 hash 桶, hash 桶均匀存储 hash 表的 key-val 键值对。在 hash 表中查找某个 key 的 val,我们需要传递 key 给这个 hash 表,在 golang 语言的 map 中,hash 表会先使用 hash 函数把 key 转换为 hash 值,hash 表通过
2021-03-21 18:46:57
578
原创 Go语言学习之并发(理论篇)
概念并发是指一个 Go 程序运行在多个 goroutine 中,每个 goroutine 中的事件执行先后顺序无法确定。并发安全并发安全是指一个可以在串行程序中正确执行的函数,它在并发调用时仍然可以正确执行,那么这个函数是并发安全的并发访问一个变量,保证变量并发安全的方法是限制变量只存于一个goroutine中,或维护一个更高层的互斥不变量。函数并发调用时,不能正常执行的原因主要有死锁、活锁和资源耗尽。竞态竞态是指一个Go程序在多个goroutine中按照某些交错顺序执行时,这
2021-03-21 11:26:08
120
原创 Go 语言学习之 反射(reflect)
概念在Go语言中,reflect 可以用来再运行期间获取对象的类型信息和内存结构,reflect操作所需的全部信息都源自接口变量,接口变量除了存储自身类型外,还会保存实际对象的类型数据。reflect通过TypeOf和ValueOf函数,将任何传入的对象转换为接口类型。使用反射获取对象的类型TypeOf returns the reflection Type that represents the dynamic type of i. If i is a nil interface value,
2021-03-21 11:06:42
313
原创 Go 面向对象编程篇:通过组合实现类的封装,继承和方法重写(多态)
要实现面向对象编程,就必须实现面向对象编程的三大特性:封装、继承和多态。封装将函数定义为归属某个自定义类型,这就等同于实现了类的成员方法,如果这个自定义类型是基于结构体的,那么结构体的字段可以看做是类的属性。package mainimport ( "fmt")type Student struct { id uint name string male bool score float64}func NewStudent(id uint, name string, .
2021-03-13 10:05:36
840
原创 Go 面向对象编程篇:空接口、反射和泛型
空接口的引入熟悉 Java 的同学应该都知道,在这个号称血统最纯正的面向对象编程语言中,「万事万物皆对象」,并且所有类都继承自祖宗类「Object」,所以 Object 类型变量可以指向任何类的实例。Go语言打破了传统面向对象编程中类与类之间继承的概念,而是通过组合实现方法和属性的复用,所以不存在类似的继承关系数,也就没有所谓的祖宗类,而且类与接口之间也不再通过implements 关键字强制绑定实现关系,所以 Go 语言的面向对象编程非常灵活。在Go语言中,类与接口的实现关系是通过类所实现的方法在编
2021-03-09 19:57:17
1123
原创 Go 面向对象编程篇:接口赋值
接口赋值概述和其他编程语言一样,Go接口不支持直接实例化,因为它只是一个契约而已,只能通过具体的类来实现声明的所有方法。不同之处在于,Go接口支持赋值操作,从而快速实现接口与实现类的映射。接口赋值在 Go 语言中分为如下两种情况:将实现接口的类实例赋值给接口;将接口赋值给另一个接口;将类实例赋值给接口先看看将类实例赋值给接口,这要求该实例对应的类实现了接口声明的所有方法,这个是自然,否则也就不能算作实现该接口了。type Integer int// 加法运算func (a Int
2021-03-09 13:25:07
1120
原创 Go 面向对象编程篇:接口定义及实现
接口在 Go 语言中有着至关重要的地位,如果说 goroutine 和 channel 是支撑起 Go 语言并发模型的基石,那么接口就是 Go 语言整个类型系统的基石。Go 语言的接口实现一个类型只要实现了某个接口要求的所有方法,我们就说这个类实现了该接口。例如,我们定义了一个 File 类,并实现了 Read()、Write()、Seek()、Close() 四个方法:type File struct { // ...}func (f *File) Read(buf []b.
2021-03-09 11:29:12
363
原创 Go 函数式编程篇:引入 Map-Reduce-Filter 模式处理集合元素
从处理集合元素聊起日常开发过程中,要处理数组、切片、字典等集合类型,常规做法都是循环迭代进行处理。比如将一个字典类型用户切片中的所有年龄属性值提取出来,然后求和,常规实现是通过循环遍历所有切片,然后从用户字典键值对中提取出年龄字段值,再依次进行累加,最后返回计算结果:package mainimport ( "fmt" "strconv")func ageSum(users []map[string]string) int { var sum int for _
2021-03-08 17:56:07
909
2
原创 Go 函数式编程篇:通过高阶函数实现装饰器模式
高阶函数所谓高阶函数,就是接收其他函数作为参数传入,或者把其他函数作为结果返回的函数。装饰器模式装饰器模式(Decorator)是一种软件设计模式,其应用场景是为某个已经存在的功能模块(类或者函数)添加一些【装饰】功能,而又不会侵入和修改原有的功能模块。就好比我们给房间做节日装饰一样,它不会调整这个房间原有的任何固有框架,而又让房间充满节日气氛。有过 Python、Java 编程经验的同学应该对这个模式很熟悉,在 Python、Java 中,我们可以通过注解非常优雅地实现装饰器模式,比如给某
2021-03-08 15:44:58
302
原创 指针使用入门与 unsafe.Pointer
指针简介变量的本质对一块内存空间的命名,我们可以通过引用变量名来使用这块内容空间存储的值,而指针则是用来指向这些变量值所内存地址的值注:变量值所在的内存地址的值不等于内存地址存储的变量值注:如果一个变量是指针类型的,那么就可以用这个变量来存储指针类型的值栗子:package mainimport "fmt"func main() { a := 100 var ptr *int // 声明指针类型 ptr = &a // 初始化指针类型值为变量 a fmt.P
2021-03-05 00:06:20
3160
2
原创 Golang标准库-io
io包概述:在io包中最重要的是两个接口:Reader和Writer接口。其它的各种io包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有io的功能目前,Go文档中还没法直接列出实现了某个接口的所有类型。不过,我们可以通过查看标准库文档,列出实现了> io.Reader或io.Writer接口的类型(非io包):os.File 同时实现了 io.Reader 和 io.Writerstrings.Reader 实现了 io.Readerbufio.Reader/Writer
2021-02-28 16:41:44
586
1
原创 HTTP客户端的实现
1.怎么实现HTTP协议客户端?Go 语言标准库内置了net/http包,涵盖了HTTP客户端和服务具体的实现方式。内置的net/http包提供了最简洁的HTTP客户端实现方式,无须借助第三方网路通信库,就可以直接使用HTTP中使用最多的GET和POST方式请求数据实现HTTP客户端是客户端通过网络访问服务端发送请求,服务端返回响应信息,并将相应的信息输出到客户端的过程。实现客户端有以下几种方式。2.Get请求2.1使用http.NetRequest1.源码// method:GET |
2021-02-26 00:47:50
1509
原创 Golang标准库 math 常用的一些方法及数值操作
package mainimport ( "fmt" "math")func main() { i := -2 fmt.Println(math.Abs(float64(i))) //取到绝对值 fmt.Println(math.Ceil(3.8)) //向上取整 fmt.Println(math.Floor(3.6)) //向下取整 fmt.Println("取余",math.Mod(11,3)) //取余数 11%3 效果一样 fmt.Println(math
2021-02-18 17:37:45
1353
原创 Golang 定时器使用方法汇总
平时开发过程中,我们经常会遇到在将来某个时间点或者间隔一段时间重复执行函数。这个时候我们就可以考虑使用定时器,这篇文章将会与大家一起,总结下 Go 语言里 time.Timer、time.Ticker、time.After 和 time.AfterFunc 的相关用法及需要注意的地方。Timer 定时器00Go 语言除了可以使用 time.Sleep() 实现延时之外,Timer 也可以实现,就像下面这样:func main() { // fmt.Println("公众号:Golang来.
2021-02-17 18:03:34
1195
原创 golang sleep(睡眠)
golang的休眠可以使用time包中的sleep。函数原型为:func Sleep(d Duration)其中的Duration定义为:type Duration int64Duration的单位为 nanosecond。为了便于使用,time中定义了时间常量:const ( minDuration Duration = -1 << 63 maxDuration Duration = 1<<63 - 1)Example下面实现休眠2秒功能。pac
2021-02-17 17:46:13
18728
原创 函数是一等公民,这到底在说什么?
请问下各位大佬,这是什么语法,为什么不需要参数的?对于有些人来说这根本不是问题,但有些人却想不明白。我提到,在 Go 语言中,函数是一等公民,但对方不清楚这到底在说什么。看来有必要解释下什么是一等公民。再往下看之前,你能说出什么是一等公民吗?关于一等公民[1](First-class citizen)看看维基百科的定义:In programming language design, a first-class citizen (also type, object, entity, or va..
2021-02-16 18:38:30
2734
原创 将json反序列化为结构体,并将其赋值到新的结构体中,最后对其新的结构体切片进行排序
栗子:package mainimport ( "encoding/json" "fmt" "sort" //"sort")type Shards struct { Failed int `json:"failed"` Skipped int `json:"skipped"` Successful int `json:"successful"` Total int `json:"total"`}type Aggregations struct {
2021-02-07 00:29:02
424
原创 Go语言:发送HTTP请求(GET & POST&NewRequest)
代码示例:package mainimport ( "bytes" "encoding/json" "io" "io/ioutil" "net/http" "time")// 发送GET请求// url: 请求地址// response: 请求返回的内容func Get(url string) string { // 超时时间:5秒 client := &http.Client{Timeout:
2021-02-01 11:42:02
14186
原创 累计比较实用的git命令
diff:git diff filename 这种是指定文件比较工作区和暂存区git diff 对比工作区和暂存区修改git diff --cached filename 比较暂存区与最新本地版本库git diff HEAD filename 比较工作区和最新版本git diff commit-id filename 比较工作区与指定的 commit -id 的差异git diff --cached commit-id filename 比较暂存区与指定 commit-id 的差异gi
2021-01-24 20:05:23
178
原创 goalng 通过指针对值进行修改(结构体类型)&向切片类型的结构体追加值
值类型进行修改值类型对值修改无效package mainimport ( "fmt")type message struct { name string age int sex string}func main() { ret :=[]message{ { "小李", 18, "男"}, { "小李2", 18, "男"}, { "小李2", 18, "男"}, } for _,ret1 :=range ret{ ret1.name="小刚" }
2021-01-20 15:30:46
204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人