![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GoLang
文章平均质量分 84
私念
PHP GOLANG
展开
-
go条件语句select
如果没有任意一条语句可以执行(即所有的通道都被阻塞),那么有两种可能的情况: ①如果给出了default语句,那么就会执行default的流程,同时程序的执行会从select语句后的语句中恢复。//假如没有default,那么在以上两个条件都不成立的情况下,就会在此阻塞//一般default会不写在里面,select中的default子句总是可运行的,因为会很消耗CPU资源。如果没有可运行的case语句,且没有default语句,select将阻塞,直到某个case通信可以运行。原创 2023-04-04 11:16:37 · 765 阅读 · 1 评论 -
go语言switch语句用法
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;fmt.Printf("x 是 bool 或 string 型")fmt.Printf(" x 的类型 :%T\r\n", i)fmt.Printf("x 是 func(int) 型")fmt.Printf("你的等级是 %s\n", grade )fmt.Printf("x 是 int 型")原创 2023-01-19 14:05:52 · 1806 阅读 · 0 评论 -
go语言if/else语句用法
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则执行 else 语句块。fmt.Printf("a 的值为 100 , b 的值为 200\n")fmt.Printf("a 的值为 : %d\n", a)fmt.Printf("a 的值为 : %d\n", a)fmt.Printf("a 值为 : %d\n", a)原创 2023-01-06 11:12:12 · 900 阅读 · 0 评论 -
go结构体
1.1.1. 自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如://将MyInt定义为int类型通过Type关键字的定义,MyInt就是一种新的类型,它具有int的特性。1.1.2. 类型别名类型别名是Go1.9版本添加的新功能。原创 2023-01-05 20:26:30 · 797 阅读 · 0 评论 -
go-Map实现原理
key,value存储最通俗的话说Map是一种通过key来获取value的一个数据结构,其底层存储方式为数组,在存储时key不能重复,当key重复时,value进行覆盖,我们通过key进行hash运算(可以简单理解为把key转化为一个整形数字)然后对数组的长度取余,得到key存储在数组的哪个下标位置,最后将key和value组装为一个结构体,放入数组下标处,看下图:hash冲突。原创 2022-12-29 22:00:00 · 188 阅读 · 0 评论 -
go-Map
Go语言中 map的定义语法如下其中,KeyType:表示键的类型。ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。原创 2022-12-28 21:15:00 · 103 阅读 · 0 评论 -
golang指针
make也是用于内存分配的,区别于new,它只用于slice、map以及chan的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。new函数不太常用,使用new函数得到的是一个类型的指针,并且该指针对应的值为该类型的零值。3.而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。原创 2022-12-27 10:30:00 · 925 阅读 · 4 评论 -
go切片slice底层实现
切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。原创 2022-12-26 15:32:35 · 192 阅读 · 0 评论 -
go切片slice
go切片slice原创 2022-12-01 10:30:00 · 141 阅读 · 0 评论 -
go数组array
go数组array原创 2022-11-30 11:01:46 · 973 阅读 · 0 评论 -
go基本类型
go基本类型原创 2022-11-19 15:45:00 · 333 阅读 · 0 评论 -
go变量和常量
https://www.phpmianshi.com/?id=366原创 2022-11-18 15:15:00 · 238 阅读 · 1 评论 -
go下划线
go下划线 www.phpmianshi.com原创 2022-11-17 16:00:00 · 168 阅读 · 0 评论 -
go运算符
golang中go运算符 www.phpmianshi.com原创 2022-11-11 14:50:17 · 126 阅读 · 0 评论 -
golang中的go命令
golang中的go命令 www.phpmianshi.com原创 2022-11-12 18:30:00 · 297 阅读 · 0 评论 -
Init函数和main函数
golang中Init函数和main函数 www.phpmianshi.com原创 2022-11-11 14:42:06 · 104 阅读 · 0 评论 -
Golang内置类型和函数
Golang内置类型和函数原创 2022-11-10 15:20:18 · 157 阅读 · 0 评论 -
深入理解GC原理
垃圾定位算法(1)引用计数法 (Reference Counting)。 如 python php 通常C++通过指针引用计数来回收对象,但是这不能处理循环引用,原理是在每个对象内部维护一个引用计数,当对象被引用时引用计数加一,当对象不被引用时引用计数减一。当引用计数为 0 时,自动销毁对象。 例如:谁想用驴干活的时候,就在驴身上画个圈圈,用一次画一个,用完了把代表本次使用的圈圈擦掉。当这头驴身上没圈圈的时候,就可以卸磨杀驴了,身上有圈圈的驴不能杀。 这...原创 2022-03-11 15:29:55 · 565 阅读 · 0 评论 -
面试必备(背)--Go语言八股文系列
1. 垃圾回收垃圾回收就是对程序中不再使用的内存资源进行自动回收的操作。1.1 常见的垃圾回收算法: 引用计数:每个对象维护一个引用计数,当被引用对象被创建或被赋值给其他对象时引用计数自动加 +1;如果这个对象被销毁,则计数 -1 ,当计数为 0 时,回收该对象。 优点:对象可以很快被回收,不会出现内存耗尽或到达阀值才回收。 缺点:不能很好的处理循环引用 标记-清除:从根变量开始遍历所有引用的对象,引用的对象标记“被引用”,没有被标记的则进原创 2022-02-23 20:20:04 · 7060 阅读 · 5 评论 -
Golang中协程调度器底层实现( G、M、P)
三个必知的核心元素。(G、M、P)G:Goroutine的缩写,一个G代表了对一段需要被执行的Go语言代码的封装M:Machine的缩写,一个M代表了一个内核线程,等同于系统线程P:Processor的缩写,一个P代表了M所需的上下文环境简单的来说,一个G的执行需要M和P的支持。一个M在与一个P关联之后形成了一个有效的G运行环境【内核线程 + 上下文环境】。每个P都会包含一个可运行的G的...原创 2020-01-06 15:13:49 · 885 阅读 · 0 评论 -
Golang中实现PHP的Addslashes和Stripslashes
package main// addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。// 预定义字符是:// 单引号(')// 双引号(")// 反斜杠(\)func Addslashes(str string) string { tmpRune := []rune{} strRune := []rune(str) for _, ch := range str...原创 2019-12-16 14:38:17 · 213 阅读 · 0 评论 -
Golang中实现PHP的version_compare函数
PHP的version_compare是对比两个「PHP 规范化」的版本数字字符串。mixed version_compare ( string $version1 , string $version2 [, string $operator ] )使用golang实现其中一部分常用的功能。package utilimport "strings"// 该函数比较两个版本号是...原创 2019-11-27 18:55:24 · 446 阅读 · 0 评论 -
Golang中 sync.Once 应用
sync.Once能确保实例化对象Do方法在多线程环境只运行一次,内部通过互斥锁实现Do方法Once类型的Do方法只接收一个参数,参数的类型必须是func(),即无参数无返回的函数。该方法的功能并不是对每一种参数函数都只执行一次,而是只执行首次被调用时传入的那个函数,并且之后不会再执行任何参数函数。所以,如果有多个需要执行一次的函数,应该为它们每一个都分配一个sync.Once类型的值。...原创 2019-11-21 19:10:46 · 1649 阅读 · 0 评论 -
Golang中获取当天0点的格式化时间
EndDateLimit := time.Now().Format("2006-01-02 00:00:00")取当天某个整点的时间戳now := time.Now().Unix()muteEndTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 8, 0, 0, 0, time.L...原创 2019-11-21 17:15:55 · 2360 阅读 · 0 评论 -
Golang中 delve实战分析一个常驻进程挂起的问题
简介:Delve目的就是为了解决开发者在使用 GDB 调试中遇到的各种各样的问题1. 首先安装获取前,请确保 GOPATH 已经设置。Go 1.8 版本之后,GOPATH 默认在用户目录的 go 文件夹go get -u github.com/go-delve/delve/cmd/dlv参考:https://github.com/go-delve/delve/blob/ma...原创 2019-11-11 15:43:22 · 1086 阅读 · 0 评论 -
Golang中runtime/pprof 的使用
Go 中监控代码性能的有两个包:net/http/pprofruntime/pprof这两个包都是可以监控代码性能的, 只不过net/http/pprof是通过http端口方式暴露出来的,内部封装的仍然是runtime/pprof。1.CPU ProfilingGolang 提供了 pprof 包(runtime/pprof)用于输出运行时的 profiling 数据,这些数...原创 2019-11-08 11:21:04 · 2125 阅读 · 0 评论 -
Golang中panic 和 recover
什么是 panic?在 Go 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。当程序发生 panic 时,使用recover可以重新获得对该程序的控制。可以认为panic和recover与其他语言中的try-catch-finally语句类似,只不过一般我们很少使用panic和recover。而当我们使用了panic...原创 2019-11-08 10:21:39 · 161 阅读 · 0 评论 -
Golang中性能剖析 PProf
Go语言项目中的性能优化主要有以下几个方面:CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈,记录 goroutine 阻塞等待同步(...原创 2019-11-07 11:09:55 · 719 阅读 · 0 评论 -
Golang中直接获取当前函数名称和文件行号等
// 获取正在运行的函数名func runFuncName()string{ pc := make([]uintptr,1) runtime.Callers(2,pc) f := runtime.FuncForPC(pc[0]) return f.Name()}package mainimport( "fmt" "runtime")...原创 2019-11-06 11:21:39 · 4425 阅读 · 0 评论 -
Golang中切片性能优化
package mainimport "fmt"func Print1(p []int) { fmt.Printf(" 切片-p: %p 切片-v: %v 切片长度:%v 切片容量:%v \n",p, p,len(p),cap(p))}/*** Golang中切片性能优化*/func main() { var ss []int ssV1 := ...原创 2019-10-29 11:46:38 · 1293 阅读 · 0 评论 -
Golang中使用JSON
Encode将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error:func Marshal(v interface{}) ([]byte, error)Marshal函数将会递归遍历整个对象,依次按成员类型对这个对象进行编码,类型转换规则如下:bool类型 转换为JSON的Boolean整数,浮点数等数值类型 转换为JSON的Numbe...原创 2019-10-29 10:07:38 · 561 阅读 · 0 评论 -
Golang中生成JSON及解析JSON
一、JSON解析到结构体1.JSON名称/值对"name" : "value"2.JSON值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在中括号中)对象(在大括号中)nullJSON数据JSON 数字可以是整型或者浮点型{ "age":30 }JSON对象JSON 对象在大括号({})中书写:对象可以包...原创 2019-10-29 10:01:16 · 635 阅读 · 0 评论 -
Golang中curl请求库
https://github.com/idoubi/go-curlgolang版本的curl请求库安装go get github.com/mikemintang/go-curl使用package mainimport ( "fmt" "github.com/mikemintang/go-curl")func main() { ur...原创 2019-10-28 16:06:40 · 3706 阅读 · 0 评论 -
Golang中针对MySQL数据查询的错误处理方式
// Go语言针对MySQL数据查询的错误处理方式package mainimport ( "database/sql" "fmt" "runtime")// go run test.gofunc main() { // mysql扩展 https://github.com/go-sql-driver/mysql db, err := sql...原创 2019-10-28 14:54:59 · 4210 阅读 · 0 评论 -
Golang Gin框架跨域中间件
package mainimport ( "github.com/gin-gonic/gin" "awesomeProject/app/app_routers" "strings" "fmt" "net/http")/* 路由初始化*/var ( engine = gin.Default())func main() { ...原创 2019-10-25 15:15:41 · 1676 阅读 · 0 评论 -
GoLang中生成唯一标识id
package main import ( "crypto/md5" "crypto/rand" "encoding/base64" "encoding/hex" "fmt" "io") //生成32位md5字串func GetMd5String(s string) string { h := md5.New() h.Write([]byte(s)) return...原创 2019-10-24 14:25:22 · 2674 阅读 · 0 评论 -
Golang中定时任务time.Sleep和time.Tick的优劣对比
golang 写循环执行的定时任务,常见的有以下三种实现方式:1、time.Sleep方法:for {time.Sleep(time.Second)fmt.Println("我在定时执行任务")}2、time.Tick函数:t1:=time.Tick(3*time.Second)for {select {case <-t1:...原创 2019-10-23 14:04:02 · 2279 阅读 · 0 评论 -
GoLang中生成UUID唯一标识的方法
1、什么是UUIDUUID简介通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库...原创 2019-10-23 12:08:30 · 12381 阅读 · 0 评论 -
GoLang中日期字符串与时间戳转换
//待转化为时间戳的字符串注意这里的小时和分钟还要秒必须写因为是跟着模板走的修改模板的话也可以不写locationtoBeCharge:="2015-01-0100:00:00" //转化所需模板timeLayout:="2006-01-0215:04:05" //重要:获取...原创 2019-10-23 11:31:25 · 996 阅读 · 0 评论 -
GoLang中的几种字符串的连接方式
实现方法1. 直接使用运算符func BenchmarkAddStringWithOperator(b *testing.B) { hello := "hello" world := "world" for i := 0; i < b.N; i++ { _ = hello + "," + world }}golang 里面的字符...原创 2019-10-22 14:40:03 · 226 阅读 · 0 评论