今天这篇笔记重点讲goroutine 首先怎么定义goroutine 很简单,在方法前面加上go就可以了 func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 也可以直接这样写, 基于匿名函数 go func() { fmt.Println("hello") }() go 语言至少有一个main goroutine, 另外调用的sayhello goroutine和main gorouti…
今天这篇笔记重点讲goroutine 首先怎么定义goroutine 很简单,在方法前面加上go就可以了 func main() { go sayHello() } func sayHello() { fmt.Println("hello") } 也可以直接这样写, 基于匿名函数 go func() { fmt.Println("hello") }() go 语言至少有一个main goroutine, 另外调用的sayhello goroutine和main gorouti…
今天这篇笔记我们来学习锁:互斥锁(Mutex) 和 读写锁(RWMutex) 互斥锁(Mutex) 首先我们来看一段代码,没有加锁的情况下,两个goroutine同时修改一个变量,会发生什么 func main() { var count int increment := func() { count++ fmt.Printf(" Incrementing: %d \n", count) } decrement := func() { count-- fmt.Printf(" Decr…
用GoRoutines高性能同时进行多个Api调用 转载请注明来源:https://janrs.com/2023/03/用goroutines同时进行多个api调用/ Golang是高效的,非常高效。这种效率在很大程度上要归功于它在处理并发性问题时的独特抽象。例如,Java将其线程映射为操作系统线程,而Go使用自己的goroutines调度器将其轻量级goroutines从操作系统线程中进一步抽象出来。简而言之,Golang在使用操作系统线程方面非常节俭;如果一个goroutine被阻塞了,Go的调度器会在它的位置…
golang复合数据类型 目录 复合数据类型 数组 slice 复合数据类型 数组 长度固定,有零个或者多个元素组成。 默认情况下,数组的每个元素都被初始化为元素类型零值。 如果数组的长度位置出现...,则表示数组长度是根据初始值的个数来计算。如:q := [...]int{1, 2, 3} 如果指定索引和对应值列表的方式初始化,这种情形下初始化索引的顺序是无关紧要的,而且没有用到的索引可以省略,未指定初始值的元素将使用零值初始化。如:r := [...]int{99: -1} 定义了一个含有100个元素的数组。 …
Golang实现set 背景 Golang语言本身未实现set,但是实现了map golang的map是一种无序的键值对的集合,其中键是唯一的 而set是键的不重复的集合,因此可以用map来实现set Empty 由于map是key-value集合,如果使用map来实现set,则不需要关注value的具体类型和值 struct{}是具有零个元素的struct,struct{}的大小为0,不占用空间,因此十分适合作为value使用 type Empty struct{} Int64HashSet Golang是静态强…
go,websocket,聊天室 源码地址 https://gitee.com/bin-0821/chat-room-demo-go-websocket 关于websocket,上一篇文章讲述了如何通过websocket进行服务端与客户端的通信,本篇将会带领大家把各个websocket进行相互通信,在开始之前,请确保有理解 1 go的通道 2 go的线程 3 gin基础 事实上,websocket与websocket之间是无法进行直接相互通信的,需要我们将数据接收后,发送给另一个websocket链接,可以理解为 …
> 原文连接:[https://www.zhoubotong.site/post/67.html](https://www.zhoubotong.site/post/67.html) Go 标准库的net/url包提供的两个函可以直接检查URL合法性,不需要手动去正则匹配校验。 下面可以直接使用ParseRequestURI()函数解析URL,当然这个只会验证url格式,至于域名是否存在或注册,不会检查的,举个例子: package main import ( "fmt" "net/u…
数组实战,程序员的基本功。 实战需求: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 实战思路: 1、先声明两个数组,分别用于存储奇数和偶数, 2、然后遍历待排序的数组,根据是否可以被 2 整除,将数据分发到偶数和奇数数组, 3、最后将偶数数组追加到奇数数组之后作为新的数组返回。 马上安排! 一、工程目录 cd go-002/ 二、创建 g002.go /* * @Author: 菜鸟实战 * @FilePath: /go110/go-002…
一、Golang环境安装及配置Go Module https://go-zero.dev/cn/docs/prepare/golang-install mac OS安装Go# 下载并安装Go for Mac 验证安装结果 $ go version go version go1.15.1 darwin/amd64 linux 安装Go# 下载Go for Linux 解压压缩包至/usr/local $ tar -C /usr/local -xzf go1.15.8.linux-amd64.tar.gz 添加/usr…
go,grpc, 下载通用编译器 地址:https://github.com/protocolbuffers/protobuf/releases 选择对应的版本,解压后将文件夹下bin目录配置到环境变量 安装go编译器 $ go install google.golang.org/protobuf/cmd/protoc-gen-go $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc 创建文件夹,创建两个项目 记得 go mod init 项目名 然…