Go
Endless丶Go
游戏服务器研发
展开
-
go recover
通常,recover需要与defer和panic一起使用。当panic被触发后,defer会保证recover总是被最后调用。如果recover成功地恢复了panic,程序会从触发panic的函数中返回,继续执行其他代码。recover是Go语言的内建函数,它用于从panic中恢复,阻止panic继续传播,并返回触发panic的值。如果在非延迟函数或者没有发生panic的情况下调用recover,它将不会有任何效果,即返回nil。原创 2023-10-20 15:14:18 · 599 阅读 · 0 评论 -
golang arena
Go tool arguments 就是go build 的参数。Program arguments 启动参数。Enviroment 定义环境变量。go 1.20新特性。原创 2023-07-06 16:48:31 · 737 阅读 · 0 评论 -
golang cannot find package xxx in any of
1是路径没配对,把src去掉,因为GOPATH的规则好像是自动识别目录下的src路径,所以改成下面即可。报错 cannot find package xxx in any of。原创 2023-07-01 00:27:44 · 1069 阅读 · 0 评论 -
git bash下修改GOROOT或GOPATH
在git bash下可以通过export GOPATH="xxx"修改二者的路径。goroot标准库路径。gopath依赖库路径。原创 2023-06-30 22:21:15 · 759 阅读 · 0 评论 -
安装godoc
godoc在go1.1.13版本后已从核心包中移除启用 Go Modules 功能go env -w GO111MODULE=on配置 GOPROXY 环境变量,以下三选一1.七牛CDNgoenv-wGOPROXY=https://goproxy.cn,direct2.阿里云goenv-wGOPROXY=https://mirrors.aliyun.com/goproxy/,direct3.官方goenv-wGOPROXY=https://g...原创 2022-04-28 22:57:59 · 1254 阅读 · 0 评论 -
Go语言中只读通道和只写通道
只读通道的定义: <-chan type只写通道的定义:chan<- type如何区分:可以理解 <- 表示数据流向, <-chan从通道中流出(读),chan<-流入到通道中(写)原创 2022-03-23 15:50:02 · 701 阅读 · 0 评论 -
GoLand显示源文件结构
方便快速查找和定位Source file structureThe Structure tool window: View | Tool Windows | Structure or Alt+7The Structure popup: Navigate | File Structure or Ctrl+F12原创 2022-03-18 14:47:07 · 1210 阅读 · 0 评论 -
GoLand修改窗口文件显示最大数量及多行显示
修改显示的最大数量File-Settings-Editor-General-EditorTabs-Closing Policy-Tab limit多行显示跟上面在一个标签页下File-Settings-Editor-General-EditorTabs去掉Show tabs in one row还可以勾上Use small font for labels,标签字体缩小。Mark modified,修改提示。这个很有用。...原创 2022-03-18 14:38:26 · 1169 阅读 · 0 评论 -
Go切片截取规则
数组的下标从0开始切片可以基于数组和切片来创建,截取的规则是左闭右开package mainimport "fmt"func main() { n := [5]int{1, 2, 3, 4, 5} for i:=0; i < len(n); i++ { fmt.Println(n[i]) } //左闭右开 n1 := n[1:] fmt.Prin原创 2022-03-06 16:34:30 · 1611 阅读 · 0 评论 -
Go报错:non-declaration statement outside function body
./slice.go:5:1: syntax error: non-declaration statement outside function body意思就是在func外,每个语句都必须是golang的关键字开始,否则就报这个错,写在函数体内就好。这应该也是一种可以的解决方案syntax error: non-declaration statement outside function body_小马过河-CSDN博客...原创 2022-03-06 16:21:40 · 7166 阅读 · 0 评论 -
go env
go env -u NAME 可以把 go env -w NAME=VALUE设置的环境变量给重置具体可以通过 go help env查看$ go help envusage: go env [-json] [-u] [-w] [var ...]Env prints Go environment information.By default env prints information as a shell script(on Windows, a batch file). If o原创 2022-03-05 17:49:33 · 931 阅读 · 0 评论 -
golang版本管理工具GO111MODULE
GO111MODULE:包管理GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。参考https://www.cnblogs.com/embedded-linux/p/11616183.htmlgol原创 2022-03-05 17:24:27 · 975 阅读 · 0 评论 -
go version 查看安装的版本
$ go versiongo version go1.17.7 linux/amd64原创 2022-03-02 15:40:15 · 3005 阅读 · 0 评论 -
Go路径:GOROOT & GOPATH
go中只有两个路径.GOROOT: go的安装路径,官方包路径根据这个设置自动匹配GOPATH: 工作路径(其实不应该用中文翻译解释,直接说GOPATH更合适)用指令 go env 可以查看上面两个路径。GOPATH可以在windows下环境变量中修改。...原创 2022-03-01 11:27:06 · 689 阅读 · 0 评论 -
go get 下载的包路径
go get 下载的包放在哪里呢?用go env 命令 查看 GOPATH路径,该目录就是下载包的路径。原创 2022-03-01 10:47:10 · 3170 阅读 · 1 评论 -
《Go语言实战》学习笔记——包
第 3 章 打包和工具链在 Go 语言里,包是个非常重要的概念。其设计理念是使用包来封装不同语义单元的功能。这样做,能够更好地复用代码,并对每个包内的数据的使用有更好的控制。3.1 包所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包。这样每个包的代码都可以作为很小的复用单元,被其他项目引用。3.1.1 包名惯例给包及其目录命名时,应该使用简洁、清晰且全小写的名字,这有利于开发时频繁输入包名。3.1.2 main包在 Go 语言里,命名为 main 的包具.原创 2022-02-25 16:32:21 · 286 阅读 · 0 评论 -
《Go语言实战》学习笔记——有缓冲的通道代码实战
第6章 并发6.5 通道6.5.2有缓冲的通道概念有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件也会不同。只有在通道中没有要接收的值时,接收动作才会阻塞。只有在通道没有可用缓冲区容纳被发送的值时,发送动作才会阻塞。这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲的通道保证进行发送和接收的 goroutine 会在同一时间进行数.原创 2022-02-24 11:40:53 · 511 阅读 · 0 评论 -
Go语言之channel的一些疑问与思考
1、怎么理解《Go语言编程》学习笔记——goroutine与并发通信_WonderChaos的博客-CSDN博客提到的”Go语言提供的是另一种通信模型,即以消息机制而非共享内存作为通信方式”?channel管道是goroutine之间的桥梁,本质上是通过对共享资源的消息传递来完成goroutine间的同步。2、阻塞对于无缓冲的管道来说,必须要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收操作。如果任意一方没有准备好,就会导致先执行发送或接收操作的gorout..原创 2022-02-23 16:15:52 · 95 阅读 · 0 评论 -
《Go语言实战》学习笔记——WaitGroup和defer
代码实战Go语言之channel代码实战-goroutine模拟双人网球_WonderChaos的博客-CSDN博客中,有一些语句没太明白,这篇详细学习一下:var wg sync.WaitGroupwg.Add(2)wg.Wait()defer wg.Done()第6章 并发6.2 goroutineWaitGroup是一个计数信号量,可以用来记录并维护运行的goroutine。如果 WaitGroup的值大于 0,Wait 方法就会阻塞。关键字 defer 会修改原创 2022-02-23 15:52:02 · 250 阅读 · 0 评论 -
《Go语言实战》学习笔记——无缓冲通道代码实战,用goroutine模拟双人网球
参考[1]《Go语言实战》6.5.1 无缓冲的通道无缓冲的通道概念无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能完成发送和接收操作。如果两个 goroutine没有同时准备好,通道会导致先执行发送或接收操作的 goroutine 阻塞等待。这种对通道进行发送和接收的交互行为本身就是同步的。其中任意一个操作都无法离开另一个操作单独存在。在第 1 步,两个原创 2022-02-23 14:49:49 · 428 阅读 · 0 评论 -
《Go语言编程》学习笔记——channel 3
第4章 并发编程4.5 channelchannel的传递在Go语言中channel本身也是一个原生类型,与map之类的类型地位一样,因此channel本身在定义后也可以通过channel来传递。利用channel的这个可传递特性,我们可以实现非常强大、灵活的系统架构。相比之下,在C++、Java、C#中,要达成这样的效果,通常就意味着要设计一系列接口。与Go语言接口的非侵入式类似,channel的这些特性也可以大大降低开发者的心智成本,用一些比较简单却实用的方式来达成在其他语言中需原创 2022-02-23 11:49:41 · 312 阅读 · 0 评论 -
《Go语言编程》学习笔记——channel 2
第4章 并发编程4.5 channelselectGo语言直接在语言级别支持select关键字,用于处理异步IO问题。随机是怎么做到的?因为select的特点是只要其中一个case已经完成,程序就会继续往下执行,而不会考虑其他case的情况。缓冲机制channel缓冲,可以达到消息队列的效果。//创建一个带缓冲的channelch := make(chan int, 1024) //缓冲区被填完之前都不会阻塞//读取for i := range ch {.原创 2022-02-23 11:18:49 · 196 阅读 · 0 评论 -
《Go语言编程》学习笔记——channel 1
第4章 并发编程4.5 channelchannel是Go语言在语言级别提供的goroutine间的通信方式。我们可以使用channel在两个或多个goroutine之间传递消息。channel是进程内的通信方式,因此通过channel传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,我们建议用分布式系统的方法来解决,比如使用Socket或者HTTP等通信协议。Go语言对于网络方面也有非常完善的支持。基本语法.原创 2022-02-22 18:05:41 · 326 阅读 · 0 评论 -
《Go语言编程》学习笔记——goroutine与并发通信
第4章 并发编程4.3 goroutinegoroutine是Go语言中的轻量级线程实现,由Go运行时管理,使用非常简单,在函数调用前加上 go 关键字4.4 并发通信实现一个如此简单的(并发)功能,却写出如此臃肿而且难以理解的代码。想象一下,在一个大的系统中具有无数的锁、无数的共享变量、无数的业务逻辑与错误处理分支,那将是一场噩梦。这噩梦就是众多C/C++开发者正在经历的,其实Java和C#开发者也好不到哪里去。Go语言提供的是另一种通信模型,即以消息机制而非共享内存作为通信原创 2022-02-22 17:53:23 · 641 阅读 · 0 评论 -
Go 语言之用户自定义类型
Go 语言允许用户定义类型,格式:type 类型名 类型例如type user struct { name string email string}原创 2022-02-22 17:02:54 · 149 阅读 · 0 评论 -
《Go语言编程》学习笔记——接口2
第3章 面向对象编程3.5 接口接口赋值在Go语言中有两种情况给接口赋值。1、将对象实例赋值给接口需要注意Go语言会自动生成一些方法,从而让对象原有的函数满足接口的函数2、将一个接口赋值给另一个接口。如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A。接口查询类型查询在Go语言中,还可以更加直截了当地询问接口指向的对象实例的类型接口组合Go语言支持接口组合Any类型任何对象实例都满足空接口interface{},..原创 2022-02-22 16:38:50 · 221 阅读 · 0 评论 -
《Go语言编程》学习笔记——接口1
第3章 面向对象编程3.5 接口Go语言的主要设计者之一罗布·派克(Rob Pike)曾经说过,如果只能选择一个Go语言的特性移植到其他语言中,他会选择接口。接口在Go语言有着至关重要的地位。如果说goroutine和channel 是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道极为亮丽的风景,那么接口是Go语言整个类型系统的基石,让Go语言在基础编程哲学的探索上达到前所未有的高度。Go语言在编程哲学上是变革派,而不是改良派。这不是因为Go语言有goroutin原创 2022-02-22 16:35:51 · 142 阅读 · 0 评论 -
Go语言之切片Slice
切片(动态数组) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 定义 var identifier []type var slice1 []type = make([]type, len) 等价于 slice1 := make([]type, len) make([]原创 2022-02-17 15:07:41 · 387 阅读 · 0 评论 -
Go语言常用技巧
1、for循环同时定义多个变量 1 package main 2 3 import "fmt" 4 5 func main() { 6 | for i, j := 1, 10; i < j; i++ { 7 | | fmt.Println(i) 8 | } 9 }$ go run hello.go 123456789原创 2022-02-17 14:28:03 · 341 阅读 · 0 评论 -
Go语言常见错误
1、map没初始化,为nil,不能插入键值对var record map[int]intrecord[k] = v //panic: assignment to entry in nil map2、数组越界panic: runtime error: inedex out of range [3] with length 3for j := i+1; j <= len; j++//测试用例 [1,1,2],Go数组索引与C++一样,是从0开始,j < len而不应该 <原创 2022-02-17 14:26:03 · 662 阅读 · 0 评论 -
Go语言之工具Go Playground
简介Go Playground 允许在浏览器里编辑并运行 Go 语言代码。用途分享 Go 代码:Go 开发者使用 Playground 分享他们的想法,测试理论,或者调试代码。你也可以这么做。每次使用 Playground 创建一个新程序之后,可以点击 Share 分享。要给想要学习写东西或者寻求帮助的同事或者朋友演示某个想法时,Go Playground 是非常好的方式。在 Go 语言的 IRC 频道、Slack 群组、邮件列表和 Go 开发者发送的无数邮件里,用户都能看到创建、修改和分原创 2022-02-16 14:49:46 · 1600 阅读 · 0 评论 -
Go语言之range
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。package mainimport "fmt"func main() { //这是我们使用range去求一个slice的和。使用数组跟这个很类似 nums := []int{2, 3, 4} sum := 0 for _, num := range nums {原创 2022-02-16 14:31:59 · 939 阅读 · 0 评论 -
Go语言之make
描述make函数是Go的内置函数,它的作用是为slice、map或chan初始化并返回引用。make仅仅用于创建slice、map和channel,并返回它们的实例。语法和参数函数签名func make(t Type, size ...IntegerType) Type名称 含义 t slice, map或channel类型。 size 整数类型切片,面对不同类型时意义也不同。是否可省略跟创建类型有关。 使用示例创建slicemake([]T原创 2022-02-16 11:46:11 · 3790 阅读 · 0 评论 -
Go语言之变量
格式Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明声明变量一般使用var关键字var identifier type//声明单个变量var identifier1, identifier2 type //一次声明多个变量第一种,指定变量类型,如果没有初始化,则变量默认为零值。var v_name v_typev_name = value零值参考Go语言之零值_WonderChaos的博客-CSDN博客第二种,根据值自行判定变量类型。v.原创 2022-02-16 11:34:35 · 211 阅读 · 0 评论 -
Go语言之简化变量声明运算符:=
:= 是简化变量声明运算符,用于声明一个变量同时赋予初值,变量类型而由系统自动推断。简化变量声明运算符只是一种简化记法,让代码可读性更高。这个运算符声明的变量和其他使用关键字 var 声明的变量没有任何区别。intVal := 1 相等于var intVal int intVal = 1 ...原创 2022-02-16 11:32:37 · 136 阅读 · 0 评论 -
Go语言之零值
零值就是变量没有做初始化时系统默认设置的值。在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个该类型的默认零值。每个类型对应零值如下表格类型 零值 数值 0 字符串 空字符串 布尔 false 指针 nil 引用类型(切片/映射/通道/接口/函数) 被声明为零值的引用类型的变量 引用的底层数据结构会被初始化为对应的零值 nil pack原创 2022-02-16 11:11:48 · 1806 阅读 · 0 评论 -
Go语言之Hello World
编写hello.go执行$ go run hello.goHello, World!编译生成二进制文件$ go build hello.go$ lshello hello.go参考[1]Go 语言教程 | 菜鸟教程[2] 《Go语言实战》1.2章原创 2022-02-16 10:41:29 · 827 阅读 · 0 评论 -
Go语言之值传递与引用传递
参考[1]Go语言中函数的参数有两种传递方式:按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。Go语言中,在函数调用时,引用类型(slice、map、interface、channel)都默认使用引用传递,另外使用指针也可以进行引用传递。参考[2]关于使用数组进行值传递,使用数组的指针进行引用传原创 2022-02-15 18:09:17 · 4130 阅读 · 0 评论 -
Go语言之nil
有零值Go语言之零值_WonderChaos的博客-CSDN博客的概念后就好理解nil的概念了1、nil是一个预先声明的标识符,我们可以直接使用nil,而不用声明它。2、nil表示指针、通道、函数、接口、映射或切片类型,即这些类型的零值。注意:nil是指声明了变量,但没有赋值。如果有初始化或赋值,例如下面例子2的切片变量a,就是空的而非nil!参考[1]《Go语言实战》——威廉•肯尼迪[2]Go语言之零值_WonderChaos的博客-CSDN博客...原创 2022-02-15 17:09:24 · 1295 阅读 · 0 评论 -
Go语言之类型系统
文字版类型系统内置类型 语言提供的一组类型 数值类型 字符串类型 布尔类型 引用类型 切片 映射 通道 接口 函数 结构类型 可以用来描述一组数据值,这组值的本质可以是原始的也可以不是 感觉是C++的结构体,自定义 思维导图...原创 2022-02-15 16:47:21 · 301 阅读 · 0 评论