go语言
code-Study
工业自动化领域上位机开发工程师,7年.ENT相关开发经验,深耕C#技术生态,将持续输出.NET及其他领域的相关知识,与大家一同交流学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
通道阻塞的几种场景
func main() { // 示例1。 ch1 := make(chan int, 1) ch1 <- 1 //ch1 <- 2 // 通道已满,因此这里会造成阻塞。 // 示例2。 ch2 := make(chan int, 1) //elem, ok := <-ch2 // 通道已空,因此这里会造成阻塞。 //_, _ = elem, ok ch2 <- 1 // 示例3。 var原创 2020-11-14 23:13:17 · 676 阅读 · 0 评论 -
【Golang】命令源码文件
用途 命令源码文件是程序的运行入口,是每个可独立运行的程 序必须拥有的。我们可以通过构建或安装,生成与其对应的可执行文件,后者一般会与该命令源码文件的直接父目录同名。 如果一个源码文件声明属于main包,并且包含一个无参数声明且无结果声明的main函数,那么它就是命令源码文件。 package main import "fmt" func main() { fmt.Println("Hello, world!") } 当需要模块化编程时,我们往往会将代码拆分到多个文件,甚至拆分到不同的代码包中。但无论怎原创 2020-11-12 13:11:54 · 391 阅读 · 0 评论 -
【Golang】GOOROOT/GOPATH/GOBIN
GOROOT 用途 Go语言安装根目录的,也就是GO语言的安装路径 GOBIN 用途 GO程序生成的可执行文件的路径 GOPATH 用途 若干工作区目录的路径,是我们自己定义的工作空间 Go 语言的源码文件都需要被存放在环境变量 GOPATH 包含的某个工作区(目录)中的 src 目录下的某个代码包(目录)中。 Q 安装后的结果文件都会放到哪里呢? 安装后如果产生了归档文件(以“.a”为扩展名的文件),就会放进该工作区的 pkg子目录 如果产生了可执行文件,就可能会放进该工作区的 bin 子目录。 某原创 2020-11-11 22:38:02 · 9327 阅读 · 0 评论 -
【Golang】beego连接数据库报错
问题 执行连接数据库时报错 解决 通过追踪断点发现在连接数据库时会查询数据库引擎,通过SQL SELECT ENGINE, TRANSACTIONS FROM information_schema.engines WHERE SUPPORT = 'DEFAULT' 而我用了5.0版本的mysql,库中没有这个表,最终更换5.7版本 刚了挺久记录一下。 ...原创 2020-11-11 00:09:01 · 408 阅读 · 0 评论 -
【Golang】sync.NewCond条件等待用法
条件等待和互斥锁有不同,互斥锁是不同协程公用一个锁,条件等待是不同协程各用一个锁,但 是wait()方法调用会等待(阻塞),直到有信号发过来,不同协程是共用信号。 可以看如下的代码来理解 func main() { wg := sync.WaitGroup{} cond := sync.NewCond(new(sync.Mutex)) for i:=0 ; i<3 ;i++{ go func(i int) { wg.Add(1) fmt.Println("协程启动") co原创 2020-06-30 08:30:35 · 983 阅读 · 1 评论 -
【Golang】sync.Once的使用
单次执行 Once的作用是多次调用但只执行一次,Once只有一个方法,Once.Do(),向Do传入一个函 数,这个函数在第一次执行Once.Do()的时候会被调用 以后再执行Once.Do()将没有任何动作,即使传入了其他的函数,也不会被执行,如果要执 行其它函数,需要重新创建一个Once对象。 Once可以安全的再多个协程中并行使用,是协程安全的。 // 多次调用仅执行一次指定的函数 f func (o *Once) Do(f func()) 代码测试 我们写一段代码来测试一下sync.Once的原创 2020-06-29 18:28:51 · 550 阅读 · 0 评论 -
【Golang】Sync.WaitGroup的使用
示例 这里我们直接来用代码进行讲解,以下面的代码为例我们需要等待协程结束后查询count的,所以最后在末尾处使用了睡眠time.Sleep(time.Second* 2) ,目前的是一个简单的业务逻辑我们可以使用睡眠来等待,但是如果遇到业务复杂的情况,时间是无法进行预料的,这样的方法就不能使用了, func main(){ count := 0 for i:=0 ;i<10000;i++{ go func() { //数据处理 count++ }() } time.Slee原创 2020-06-29 09:27:49 · 618 阅读 · 0 评论 -
【Golang】Sync.Mutex应该怎么用?
示例 通过如下的代码,我想通过开多个协程使得count累加10000次,值最终应该是10000,可是执行如下的代码发现值不等于10000,都是小于10000的值 func main(){ count := 0 for i:=0 ;i<10000;i++{ go func() { count++ }() } time.Sleep(time.Second* 2) fmt.Println(count) } 结果 分析原因 造成该问题的原因是协程在读count值时,假设有a、b两原创 2020-06-29 09:09:37 · 611 阅读 · 0 评论 -
golang枚举
golang枚举 普通枚举类型 直接给常量赋值 func main(){ enums() } func enums(){ const( java = 1 cpp = 2 c = 3 python = 4 golang = 5 ) fmt.Println(java,cp...原创 2018-03-06 10:58:10 · 2473 阅读 · 0 评论 -
go语言-defer关键字
example1func f() (result int) { defer func() { result++ }() return 0 }example2func f() (r int) { t := 5 defer func() { t = t + 5 }() return t }example3fun原创 2017-12-19 11:44:18 · 447 阅读 · 0 评论 -
go语言-生成随机数
package mainimport ( "fmt" "math/rand" "time" )func main(){ r:=rand.New(rand.NewSource(time.Now().UnixNano())) for i:=0;i<=10;i++{ fmt.Println(r.Intn(10)) } }原创 2017-12-19 10:07:39 · 677 阅读 · 0 评论
分享