- 博客(126)
- 资源 (14)
- 收藏
- 关注
原创 关闭通道和通道上范围循环
一、 关闭通道发送者可以通过关闭信道,来通知接收方不会有更多的数据被发送到channel上。close(ch)接收者可以在接收来自通道的数据时使用额外的变量来检查通道是否已经关闭。语法结构:v, ok := <- ch 类似map操作,存储key,value键值对v,ok := map[key] //根据key从map中获取value,如果key存在, v就是对应的数据,如果key不存在,v是默认值在上面的语句中,如果ok的值是true,表示成功的从通道中.
2021-10-03 11:24:45
370
原创 channel通道
通道可以被认为是Goroutines通信的管道。类似于管道中的水从一端到另一端的流动,数据可以从一端发送到另一端,通过通道接收。在前面讲Go语言的并发时候,我们就说过,当多个Goroutine想实现共享数据的时候,虽然也提供了传统的同步机制,但是Go语言强烈建议的是使用Channel通道来实现Goroutines之间的通信。“不要通过共享内存来通信,而应该通过通信来共享内存” 这是一句风靡golang社区的经典语Go语言中,要传递某个数据给另一个goroutine(协程),可以把这个数据封装成
2021-10-03 11:22:30
21906
原创 sync包——读写锁
官网文档对sync包的介绍:Package sync provides basic synchronization primitives such as mutual exclusion locks. Other than the Once and WaitGroup types, most are intended for use by low-level library routines. Higher-level synchronization is better done via channe
2021-10-03 11:17:11
495
原创 sync包——互斥锁
官网文档对sync包的介绍:Package sync provides basic synchronization primitives such as mutual exclusion locks. Other than the Once and WaitGroup types, most are intended for use by low-level library routines. Higher-level synchronization is better done via channe
2021-10-03 11:15:24
262
原创 sync包——WaitGroup
官网文档对sync包的介绍:Package sync provides basic synchronization primitives such as mutual exclusion locks. Other than the Once and WaitGroup types, most are intended for use by low-level library routines. Higher-level synchronization is better done via channe
2021-10-03 11:12:49
250
原创 临界资源安全问题
一、临界资源临界资源: 指并发环境中多个进程/线程/协程共享的资源。但是在并发编程中对临界资源的处理不当, 往往会导致数据不一致的问题。示例代码:package mainimport ( "fmt" "time")func main() { a := 1 go func() { a = 2 fmt.Println("子goroutine。。",a) }() a = 3 time.Slee
2021-10-03 11:10:20
399
原创 runtime包
官网文档对runtime包的介绍:Package runtime contains operations that interact with Go's runtime system, such as functions to control goroutines. It also includes the low-level type information used by the reflect package; see reflect's documentation for the progra
2021-10-03 11:07:51
374
原创 Go语言的并发模型
Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序。Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源。接下来我们来了解一下Go语言的并发原理。一、线程模型在现代操作系统中,线程是处理器调度和分配的基本单位,进程则作为资源拥有的基本单位。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。线程是进程内部的一个执行单元。 每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。 用户根据需
2021-10-03 10:55:47
565
原创 Go语言的协程——Goroutine
进程(Process),线程(Thread),协程(Coroutine,也叫轻量级线程)进程进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的局限是创建、撤销和切换
2021-10-03 09:32:37
2607
1
原创 并发性Concurrency
1.1 多任务什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。CPU的速度太快啦。。。1.2 什么是并发Go是并发语言,而不是并行语言。在讨论如何在Go中进行并发处理之前,我们首先必须了解什么是并发,以及它与并行性有什么不同。(Go is a concurrent language and not
2021-10-03 09:27:26
157
转载 米哈游技术总监详解《原神》画面效果的技术实现
11月17日,中国Unity线上技术大会游戏专场迎来米哈游技术总监弋振中的分享,此次他围绕“从手机走向主机-《原神》主机版渲染技术”为主题,细致地讲解了《原神》在主机上渲染技术实现的重点内容。以下是演讲内容(有节选):大家好!我叫弋振中,目前负责《原神》的主机平台开发。首先我简单介绍一下《原神》的游戏,《原神》是开放世界的RPG游戏,有独特的二次元画风,是跨平台的,而且长期运营,长期更新。今天的内容安排大致是:首先我会介绍一下《原神》主机平台的基本情况,然后按照我们开发的时候改造渲染管线的思
2021-10-02 14:53:40
4908
1
原创 linux下cp目录时排除一个或者多个目录的实现方法
使用cp命令复制的时候,只能排除一个目录不被复制,如果想排除两个或者多个目录的话,就需要使用rsync命令来实现了,看下面的例子如果要排除/home/data目录下面的a、b、c、三个目录,同时拷贝其它所有目录,执行以下命令yum install rsync #安装rsyncrsync -av --exclude data/a --exclude data/b --exclude data/c data /bak注意:--exclude后面的路径不能为绝对路径,必须为相对路径才可以,否则出错
2021-09-17 16:32:45
1190
转载 Go的json解析:Marshal与Unmarshal
简介Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。go语言本身为我们提供了json的工具包”encoding/json”。更多的使用方式,可以参考:https://studygolang.com/articles/6742实现Json Marshal:将数据编码成json字符串看一个简单的例子ty
2021-09-16 14:50:28
1193
原创 Centos防火墙配置
1、查看firewall服务状态systemctl status firewalld2、查看firewall的状态firewall-cmd --state3、开启、重启、关闭、firewalld.service服务# 开启service firewalld start# 重启service firewalld restart# 关闭service firewalld stop4、查看防火墙规则firewall-cmd --list-all .
2021-09-15 13:44:56
247
原创 go语言的值传递和指针传递
指针传递与值传递严格地说,go方法或函数只有一种传递方式,那就是值传递。每次将一个变量作为参数传递时,都会创建一个新的变量副本并将其传递给所调用的函数或方法。副本分配在不同的内存地址。在指针传递变量的情况下,将创建指向相同内存地址的新副本。为了感受它们之间的差异,我们来看看它是如何工作的。值传递package mainimport "fmt"type Person struct { firstName string lastName string}f
2021-09-15 10:33:44
3138
原创 基础语法(整型:uint、uint8、uint16、uint32、uint64、uintptr)
整型范围Int8 - [-128 : 127]Int16 - [-32768 : 32767]Int32 - [-2147483648 : 2147483647]Int64 - [-9223372036854775808 : 9223372036854775807]无符号整型范围UInt8 - [0 : 255]UInt16 - [0 : 65535]UInt32 - [0 : 4294967295]UInt64 - [0 : 18446744073709551615]
2021-09-14 16:37:14
7614
转载 Go语言指针详解
与Java和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。指针(pointer)在Go语言中可以被拆分为两个核心概念:类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指..
2021-09-14 14:31:05
131
原创 go 类型转换
// atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str s..
2021-09-14 10:42:23
170
原创 go (type *[]int does not support indexing)
这是之前一直遇到的问题(一直没管。。。)*arr[i]如果使用这种方式想要拿到arr的第i个变量,编译器会报错,错误为题目里提示的那样正确的调用方式应该为:(*arr)[i]
2021-09-14 10:05:39
926
原创 Intellij idea go 快捷键是什么
快速打出for循环ctrl+j可以查看快捷生成代码的提示,可以经常看一遍,记住它们。比如itar这个,可以生成遍历数组的代码。Ctrl + Q: 显示变量类型
2021-09-14 09:34:25
275
原创 Go string函数与strconv.Itoa函数的区别
Itoa函数strconv.Itoa函数的参数是一个整型数字,它可以将数字转换成对应的字符串类型的数字。package mainimport ( "fmt" "strconv")func main() { string_number := 97 result := strconv.Itoa(string_number) fmt.Println(result) fmt.Printf("%T\n", result)}运行结果:...
2021-09-14 09:05:48
206
转载 GeoServer中GeoWebCache(GWC)的使用
本文介绍GeoWebCache的使用方法,包括如何切缓存,访问缓存wms/wmts服务,如何复用栅格缓存等。文章大部分内容转载自利用GeoWebCache实现WebGIS地形图展示的缓存优化 - 李晓晖 - 博客园1.前言在geoserver1.7版本之后,geoserver本身集成了GeoWebCache这个模块。本文介绍的是geoserver2.2版本,其本身自带有GeoWebCache。不过如果你的geoserver版本比较老,或者想使用最新的GeoWebCache,可以自行在网上下载
2021-09-13 15:56:08
4258
转载 如何使用Docker部署Go Web应用
本文介绍了如何使用Docker以及Docker Compose部署我们的 Go Web 程序。为什么需要Docker?使用docker的主要目标是容器化。也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机。想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很多的依赖环境或包,甚至对依赖的具体版本都有严格的要求,当开发过程完成后,你希望将应用程序部署到web服务器。这个时候你必须确保所有依赖项都安装正确并且版本也完全相同,否则应用程序可能会崩溃并无法运行。如果你
2021-09-13 15:08:58
268
转载 Go语言项目部署的那些方式
部署Go语言项目本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法。独立部署Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 Mac 平台下编写代码,并且将代码编译成能够在 Linux amd64 服务器上运行的程序。对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务器上,然后设置为后台守护进程运行即可。编译编译可以通过以下命令或编写 makefile 来操作。CGO_ENABLED=0 GOOS=
2021-09-13 15:06:36
786
原创 golang map 多协程
golang中map的三个结论:多协程同时只写入,会发生 concurrent map write 异常,必须加锁多协程同时写入读取,写入加锁,读取不加,不会异常,只是不确保读取的数据是否脏多协程同时只读取,加锁数据干净,不加锁数据可能脏package mainimport ( "fmt" "runtime" "sync")func main() { runtime.GOMAXPROCS(runtime.NumCPU()) var m = ma...
2021-09-13 14:58:56
864
原创 go channel
package mainimport ( "fmt" "time")func test2(a chan int, b chan int) { b <- 6 time.Sleep(time.Second) b <- 7 time.Sleep(time.Second) a <- 5}func main() { /*1.简单的channel队列现进先出特性 *在主线程上建立单个协程,完成某项工作后,关闭该管道,关闭与否为可选项。 *停止一段阻塞有两种方式.
2021-09-13 10:42:11
79
原创 go 学习 go-simplejson 遍历
方式一 dataJson := jsonInfo.Get("tick").Get("data") dataArr, _ := dataJson.Array() // 遍历 for i := range dataArr { info := dataJson.GetIndex(i) priceF := info.Get("price").MustFloat64() amountF := info.Get("amount").MustFloat64() direc..
2021-09-12 21:09:14
1201
原创 go程序部署到linux上运行
1)、下载第三方包代码git clone https://github.com/golang/sys.git一、win10上的操作1、在src目录下依次执行set CGO_ENABLED=0、set GOOS=linux、set GOARCH=amd64命令2、进入主项目目录,执行go build 程序入口文件。我这里是main.gogo build main.go二、linux 端 cento1、将程序所需要的文件如配置文件和生成的可执行文件拷贝到..
2021-09-12 20:46:59
1430
转载 Go语言unbuffered和buffered channel
转载https://www.daehub.com/archives/9375.html初学Go 语言时,最大的挑战就是了解 Channel 的使用时机及差异。而 Channel 又分为两种,一种是 buffered channel,另一种是 unbuffered channel,本文将用几个简单的例子带大家了解这两种 channel 的差异,让初学者可以很快的了解 channel 使用方法。Unbuffered Channel在 Go 语言内使用 goroutine 是很常见的,但是我们该...
2021-09-09 14:16:58
264
原创 go 学习 channel
channel.gopackage mainimport ( "fmt" "time")func worker(id int, c chan int) { for n := range c { fmt.Printf("Worker %d received %c\n", id, n) }}func createWorker(id int) chan<- int { c := make(chan int) go worker(id, c) return c}
2021-09-09 14:00:19
89
原创 Go测试与性能调优: 使用pprof进行性能调优 graphviz
go test -bench . -cpuprofile cpu.outgo tool pprof cpu.out提示用不了,需要安装Graphviz工具.1.进入官网:http://www.graphviz.org/
2021-09-09 11:24:57
172
原创 go 学习 错误处理
defer.gopackage mainimport ( "fmt" "os" "bufio" "imooc.com/ccmouse/learngo/functional/fib")func tryDefer() { for i := 0; i < 100; i++ { defer fmt.Println(i) if i == 30 { // Uncomment panic to see // how it works with defer //
2021-09-09 10:44:02
227
原创 go 学习 5
main.gopackage mainimport ( "bufio" "fmt" "io" "strings" "com.loit/learn/learngo/functional/fib")type intGen func() intfunc (g intGen) Read( p []byte) (n int, err error) { next := g() if next > 10000 { return 0, io.EOF } s := fmt.
2021-09-09 10:12:00
94
原创 go 学习 4 retriever
main.gopackage mainimport ( "fmt" "time" "com.loit/learn/learngo/retriever/mock" "com.loit/learn/learngo/retriever/real")type Retriever interface { Get(url string) string}type Poster interface { Post(url string, form map[string]string)
2021-09-09 10:09:11
162
原创 go 学习3 tree
node.gopackage treeimport "fmt"type Node struct { Value int Left, Right *Node}func (node Node) Print() { fmt.Print(node.Value, " ")}func (node *Node) SetValue(value int) { if node == nil { fmt.Println("Setting Value to nil " + "
2021-09-09 10:05:35
139
转载 微服务框架 Go-Micro 集成 Nacos 实战之服务注册与发现
转载:https://zhuanlan.zhihu.com/p/281090292导读:本文主要介绍如何使用 Golang 生态中的微服务框架 Go-Micro(v2) 集成 Nacos 进行服务注册与发现。(Go-Micro 目前已经是 v3 版本,但由于某些原因项目已经更名为 nitro 具体原因大家可以去 github 中查看。)相关背景知识1. Go-MicroGo Micro 是一个基于 Go 语言编写的、用于构建微服务的基础框架,提供了分布式开发所需的核心组件,包括 RPC.
2021-09-09 09:28:33
529
原创 解决golang被墙(go get golang.org/x/失败)
1.手动git一般在 GitHub 上都有官方的镜像仓库的对应,我们可以手动下载或 clone 对应的 GitHub 仓库到指定的目录下($GOPATH//src/golang.org/x/)。例子:cd $GOPATH/src/golang.org/x/git clone https://github.com/golang/crypto.git安装编译这个包下的所有依赖go install golang.org/x/crypto/...如:...
2021-09-08 15:00:46
1014
原创 国内的go get问题的解决 --gopm
一、golang之旅--gopm1.什么是gopm在nodejs中我们有npm,可以通过npm来下载安装一些依赖包。在go中也开发了类似的东西,那就是gopm。这玩意儿是七牛开发的。在这里说下,七牛公司大部分程序都是用go语言编写的,所以开发出这么一个方便的东西肯定也是合情合理的。2.gopm地址git地址:https://github.com/gpmgo/gopm官方地址:https://gopm.io/gopm文档路径:https://github.com/gpmgo/docs/t
2021-09-08 13:39:30
718
原创 浅谈unicode编码和utf-8编码的关系
字符串编码在Python里边是经常会遇到的问题,特别是写文件以及网络传输的过程中,当调用某些函数的时候经常会遇到一些字符串编码提示错误,所以有必要弄清楚这些编码到底在搞什么鬼。 我们都知道计算机只能处理数字,文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255。计算机是美国人发明的,而英文中涉及的编码并不多,一个字节可以表示所有字符了,所以ASCII(American national Standard Code for Infor...
2021-09-07 17:06:36
227
navicat091_ora_cs
2011-11-09
google 浏览器安装程序15.0.874.81
2011-10-23
jquery api 1.4.6
2011-10-23
jquery api 1.2
2011-10-23
jquery七天入门指南
2011-10-23
easymock 学习
2011-08-16
SQL Server表管理.rar
2009-09-06
firebug-1.4.2-fx.zip
2009-09-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人