gocookbook icon indicating copy to clipboard operation
gocookbook copied to clipboard

go cook book

Results 90 gocookbook issues
Sort by recently updated
recently updated
newest added

### 声明 map类型的变量声明方式如下: ``` var mapVar map[keyType]valueType ``` 比如: ``` var map1 map[string]int ``` 在声明的时候不需要知道 map 的长度,map 是可以动态增长的。map 是引用类型,所以未初始化的 map 的zero value是 nil。nil map没有键也不能向其添加键(写入nil map会引发允许时错误:`panic: assignment to entry in nil...

### 向切片追加新元素 使用`append`向切片追加元素, 其声明为`func append(s[]T, vs ...T) []T` 。` append` 方法将 0 个或多个具有相同类型的元素追加到切片s后面并且返回新的切片;追加的元素必须和原切片的元素同类型。如果 s 的容量不足以存储新增元素,append 会分配新的切片来保证已有切片元素和新增元素的存储。因此,返回的切片可能已经指向一个不同的相关数组了。`append` 方法总是返回成功,除非系统内存耗尽了。 >It is common to append new elements to a slice, and so Go...

在Go中一个数组的长度是固定的,但是切片的长度是可以动态扩充的,所以在实际应用中切片比数组更常用。 > An array has a fixed size. A slice, on the other hand, is a dynamically-sized, flexible view into the elements of an array. In practice, slices are much...

写程序时,我们经常需要对时间进行处理。在 Go 中虽说标准库 time 提供了对应的能力,但是操作太多,我们应该着重记哪些呢?这次给大家提供一份实用的备忘单,下次再碰上时间处理了直接拿来用,就别每次都百度了:-D 本文将介绍 time 库中一些重要的函数和方法,特别是时间的格式转换和时区校对等操作进行重点说明,如果你对这块的知识还有盲区,请一定不要错过。 ## 应对时区问题 在编程中,我们经常会遭遇**八小时时间差**问题。这是由时区差异引起的,为了能更好地解决它们,我们需要理解几个时间定义标准。 GMT(Greenwich Mean Time),格林威治平时。GMT 根据地球的自转和公转来计算时间,它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。GMT 是前世界标准时。 UTC(Coordinated Universal Time),协调世界时。UTC 比 GMT 更精准,它根据原子钟来计算时间。在不需要精确到秒的情况下,可以认为 UTC=GMT。UTC 是现世界标准时。 从格林威治本初子午线起,往东为正,往西为负,全球共划分为 24 个标准时区,相邻时区相差一个小时。 ``` package main...

上个目录里,汇总的都是文件读写、压缩相关的操作。在做项目时还会有其他必要的使实用操作,就总结到这里。 ### 获取当前执行函数的文件路径 此操作在加载配置文件之类的程序里会用到。 程序需要根据自己当前的路径,确定配置文件在哪里,这样无论Go项目程序放在什么路编译,都能正确加载到配置文件。 ```go //获取当前文件路径 _, filename, _, _ := runtime.Caller(0) ``` ### 确定项目根目录的路径 通过上一步获取当前执行函数的文件路径后,还能更进一步通过 `path.Dir` 获取项目根目录,或者配置文件目录的路径。 这里假设当前文件的上两层目录,就是项目根目录,这时候这么获取项目根目录路径。 ```go //获取当前文件路径 _, filename, _, _ := runtime.Caller(0) // 项目根目录...

### 下载安装VSCODE 下载地址:https://code.visualstudio.com/Download 选择自己电脑对应平台的VsCode进行下载。 ### 安装Go 扩展 安装完VsCode后,先安装Go官方的扩展,去VsCode插件市场搜索Go,选择扩展进行安装,如下图: ### 安装 GO Tools 按住快捷键:CMD + SHIFT + P 弹出下面安装窗口 输入:Go:install/Update Tools - VsCode 支持开发Go项目主要依赖 gopls 这个工具,该工具现在最新版最低要求Go1.18 所以需要升级Go版本,并设置GOPATH环境变量。 ### 配置Go 项目运行 打开项目后,按F5...

结构体大家都知道用于把一组字段组织在一起,来在Go语言里抽象表达现实世界的事物,类似“蓝图”一样。 比如说定义一个名字为Car的结构体在程序里表示“小汽车” ```go // declare the 'car' struct type type car struct { make string model string mileage int } // create an instance of a car newCar := car{...

互斥锁是并发控制的一个基本手段,是为了避免竞争而建立的一种并发控制机制。在学习它的具体实现原理前,我们要先搞懂一个概念,就是临界区。 在并发编程中,如果程序中的一部分会被并发访问或修改,那么,为了避免并发访问导致的意想不到的结果,这部分程序需要被保护起来,这部分被保护起来的程序,就叫做临界区。 如果很多线程同步访问临界区,就会造成访问或操作错误,这当然不是我们希望看到的结果。所以,我们可以使用互斥锁,限定临界区只能同时由一个线程持有。 ## Go 语言的互斥锁 在Go语言里sync.Mutex 是语言层面提供给我们的互斥锁,它实现了sync.Locker 接口 ```go type Locker interface { Lock() Unlock() } ``` 所以互斥锁 Mutex 提供两个方法 Lock 和 Unlock:进入临界区之前调用 Lock 方法,退出临界区的时候调用 Unlock 方法: ```go func(m...

Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.0.0-20210513164829-c07d793c2f9a to 0.1.0. Commits See full diff in compare view [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=golang.org/x/crypto&package-manager=go_modules&previous-version=0.0.0-20210513164829-c07d793c2f9a&new-version=0.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter...

dependencies

Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.10.0 to 1.11.1. Release notes Sourced from github.com/prometheus/client_golang's releases. 1.11.1 / 2022-02-15 [SECURITY FIX] promhttp: Check validity of method and code label values prometheus/client_golang#987 (Addressed CVE-2022-21698) What's...

dependencies