- 博客(60)
- 收藏
- 关注
原创 go 函数
在Go中,函数是一种基本的代码块,用于执行特定的任务。函数在Go中被定义为一个代码块,具有名称和一些参数,可以接受并返回值。// 函数体 return value }其中,func是关键字,是函数的名称,是参数的名称,type是参数的数据类型,是函数的返回类型,value是函数返回的值。在Go中,return语句用于从函数中返回值并停止函数执行,并把代码的执行权返回给调用者。对于无返回值的函数,函数体末尾的return语句可以直接省略。return。
2023-08-08 14:42:13
527
原创 go 内置函数copy()
go 语言内置函数copy()说明,copy后是否共享内存,dst slice 长度小于 src slice 长度会发生什么事
2023-08-06 21:05:43
2223
原创 快速排序算法
快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
2023-07-31 10:52:20
218
原创 插入排序算法
在上述示例中,我们定义了一个函数来实现插入排序算法。该函数接受一个整数切片作为输入,并对切片进行升序排序。插入排序的基本思想是将数组分为已排序和未排序两部分,然后不断将未排序的元素插入到已排序部分的正确位置。在main函数中,我们定义了一个待排序的整数切片arr,并打印出排序前的切片内容。然后,我们调用函数对切片进行排序。最后,我们再次打印排序后的切片内容。可以看到,插入排序算法成功将切片按照升序进行了排序。
2023-07-31 10:20:42
619
原创 冒泡排序算法
简单分析,外循环次数为数据len(arr)-1次,内循环为len(arr)-外循环次数在上述示例中,我们定义了一个bubbleSort函数来实现冒泡排序算法。该函数接受一个整数切片作为输入,并对切片进行升序排序。冒泡排序的基本思想是通过不断交换相邻元素的位置来逐步将较大的元素推向数组的末尾。在main函数中,我们定义了一个待排序的整数切片arr,并打印出排序前的切片内容。然后,我们调用bubbleSort函数对切片进行排序。最后,我们再次打印排序后的切片内容。
2023-07-31 10:15:06
791
原创 归并排序算法
归并排序(Merge Sort): 归并排序是一种分治算法,它将列表分成两个子列表,分别进行排序,然后将排序好的子列表合并成一个有序列表。
2023-07-31 09:56:18
110
原创 Go 语言 值类型和引用类型
引用类型的变量存储的是数据在内存中的地址,它们在栈上仅仅存储地址,而真正的数据存储在堆上。当把一个引用类型的变量赋值给另外一个变量、作为函数参数传递或者从函数返回时,只会赋值地址,而不是复制数据本身。这使得多个变量可以引用相同的底层数据,修改其中的一个变量的值会影响其他引用该数据的变量的值。
2023-07-24 11:07:11
341
原创 context原理与关键代码分析
Context是 Go 语言标准库中的一个接口,定义了与请求的生命周期相关的操作和值的传递。oktruefalse<-channil通过这些方法,我们可以获取上下文的截止时间、接收上下文结束的信号、获取上下文的结束原因以及获取上下文中传递的值。Context接口的实现类型有多种,包括等。通过这些函数创建的上下文对象可以用于控制并传递请求的上下文信息,实现请求的超时控制、取消操作、值传递等功能。
2023-07-18 16:55:23
331
原创 生成context
对象,用于传递请求的上下文信息、取消信号和请求特定的值。根据具体的应用场景,选择合适的生成方式以满足需求。的方式,可以根据不同的需求创建不同类型的。在Go语言中,可以使用。包提供的几种函数来生成。
2023-07-18 16:53:53
144
原创 select 和 switch 的异同
总结: select 和 switch 是 Go 语言中用于不同场景的语法结构。select 用于处理多个通道操作,一次只执行一个可执行的 case 子句。switch 用于根据表达式的值选择执行的分支,可以处理更多种类的条件。它们在语法和用途上有所区别,需要根据具体的需求选择合适的语法结构。select 和 switch 是 Go 语言中两种不同的语法结构,它们用于不同的场景,并且在语法和用途上存在一些区别。
2023-07-18 00:21:29
389
原创 switch 语句
的值为 1,则会先执行第一个 case 下的代码块(打印 “One”),然后执行第二个 case 下的代码块(打印 “Two”)。会使程序继续执行下一个 case 的代码块,不管下一个 case 的值是否匹配。的值不是 1、2 或 3,则会执行 default 下的代码块(打印 “Other”)。在这个例子中,expression 必须是一个接口类型的值,用于判断其具体类型。的值为 2 或 3,则只会执行对应的 case 下的代码块,不会执行。需要注意的是,在 Go 语言中,关键字,编译器会报错。
2023-07-18 00:17:40
228
原创 select 语法和 select 死锁问题
本文介绍了 Go 语言中的 select 语法以及与之相关的 select 死锁问题。我们将详细讨论 select 语句的语法,解答常见的疑问,并提供示例代码进行说明。
2023-07-18 00:09:04
427
原创 go工作池模板记录
当有新的任务到达时,它们会被提交到工作池,由其中的一个空闲goroutine来处理任务。通过修改和扩展上述代码,您可以根据实际项目的需求来创建一个适用的工作池。您可以调整worker的数量、定义适当的任务和结果结构,以及自定义任务处理逻辑和结果处理逻辑。Go语言中的工作池(Worker Pool)是一种常用的并发模式,它可以有效地管理和复用一组固定数量的goroutine(Go协程),以处理并发任务。在这个模板化的工作池示例中,您可以根据实际项目的需求进行修改和扩展。
2023-07-17 23:07:36
551
原创 SDP 规范
SDP(Session Description Protocol)是一种用于描述多媒体会话的文本协议。它定义了一种标准的格式,用于在网络中传输多媒体会话的描述信息,包括会话参数、媒体类型、媒体格式、网络地址等。
2023-07-16 21:36:09
556
原创 sync.Map
但是,并发写入操作的性能可能会受到影响,因为在并发写入时会进行复制操作,所以如果有高度并发的写入需求,可能需要考虑其他的并发安全的数据结构。从输出可以看出,我们成功地存储了几个键值对,并且能够根据键加载对应的值。在遍历键值对时,我们可以看到被删除的键值对已经不再出现在遍历的结果中。是Go语言中的并发安全的字典类型,它可以在多个goroutine之间安全地进行并发读写操作,而无需额外的锁机制。方法遍历了映射表中的所有键值对,并打印出每个键值对的值。的键和值可以是任意类型,不限于特定的类型。
2023-07-16 21:30:04
171
原创 sync.Pool
获取的对象,不能假设它们会一直可用,必须在使用后进行适当的处理。此外,池中的对象在并发环境下是安全的,多个goroutine可以同时使用池中的对象,不需要额外的同步操作。并不保证池中的对象一定会被保留,具体的回收策略是实现依赖的。是Go语言中的对象池,它用于重用对象,避免频繁的创建和销毁,从而提高性能。方法从池中获取一个对象,并打印出该对象的值。时,从池中获取到了先前放回的对象。时,由于对象没有放回池中,因此会再次调用。方法获取对象,但不放回池中,下次调用。时,由于池中没有可用对象,因此调用了。
2023-07-16 21:29:28
199
原创 sync.Cond
它提供了等待和通知的功能,允许goroutine在特定条件下进行等待,并在条件满足时进行通知。如果缓冲区为空,则消费者等待,直到有数据可用。如果缓冲区非空,则生产者等待,直到有空间可用。在生产者和消费者的操作中,通过。在生产者-消费者模型中,生产者生产数据并将其放入缓冲区,而消费者从缓冲区中获取数据进行消费。从输出可以看出,生产者在缓冲区满时进行等待,而消费者在缓冲区空时进行等待。,我们可以实现复杂的同步和线程间通信的模式,其中包括生产者-消费者问题。进行通知,从而实现了生产者和消费者之间的同步。
2023-07-16 21:28:56
293
原创 sync.Once
是Go语言中的一个同步原语,它用于确保一个函数只被执行一次,即使在多个goroutine中同时调用也可以保证只执行一次。标志的值,如果已经被设置为1,则表示函数已经执行过,直接返回;的goroutine会执行函数,其他goroutine调用。标志的值为0,则表示函数尚未执行,此时会获取互斥锁。方法保证函数只被执行一次,所以只有第一个调用。标志的值,如果仍然为0,则调用传入的函数。标志已经被设置为1,函数将不会被执行。方法,函数仍然可能被执行多次。时会直接返回,不再执行函数。,用于执行函数,函数类型为。
2023-07-16 21:27:56
320
原创 sync.RWMutex
需要注意的是,读锁是共享的,多个goroutine可以同时持有读锁并进行读操作,读操作之间不会互斥。而写锁是排他的,同一时间只能有一个goroutine持有写锁,其他goroutine的读写操作都会被阻塞。提供了一种灵活且高效的方式来控制共享资源的并发访问。通过合理地使用读锁和写锁,我们可以提高并发性能,并保证共享资源的一致性和正确性。方法,可以实现对共享资源的排他写操作,保证同一时间只有一个goroutine可以进行写操作。是Go语言中的读写互斥锁,它提供了对共享资源的并发读写操作的支持。
2023-07-16 21:27:09
234
原创 sync.Mutex
是Go语言中的互斥锁,它用于在多个goroutine之间提供对共享资源的互斥访问,以确保同一时间只有一个goroutine可以访问共享资源。使用互斥锁时,需要谨慎处理竞争条件和死锁问题,确保正确地获取和释放锁,以避免数据的不一致性和程序的死锁。变量进行加1操作,但由于使用了互斥锁,每次只有一个goroutine能够获取到锁并修改。,然后启动了10个goroutine。在上面的示例中,我们创建了一个。的值,从而保证了数据的一致性。变量进行加1操作,并打印出。获取互斥锁,然后对共享的。需要注意的是,在使用。
2023-07-16 21:25:57
426
原创 slice 原理
例如,如果你向切片追加一个元素,而底层数组的容量不足以容纳这个元素,Go会创建一个新的更大的底层数组,并将切片的指针指向这个新的数组。此外,当切片的容量不足时,切片会自动扩容,并分配一个更大的底层数组来容纳新的元素。总结起来,Go语言中的切片是一个动态可变长度的引用,它通过底层数组来实现数据的存储和访问。切片的长度表示切片中实际存储的元素个数,而容量则表示底层数组从切片的起始位置到底层数组末尾的元素个数。它是由三个字段组成的数据结构,这些字段分别是指向底层数组的指针、切片的长度和切片的容量。
2023-07-03 19:31:32
191
原创 go 语言string
在UTF-8编码下,许多常见的ASCII字符只需要一个字节来表示,而一些非ASCII字符(如汉字)可能需要多个字节。因此,字符串的长度计算是基于字节级别的,而不是字符级别。函数返回的是字符串的字节数,而不是字符个数。这是因为Go语言中的字符串是以字节序列的形式存储的,每个字符可能占用不同数量的字节,具体取决于字符的编码方式。总体而言,Go语言中的字符串提供了丰富的操作方法和函数,使得处理字符串变得简单和高效。函数,我们可以得到字符串中的实际字符个数,而不受字节数的影响。但是,如果字符串包含了多字节的字符,
2023-06-29 23:29:09
417
原创 struct嵌入(go 继承)
这是因为在 Go 中,如果结构体中包含了一个或多个匿名字段,那么这些字段的类型和字段名都会被继承到当前结构体中,就好像这些字段是当前结构体的直接字段一样。在这段代码中,定义了两个结构体。中的所有方法,所以在。结构体中可以直接访问。
2023-06-28 22:41:36
626
原创 结构体方法
在该代码中,Person类型的Greet方法的接收者类型是Person,表示该方法属于Person类型的对象。结构体方法可以访问结构体的成员变量,也可以修改结构体的状态。在该代码中,SetAge方法的接收者类型是*Person,表示该方法属于Person类型的指针对象。如果希望修改结构体对象的成员变量,需要使用指针类型的接收者和指针类型的方法。其中,接收者变量指定了方法所属的结构体对象,接收者类型指定了接收者变量的类型。接收者类型可以是结构体类型或指向结构体类型的指针类型。
2023-06-28 22:39:55
156
原创 结构体的定义与实例化
其中,结构体名是用户自定义的标识符,可以包含字母、数字和下划线。字段名是结构体成员的标识符,也可以包含字母、数字和下划线。类型可以是任意的Go语言数据类型,包括内置类型和其他自定义类型。在Go语言中,结构体是一种用户自定义的数据类型(复合类型,而非引用类型),可以用来封装多个不同类型的数据成员。该语句会在内存中创建一个新的Person类型的对象,并返回其指针。该语句会在内存中创建一个新的Person类型的对象,并返回其值。结构体的实例化可以使用new函数或者直接使用结构体字面量的方式。
2023-06-28 22:28:22
385
原创 切片常见操作
该函数会将源切片的元素复制到目标切片中,如果目标切片的长度不足,只会复制到目标切片的长度为止。切片是 Go 语言中常用的数据结构之一,具有灵活的长度和容量。如果追加的元素个数超过了切片的容量,那么会重新分配更大的内存空间。其中,长度表示切片中元素的个数,容量表示切片底层数组的长度。函数用于判断两个整型切片是否相等,如果长度不等或者元素不等,则返回。切片可以通过下标进行截取,即获取原切片的一部分。是相等的,因为它们长度相等,元素也都相等,而。,获取每个元素的下标和值,并打印出来。,以及一个不相等的切片。
2023-06-28 22:17:24
184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人