Go
文章平均质量分 81
想变厉害的大白菜
这个作者很懒,什么都没留下…
展开
-
【Go报错】go: go.mod file not found in current directory or any parent directory 错误解决
go: go.mod file not found in current directory or any parent directory 错误解决原创 2022-06-07 10:27:20 · 13415 阅读 · 2 评论 -
【Go】strings.Join() 简介
文章目录strings.Join() 简介参考链接strings.Join() 简介Golang中的函数 strings.Join() 将字符串切片中存在的所有元素连接为单个字符串。该函数在字符串包 strings 中。用法:func Join(s []string, sep string) strings是可用来连接元素的字符串sep是放置在最终字符串中元素之间的分隔符。返回值:它返回一个字符串。参考链接Golang strings.Join()用法及代码示例原创 2022-05-07 21:55:57 · 4938 阅读 · 1 评论 -
【Go】sort 包:sort.Ints()、sort.Strings()、sort.Slice()
Golang 的 sort 包简介原创 2022-05-07 21:50:06 · 6228 阅读 · 0 评论 -
【Go】strconv 包简介与 Atoi() 函数
文章目录一、前言二、strconv 包简介三、string 转换为 int:Atoi()函数参考链接一、前言在 Golang 中,不是所有数据类型之间都能相互转换的,例如字母格式的 string 类型 “abcd” 转换为 int 肯定会失败。要跨大类型转换,可以使用 strconv 包提供的函数。strconv 包实现了字符串与数字(整数、浮点数等)之间的互相转换。Go语言的 strconv 包提供了一个Atoi()函数,该函数等效于ParseInt(str string,base int,bi原创 2022-05-07 20:35:48 · 3737 阅读 · 1 评论 -
【Go】strings.Split 简介
文章目录一、strings.Split 简介参考链接一、strings.Split 简介功能描述:strings.Split 函数用于通过指定的分隔符切割字符串,并返回切割后的字符串切片。语法:需要导入 strings 包strings.Split(s, sep)s:待分割的字符串(字符串类型的参数)sep:分隔符 (字符串类型的参数)返回值:返回一个字符串切片。参考链接Go strings.Split函数...原创 2022-05-07 20:22:36 · 1351 阅读 · 0 评论 -
【Go】用 Golong 处理 ACM 模式下的输入输出
本文介绍了用golang在ACM模式下处理输入输出的多种方式。原创 2022-05-07 19:48:05 · 5793 阅读 · 1 评论 -
【Go】bufio.NewScanner 用法简介
文本简要介绍了bufio.NewReader的用法。原创 2022-05-07 15:43:18 · 5694 阅读 · 3 评论 -
【Go】输入输出 - fmt 包函数简介
本文介绍了 fmt.Scan、fmt.Scanf、fmt.Scanln、Print、Fprint、Sprint 系列函数。原创 2022-05-06 20:44:13 · 1260 阅读 · 0 评论 -
【Go 语法】不能在一个函数声明的内部再声明另一个函数
本文解决了一个函数声明时的语法错误原创 2022-03-05 19:52:06 · 579 阅读 · 0 评论 -
【Go】map 和 slice 的组合使用
文章目录一、元素类型为map的切片二、值为切片的map三、实战1. 统计字符串中出现的单词次数2. 统计字符串中出现的字符及其所有位置参考链接一、元素类型为map的切片package mainimport "fmt"func main() { // 元素类型为 map 的切片: [map, map, map] // 先创建切片, 因为后续需要用索引初始化 map, 所以要给长度 a := make([]map[string]int, 2) // 使用切片的索引对 map 进行创建原创 2022-02-28 22:12:19 · 1714 阅读 · 0 评论 -
【Go】Go 包管理 之 Go Vendor
本文介绍了go vender原创 2022-02-27 20:57:06 · 6830 阅读 · 0 评论 -
【Go】深拷贝与浅拷贝
文章目录一、深浅拷贝二、深拷贝三、浅拷贝四、总结参考链接一、深浅拷贝在很多编程语言都有深浅拷贝的这个概念,当然golang也不例外。在 go 语言中 值类型 赋值都是 深拷贝 ,引用类型 一般都是 浅拷贝。其本质就是,深拷贝会拷贝数据(两变量存储地址不同,拷贝结束互不影响)。而浅拷贝只会拷贝内存的地址(即使拷贝结束,还是互相影响),所以就会出现,像 slice 那样修改底层数组的值,slice 的值也跟着改动。二、深拷贝b 拷贝 a 后,如果修改 a 的值,b不变,说明是值的拷贝,也就是深拷原创 2022-02-27 11:12:15 · 3773 阅读 · 0 评论 -
【Go】并发编程之 sync:Mutex、RWMutex、WaitGroup、Once
文章目录一、sync 包简介二、互斥锁 Mutex1. 引言 - 并发安全与锁2. 源码:Mutex 结构体3. 互斥锁的三个状态4. 互斥锁上的方法三、读写锁 RWMutex1. 引言 - 多读不互斥2. 源码:RWMutex 结构体3. 读写锁上的方法4. 实例5. 一个要点四、等待组 - sync.WaitGroup1. 引言2. WaitGroup 的作用3. 三个方法4. 源码:WaitGroup 结构体5. 一个注意五、sync.Once参考链接一、sync 包简介Go 语言在 sync原创 2022-02-26 20:58:48 · 1211 阅读 · 1 评论 -
【Go】并发编程之 select
文章目录一、为什么需要 select ?二、select 多路复用1. select 可以同时监听一个或多个 channel,直到其中一个 channel ready2. 如果多个 channel 同时ready,则随机选择一个执行三、可以用于判断管道是否存满参考链接一、为什么需要 select ?在某些场景下我们需要 同时从多个通道接收数据。从通道接收数据时,如果没有数据可以接收将会发生阻塞。你也许会写出如下代码使用遍历的方式来实现:for{ // 尝试从ch1接收值 data,原创 2022-02-23 20:04:51 · 836 阅读 · 0 评论 -
【Go】并发编程之 计时器
文章目录一、Timer:时间到了,执行只执行1次二、Ticker:时间到了,多次执行参考链接一、Timer:时间到了,执行只执行1次package mainimport ( "fmt" "time")func main() { // 1.timer基本使用 //timer1 := time.NewTimer(2 * time.Second) //t1 := time.Now() //fmt.Printf("t1:%v\n", t1) //t2 := <-timer1.C原创 2022-02-22 17:20:00 · 421 阅读 · 0 评论 -
【Go】time 包
文章目录一、time 包简介二、原理三、时间的获取1. 获取当前时间 - time.Now()2. 获取时间戳 - Unix()、UnixNano()3. 获取当前是星期几 - Weekday()四、时间操作函数1. Add2. Sub3. Equal4. Before5. After五、定时器六、时间格式化七、参考链接一、time 包简介时间和日期是我们开发中经常会用到的,Go语言中的 time 包提供了 时间显示和测量 等所用的函数,本文介绍一下 time 包的基本用法。二、原理时间一般包含原创 2022-02-22 11:44:52 · 2506 阅读 · 0 评论 -
【Go】Goroutine 池
文章目录一、为什么需要 Goroutine 池?二、Goroutine 池是什么?三、怎么实现 Goroutine 池?1. Goroutine 池只是一个抽象的概念2. Goroutine 池的设计思路3. 生产者消费者模型四、一个实现 Goroutine 池的实例五、一个 Goroutine 池的实践 —— ants六、总结参考链接一、为什么需要 Goroutine 池?试想这样一种情况,如果给每个客户端都分配一个 session 来维护连接,然后每个 session 会启动3个 goroutin原创 2022-02-21 17:40:07 · 2615 阅读 · 0 评论 -
【Go】并发编程之 Channel
文章目录一、channel 是用来干嘛的?用于 goroutine 之间通信二、channel 是一种数据类型三、创建 channel1. 声明 channel2. 一般使用 make 一步完成 声明+创建四、channel 操作五、无缓冲的通道六、有缓冲的通道七、close()八、如何优雅的从通道循环取值(通道是否关闭?)九、单向通道十、通道总结参考链接一、channel 是用来干嘛的?用于 goroutine 之间通信单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的原创 2022-02-21 11:04:16 · 768 阅读 · 0 评论 -
【Go】并发编程之runtime包及其常用方法
文章目录一、runtime 包1. runtime 包是干什么用的?2. runtime 包内的一些方法简介二、runtime.Gosched()三、runtime.Goexit()四、runtime.GOMAXPROCS()五、runtime.NumCPU()、runtime.GOROOT()、runtime.GOOS参考链接一、runtime 包1. runtime 包是干什么用的?我的上篇文章【Go】并发编程 中提到过,Go 语言的 goroutine 是由 运行时(runtime)调度和管原创 2022-02-20 21:29:45 · 2714 阅读 · 0 评论 -
【Go】并发编程
文章目录一、并发简介二、goroutine三、四、五、参考链接一、并发简介并发主要由切换时间片来实现 “同时” 运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。关于进程、线程、协程和并发、并行的知识请参考我的另一篇文章:二、goroutinegoroutine 是由官方实现的超级 “线程池” :每个实力 4~5KB 的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是 go高并发 的根本原因。goroutine 奉行通过通信来共享内存,而不是共享内原创 2022-02-19 15:58:46 · 557 阅读 · 0 评论 -
【Go】面向对象 - 匿名字段、接口
本文介绍了golang面向对象编程的相关知识:匿名字段、接口原创 2022-02-17 21:44:00 · 1128 阅读 · 0 评论 -
【Go】格式化输出、fmt.Printf()
文章目录一、格式化输出函数二、占位符1. 普通占位符2. 布尔占位符3. 整数占位符4. 浮点数和复数的组成部分(实部和虚部)5. 字符串与字节切片6. 指针7. 其它标记8. 其他说明参考链接一、格式化输出函数golang 的 fmt 包实现了格式化 I/O 函数 Printf() ,类似于 C 的 printf 和 scanf。通过在格式化输出函数 fmt.Printf() 中通过占位符实现对字符的格式化控制输出。因为fmt的Printf()是有格式的输出,切忌使用Println(),否则将会原创 2022-02-16 16:33:38 · 1009 阅读 · 0 评论 -
【Go】Go语言中的方法
本文介绍了Go语言中“方法”的相关内容。原创 2021-12-14 10:21:58 · 2209 阅读 · 0 评论 -
【Go】Go语言 类型别名和自定义类型
go语言中的自定义类型和类型别名是两个声明方式相似却不同的概念。需要细加区分。原创 2021-12-06 20:54:15 · 2811 阅读 · 0 评论 -
【Go】Go语言中的 new 和 make 函数
文章目录一、前言二、new 函数三、make 函数四、new 与 make 的区别参考链接一、前言我们先来看一个例子:package mainimport "fmt"func main() { var a *int *a = 100 fmt.Println(*a) var b map[string]int b["测试"] = 100 fmt.Println(b)}输出结果:panic: runtime error: invalid memory address or n原创 2021-12-06 15:12:15 · 2039 阅读 · 0 评论 -
【Go】Go语言 数组
文章目录一、简介二、优势三、数组的声明四、数组的初始化1. 声明的同时初始化2. 使用赋值操作符初始化声明数组3. 一维数组的初始化方法总结:4. 多维数组的初始化方法总结:五、数组元素的访问六、获得数组长度七、向函数传递数组注意:值拷贝行为会造成性能问题,通常会建议使用 slice,或数组指针:1. 使用 return 稍作改进2. 使用数组指针传参参考链接一、简介数组是一段长度固定的连续内存区域,拥有0 个或多个(不超过数组长度)相同数据类型的数据项序列。其中元素类型支持任意内置类型,这种类型可以原创 2021-12-03 11:27:36 · 3255 阅读 · 0 评论 -
【Go】Go语言中的下划线
文章目录一、下划线是什么:一种特殊的标识符二、下划线怎么用1. 下划线在 import 中包导入的常规语法包导入的一些 “花操作” 的语法(1)点操作(2)别名操作(3)本文关注的重点:_ 操作2. 下划线在代码中参考链接一、下划线是什么:一种特殊的标识符Go语言中,“_” 是一种特殊的标识符,用来忽略结果。二、下划线怎么用1. 下划线在 import 中在Go 语言里,import 的作用是导入其他 package。包导入的常规语法import( "fmt")//然后在代码里面可以原创 2021-12-02 16:00:50 · 2685 阅读 · 0 评论 -
【Go】Go 语言运算符及其优先级
本文介绍了Go语言中的运算符及其优先级。原创 2021-12-02 10:27:00 · 2156 阅读 · 2 评论 -
【Go】Go 命令
Go语言命令原创 2021-12-02 09:51:03 · 282 阅读 · 0 评论 -
【Go】Go语言中的 Init 函数和 main 函数
文章目录一、init 函数1. init 函数的作用2. init 函数的特征3. 多个 init 函数的执行顺序4. Go 程序的初始化二、main 函数三、init 函数和 main 函数的异同四、实例实例一实例二实例三实例四实例五实例六实例七参考链接一、init 函数1. init 函数的作用go语言中的 init 函数用于包(package)的 初始化 ,该函数是go语言的一个重要特性。主要作用是:初始化 不能采用初始化表达式 初始化的变量。程序运行前的注册。实现sync.Once原创 2021-12-01 19:23:55 · 1930 阅读 · 0 评论 -
【Go】Go 的项目目录
文章目录一、Go 的项目目录1. 适合个人开发者2. 目前流行的项目结构3. 适合企业开发者二、第一个 Go 程序参考链接一、Go 的项目目录进行Go语言开发的时候,我们的代码总是会保存在 $GOPATH/src 目录下。在工程经过go build、go install 或 go get 等指令后,会将下载的第三方包源代码文件放在 $GOPATH/src 目录下, 产生的二进制可执行文件放在 $GOPATH/bin 目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下。如果我们使用版本管原创 2021-11-30 11:24:29 · 3785 阅读 · 0 评论 -
【Go】Go 并发 goroutine 与 Go 通道 channel 简介
本文介绍了goroutine和channel原创 2021-11-24 09:44:24 · 729 阅读 · 0 评论 -
【Go】Go 错误处理
文章目录一、错误处理二、实例参考链接一、错误处理Go 语言通过内置的错误接口提供了非常简单的错误处理机制。error 类型 是一个 接口 类型,这是它的定义://error 接口内有一个返回字符串的方法Error()type error interface { Error() string}我们可以在编码中通过实现 error 接口类型来生成错误信息。函数通常在最后的返回值中返回错误信息。如,使用errors.New 可返回一个错误信息:func Sqrt(f float64原创 2021-11-18 16:52:43 · 1283 阅读 · 0 评论 -
【Go】Go 语言中的接口
如果你是一个大佬,请直接看四。看不懂再从一听我啰嗦。一、接口二、定义接口三、实例四、Go语言中文文档中定义的接口参考链接一、接口Go 语言提供了另外一种数据类型:接口(interface),它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。接口是一组方法签名的集合,然后我们可以定义一个结构体实现该接口所有方法。因此,接口就是定义了对象的行为。例如,结构体Dog可以walk和bark, 如果一个接口声明了walk和bark的方法签名,而Dog实现了walk和bar原创 2021-11-18 16:03:47 · 1211 阅读 · 0 评论 -
【Go】Go 语言的类型转换
文章目录一、类型转换二、实例三、go 不支持隐式转换类型参考链接一、类型转换类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go 语言类型转换基本格式如下:type_name(expression)type_name 为类型,expression 为表达式。二、实例以下实例中将整型转化为浮点型,并计算结果,将结果赋值给浮点型变量:package mainimport "fmt"func main() { var sum int = 17 var count int原创 2021-11-18 10:33:59 · 2325 阅读 · 0 评论 -
【Go】Go 语言 - Map(集合)
文章目录一、Map(集合)二、声明 Map三、初始化 Map四、创建和使用 map 的实例五、delete() 函数参考链接一、Map(集合)Map 是一种 无序 的 键值对 的 集合 。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。二、声明 Map可以使用内建函数 make 也可以使用 map 关原创 2021-11-17 10:39:54 · 1239 阅读 · 0 评论 -
【Go】Go 语言 - 范围(Range)
文章目录范围(Range)参考链接范围(Range)Go 语言中 range 关键字用于 for 循环中 迭代 数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。实例:package mainimport "fmt"func main() { //这是我们使用range去求一个切片的和。使用数组跟这个很类似 nums := []int{2, 3, 4} sum :原创 2021-11-17 09:42:47 · 1095 阅读 · 0 评论 -
【Go】Go 语言切片(Slice)
详解Go语言中的“切片”数据类型原创 2021-11-16 16:06:54 · 12038 阅读 · 0 评论 -
【Go】Go语言结构体
Go语言结构体详解原创 2021-11-16 11:07:10 · 942 阅读 · 0 评论 -
【Go】Go 语言指针
文章目录一、前言二、变量的地址三、指针及其声明四、指针的使用五、Go 空指针六、 指针数组七、指向指针的指针八、向函数传递指针参数参考链接一、前言Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。二、变量的地址Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。以下实例演示了变量在内存中地址:package mainimport "fmt"func main() { var a int = 10 fmt.Pr原创 2021-11-15 21:51:51 · 2697 阅读 · 0 评论