golang
go语言基础学习
海岸星的清风
这个作者很懒,什么都没留下…
展开
-
go语言打怪通关之 ⌈排序⌋
文章目录排序函数自定义排序PanicDefer排序Go 的 sort 包实现了内置和用户自定义数据类型的排序功能,首先关注内置数据类型的排序。package mainimport "fmt"import "sort"func main() { // 排序方法是正对内置数据类型的;这里是一个字符串的例子。 // 注意排序是原地更新的,所以他会改变给定的序列并且不返回 // 一个新值。 strs := []string{"c", "a", "b"} so原创 2022-04-27 09:36:25 · 238 阅读 · 0 评论 -
go语言打怪通关之 ⌈互斥锁和状态协程⌋
文章目录互斥锁Go 状态协程互斥锁使用一个互斥锁来在 Go 协程间安全的访问数据。package mainimport ( "fmt" "math/rand" "runtime" "sync" "sync/atomic" "time")func main() { // 在我们的例子中,`state` 是一个 map。 var state = make(map[int]int) // 这里的 `mutex` 将同步对原创 2022-04-22 08:50:17 · 110 阅读 · 0 评论 -
go语言打怪通关之 ⌈并发编程⌋
文章目录定时器打点器工作池速率限制原子计数器定时器我们常常需要在后面一个时刻运行 Go 代码,或者在某段时间间隔内重复运行。Go 的内置 定时器 和 打点器 特性让这些很容易实现。package mainimport "time"import "fmt"func main() { // 定时器表示在未来某一时刻的独立事件。你告诉定时器 // 需要等待的时间,然后它将提供一个用于通知的通道。 // 这里的定时器将等待 2 秒。 timer1 := time.N原创 2022-04-21 10:22:40 · 458 阅读 · 0 评论 -
go语言打怪通关之 ⌈通道的操作⌋
文章目录超时处理非阻塞通道操作通道的关闭通道遍历超时处理超时对于一个连接外部资源,或者其它一些需要花费执行时间的操作的程序而言是很重要的。得益于通道和 select,在 Go 中实现超时操作是简洁而优雅的。package mainimport "time"import "fmt"func main() { // 在我们的例子中,假如我们执行一个外部调用,并在 2 秒后 // 通过通道 `c1` 返回它的执行结果。 c1 := make(chan string, 1)原创 2022-04-20 09:10:04 · 184 阅读 · 0 评论 -
go语言打怪通关之 ⌈通道⌋
文章目录通道通道缓冲通道同步通道方向通道选择器通道// _通道_ 是连接多个 Go 协程的管道。你可以从一个 Go 协程// 将值发送到通道,然后在别的 Go 协程中接收。package mainimport "fmt"func main() { // 使用 `make(chan val-type)` 创建一个新的通道。 // 通道类型就是他们需要传递值的类型。 messages := make(chan string) // 使用 `channel &原创 2022-04-19 09:03:43 · 123 阅读 · 0 评论 -
go语言打怪通关之 ⌈错误处理,协程⌋
文章目录错误处理协程错误处理// Go 语言使用一个独立的、明确的返回值来传递错误信息的。这与// 使用异常的 Java 和 Ruby 以及在 C 语言中经常见到的超重的// 单返回值/错误值相比,Go 语言的处理方式能清楚的知道哪个函数// 返回了错误,并能像调用那些没有出错的函数一样调用。package mainimport "errors"import "fmt"// 按照惯例,错误通常是最后一个返回值并且是 `error` 类// 型,一个内建的接口。func f1(ar原创 2022-04-18 09:58:04 · 218 阅读 · 0 评论 -
go语言打怪通关之 ⌈指针,结构体,方法,接口⌋
文章目录指针结构体方法接口指针Go 支持指针,允许在程序中通过引用传递值或者数据结构。package mainimport "fmt"// 我们将通过两个函数:`zeroval` 和 `zeroptr` 来比较指针和// 值类型的不同。`zeroval` 有一个 `int` 型参数,所以使用值// 传递。`zeroval` 将从调用它的那个函数中得到一个 `ival`// 形参的拷贝。func zeroval(ival int) { ival = 0}// `zeropt原创 2022-04-17 08:55:48 · 138 阅读 · 0 评论 -
go语言打怪通关之 ⌈闭包,递归⌋
文章目录闭包递归Go 支持通过闭包来使用匿名函数,匿名函数在你想定义一个不需要命名的内联函数时是很实用的。闭包package mainimport "fmt"// 这个 `intSeq` 函数返回另一个在 `intSeq` 函数体内定义的// 匿名函数。这个返回的函数使用闭包的方式 _隐藏_ 变量 `i`。func intSeq() func() int { i := 0 return func() int { i += 1 return i原创 2022-04-16 08:32:18 · 279 阅读 · 0 评论 -
go语言打怪通关之 ⌈函数,多返回值,变参函数⌋
文章目录函数多返回值变参函数函数// 函数 是 Go 的中心。我们将通过一些不同的例子来// 进行学习。package mainimport "fmt"// 这里是一个函数,接受两个 `int` 并且以 `int` 返回它们的和func plus(a int, b int) int { // Go 需要明确的返回值,例如,它不会自动返回最 // 后一个表达式的值 return a + b}func main() { // 通过 `name(args原创 2022-04-15 09:20:40 · 125 阅读 · 0 评论 -
go语言打怪通关之 ⌈数组,切片,关联数组,Range遍历⌋
文章目录数组切片关联数组range 遍历数组在 Go 中,数组 是一个固定长度的数列。// 在 Go 中,数组 是一个固定长度的数列。package mainimport "fmt"func main() { // 这里我们创建了一个数组 `a` 来存放刚好 5 个 `int`。 // 元素的类型和长度都是数组类型的一部分。数组默认是 // 零值的,对于 `int` 数组来说也就是 `0`。 var a [5]int fmt.Println("em原创 2022-04-11 20:32:19 · 589 阅读 · 0 评论 -
go语言打怪通关之 ⌈For 循环,判断,分支结构⌋
文章目录for 循环if/else 分支分支结构for 循环for 是 Go 中唯一的循环结构。这里有 for 循环的三个基本使用方式。// `for` 是 Go 中唯一的循环结构。这里有 `for` 循环// 的三个基本使用方式。package mainimport "fmt"func main() { // 最常用的方式,带单个循环条件。 i := 1 for i <= 3 { fmt.Println(i) i = i原创 2022-04-11 20:30:44 · 349 阅读 · 0 评论 -
go语言打怪通关之 ⌈常量、变量、数据结构⌋
文章目录常量变量多重赋值数据结构整型浮点型布尔类型字符串格式化字符串字符类型数组切片包常量常量使用关键字 const 声明,下面有几个例子:const limit = 512const top uint16 = 1421const Pi float64 = 3.1415926const x,y int = 1,3 //多重赋值Go 的常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那么该常量就是无类型常量,也叫字面常量。当需要设置多个常量的时候,不必重复使用 const原创 2022-04-11 20:29:52 · 728 阅读 · 0 评论 -
go语言打怪通关之 ⌈go语言介绍⌋
go语言的起源Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。该项目的三位领导者均是著名的计算机工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson原创 2022-04-11 20:28:19 · 573 阅读 · 0 评论