• 首页

go语言 sync 包简介及使用

sync 包的简介 Go语言的sync包提供了常见的并发编程控制锁; 在并发编程中锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱; golang 中使用 go 语句来开启一个新的协程。 goroutine 是非常轻量的,除了给它分配栈空间,它所占用的内存空间是微乎其微的; 但当多个 goroutine 同时进行处理的时候,就会遇到比如同时抢占一个资源,某个 goroutine 等待另一个 goroutine 处理完某一个步骤之后才能继续的需求。 在 golang 的官方文档上,作者明确指出,golang 并不希望依靠共享内存的方式进行进程的协同操作。 而是希

国内镜像 中科大 Docker Hub 源使用

地址 https://docker.mirrors.ustc.edu.cn/ #说明 Docker Hub 镜像缓存 使用说明 注意 由于访问原始站点的网络带宽等条件的限制,导致 Docker Hub, Google Container Registry (gcr.io) 与 Quay Container Registry (quay.io) 的镜像缓存处于基本不可用的状态。故从 2020 年 4 月起,从科大校外对 Docker Hub 镜像缓存的访问会被 302 重定向至其他国内 Docker Hub 镜像源。从 2020 年 8 月 16 日起,从科大校外对 Google Contain

centos 系统上安装 yarn

yarn是什么 Yarn是一个用于node.js应用程序的高级包管理软件。它是任意一个其他Nodejs包管理器的快速、安全和可靠的替代方案,比npm更好的解决包依赖问题。本篇文章介绍在CentOS,Redhat和Fedora系统上安装Yarn的方法。 centos下如何安装 使用NPM安装Yarn Yarn组件可与NPM一起安装。只需运行以下命令即可全局安装Yarn。另外,没有-g,就是仅为当前项目安装。 $ sudo npm install yarn -g 用脚本安装Yarn 这是安装Yarn最为推荐的方法。这将下载yarn档案并在home的.yarn目录下提取。脚本还设置了PATH环境

homebrew update 卡住,github下载非常慢

解决Homebrew 更新卡住的问题 brew install 安装软件时会遇到先执行 update , 而整个update 过程brew 会从 github上下载代码, github 用的aws ,而aws在我们的网络环境下访问都非常非常慢, 导致 update 会被卡住,或者几k的速度在下载. 给brew 换源 这里推荐试用 中科大的源, 之前换过 阿里的镜像, 但是 阿里镜像里只有brew-core 没有brew-cask , 导致 update 过程中,依然从 github 拉取 brew-cask的代码, 就算单独把brew-cask 的源换成中科大镜像依然无用. 所以干脆全部换成

mac 下修改 docker 国内镜像

mac下安装 docker 官网下载地址: https://docs.docker.com/docker-for-mac/install/ 安装启动 docker 左小角显示 docker running shell 执行 docker version $ docker version Client: Docker Engine - Community Cloud integration: 1.0.4 Version: 20.10.0 API version: 1.41 Go version: go1.13.15 Git commit:

mongd 解决“Error parsing YAML config file: yaml-cpp: error

mongod 启动报错 $ mongod --config /usr/local/etc/mongod.conf Error parsing YAML config file: yaml-cpp: error at line 9, column 9: illegal map value try 'mongod --help' for more information 报错原因 mongodb 3.0之后的配置文件采用YAML格式; YAML 格式约定如下: : 形式定义配置文件 : 后面如果有 key 前面有空格(一般是2个)不能是tab键 , value 前面必须有一个空格 :

go 语言实践: switch 语句的使用

go语言中的 switch 可以一个条件一个分支 switch flag { case 1: fmt.Println("one") case 2: fmt.Println("two") } 可以多条件写一个分支 switch flag { case 1: fmt.Println("one") case 2,3,4: fmt.Println("two,three,four") } 可以把判断条件写到case 后面 switch { case flag == 1:

go 语言实践:欧几里得算法-求最大公约数

go语言实现欧几里得算法 求2个数的最大公约数 辗转相除法 大数对小数求余 余数不为零时,小数对余数求余 余数为零时,小数就是俩个数的最大公约数 package main import "fmt" func divisor(min, max int) (maxDivisor int) { //用大数对小数取余 complement := max % min //余数不为零,小数作为大数,将余数作为小数,大数对小数递归求余 if complement != 0 { maxDivisor = divisor(complement, min)

go 语言实践:随机数生成

go语言中的随机数 math/rand包操作随机数, rand.Seed(seedNum)方法设定种子值, rand.Intn(n)获取一个小于n的随机数,[ 同一个种子值,生成的随机数是确定的 ] 所以go语言中的随机数取决于种子的随机性, 一般情况下可以采用系统时间的毫秒数作为种子值. 当种子值相同时 package main import ( "fmt" "math/rand" ) func main() { rand.Seed(888) //获取8个小于1000的随机数 for i := 0; i < 8; i++ {

Docker Compose 事半功倍,容器部署更方便简洁

Docker Compose是什么 Docker Compose 是一个工具,这个工具可以通过一个 yml 文件定义多容器的 Docker 应用. 通过一条命令就可以根据 yml 文件的定义去创建或者管理多个容器. 什么是yml文件 YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式, YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互. 如何定义yml文件 新建 docker-compose.yml 文件 version: '3.7' services: mongodb: contain

go 语言实践:冒泡排序法 和 选择排序法对比

go 冒泡排序 & 选择排序 冒泡排序 将每一个数同相邻的下一个数对比,如果比下一个数大则交换位置. func bubble(list []int) []int { //用来拍断是否完成排序 flag := true len := len(list) for i := 0; i < len-1; i++ { //预设没有发生交换 flag=true,当发生交换,flag=false flag = true for j := 0; j < len-1-i; j++ {

go 语言中的错误捕捉 panic 以及 recover修复错误

go语言中的错误处理 go语言中遇到错误,一般直接返回 error ,如果手动无法处理的 error ,可以直接触发 panic . 当遇到一些严重错误,比如数组,切片越界等错误,直接 panic 也会被触发. panic 一但被触发,当前执行的程序会退出. package main import ( "fmt" ) func main() { fmt.Println("before panic") panic("program crash") fmt.Println("after panic") } 执行结果: ./prog.go:24:2:

Go http.StripPrefix 和 File Server的使用

代码的整洁和进行合理的分流 http.StripPrefix函数的作用之一,就是在将请求定向到你通过参数指定的请求处理处之前,将特定的prefix从URL中过滤出去. 下面是一个浏览器或HTTP客户端请求资源的例子: /assets/js/page.min.js StripPrefix 函数将会过滤掉/assets/, 并将修改过的请求定向到http.FileServer所返回的Handler中去,因此请求的资源将会是: /js/page.min.js http.FileServer 返回的Handler将会进行查找,并将与文件夹或文件系统有关的内容以参数的形式返回给你 (在这里你将&

go 语言中如何实现继承

回顾 一.之前说到了go中如何实现类 传送门 二.go中如何实现类的封装 传送门 go 语言中如何实现继承 package main import ( "fmt" ) type people struct { name string age int } func (p people) GetName() string { return p.name } type Student struct { people grade int } func (s Student) GetGrade() int { return s.gr

go 语言中类的封装

go中的类的定义和使用 之前一篇博客详细介绍了go语言中如何定义类,使用类, 点击查看 go语言中如何实现封装? go是直接支持strut的封装的,go语言的可见性是根据首字母大小写来实现的. 首字母大写表示对外部可见,类似C#中的public,首字母小写,对外部不可见,类似C#中的private. package main import ( "fmt" ) type Student struct { name string age int } func (s Student) GetName() string { return s.name } func

go 语言中的类的实现,类的属性和方法

go语言中的类是如何实现的? go语言中严格意义来说是没有类的概念,当然也不存在面向对象的封装和继承, 但是go语言可以通过struct 结构体来模拟类的概念,试的我们用起来像是一种类. struct 如何来实现面向对象的类? struct 首先是一种类型,值类型.它是由一系列具有相同类型或不同类型的数据构成的数据集合. 和c语言的struct很像,用起来就相当于java / c# 中的的class . struct 的定义 下面的内容中我们直接把struct 称呼为 "类" type student struct { name string age

go语言换行的地方可以用分号替代吗?

go语言中默认用换行来表示语句结束,那么能不能用分号来代替换行呢? package main import ( "fmt" ) func main() { fmt.Println("hello world") main函数的左花括号必须在main同行,否则出错. 为什么go语言要这么玩呢? 这是为了在语言层面强制让所有使用者统一编程规范. 看看go圣经中的原话, 我来手动打一下: In effect, newlines following certain tokens are converted into semicolons, so where newline

Docker 容器之间互访的几种形式

容器之间为什么要互访 docker容器与容器之间是隔离状态,不能互相访问,但如果有些依赖关系的服务要如何访问对方呢? 介绍三种方法来解决容器互访问题. 虚拟IP访问 安装docker时,docker会默认创建一个内部的桥接网络docker0,每创建一个容器分配一个虚拟网卡,容器之间可以根据ip互相访问。 运行一个centos镜像, 查看ip地址得到:192.168.32.2 首先通过 docker ps 查看当前电脑上运行的容器实例 $ docker ps CONTAINER ID IMAGE COMMAND CREATE

docker 创建mongodb 容器 映射本地数据目录和配置文件

docker 创建mongodb 容器 安装 mongodb 镜像 拉取官方镜像 docker pull mongo 本地创建数据库目录 # zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:03:15] $ sudo mkdir mongodb 不要忘记给目录 777 权限 sudo chmod 777 mongodb 本地配置文件目录 # zhangzhi @ ZhangZhi-MacBook-Pro in ~ [9:27:24] C:130 $ sudo mkdir docker/mongodb 不要忘记给目录 777 权限 sudo chmod

sequelize 5.0中文文档 对象实例操作与数据持久化 (五) - node.js语言最好用的orm

前言 在面向对象语言中,我们很容易理解对象及对象的实例, 但是sequelize ORM框架中我们通常会说成模型和实例. 模型可以理解为对一个表结构的抽象定义,好比工厂的一条流水线, 实例可以理解为表结构中一个具体的数据结构,好比流水线生产出来的一个商品. 在sequelize 类中有一些api是针对实例操作 (可以理解成内存中的改变) 实例持久化以后,数据才写入我们物理存储单元中 (比如具体的数据库) 新建实例并持久化 定义模型 const Task = sequelize.define('task', { title: Sequelize.STRING, rating: { type

sequelize 5.0中文文档 5.0版本中升级,替换,移除的内容 (四) - node.js语言最好用的orm

前言 最近把代码进行升级,原来旧版本的Sequelize 也一下升级的V5.0版本, 为了学习使用方便,统一把 Sequelize 5.0 更新,移除,替换,升级的内容标记一下. 对node的支持 Sequelize v5 将仅支持 Node 6 以及更高版本 安全的运算符 在 v4 中,就开始收到弃用警告 String based operators are now deprecated (基于字符串的运算符现在已弃用). 同时也介绍了运算符的概念.这些运算符是一些防止散列注入攻击的符号. 在V5 版本中,运算符默认启用. 你仍然可以通过在 operatorsAliases 中传递一个运算

Linux下强大的curl 命令行工具

curl curl是linux系统中一个利用URL规则在命令行下工作的文件传输工具. 语法 curl [option] [url] 参数 -A/--user-agent <string> 设置用户代理发送给服务器 -b/--cookie <name=string/file> cookie字符串或文件读取位置 -c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中 -C/--continue-at <offset> 断

sequelize 5.0中文文档 定义模型define model和验证 (二) - node.js语言最好用的orm

前言 在使用sequelize ORM框架时一定要先创建模型对象. 对象模型对应的就是数据库中表,字段及字段类型等的定义. 我们一般的做法是先在nodejs中将对象创建出来,然后调用Sequelize的同步方法,将数据库自动创建出来. 这样就避免了既要写代码建表,又要手工创建数据库中的表的操作. 只需要单独考虑代码中的对象类型等属性就好了. 如果数据库中已经建好了表,并且不能删除,这个时候就不能自动创建了,因为创建的时候会删除掉旧的数据 定义模型 名称类型说明 modelNameString模型名,在sequelize.models属性中会使用这个名称; 如果没有在options中指定

sequelize 5.0中文文档连接数据源及数据类型 (一) - node.js语言最好用的orm

前言 Node.js 社区中,sequelize 应该是最好用的 ORM 框架,它支持多种数据库,包括 PostgreSQL ,MySQL ,SQLite 和 MSSQL. 安装 npm install --save sequelize 在你的项目中使用了哪种数据源,那么对应的去安装此数据源的驱动程序: $ npm install --save pg pg-hstore # PostgreSQL $ npm install --save mysql2 # MySQL $ npm install --save mariadb # Mariadb (mysql的孪生兄弟) $ n

docker 查看日志输入

docker logs-查看docker容器日志 命令格式: $ docker logs [OPTIONS] CONTAINER Options: --details 显示更多的信息 -f, --follow 跟踪实时日志 --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all -t, --timestamps 显示时间戳 --until st

Typora搭配PicGo自定义图床 - 让你的markdown飞起来

前言 markdown的流行让大部分人脱离UI编辑专心致志写作,体验非常棒. 但是市场主流的markdown编辑器在上传附件功能方面一直都没有太得心应手的工具. 今天给大家推荐typora编辑器搭配PicGo自定义图床,让你随心所欲文档中插入图片. typora Typora是一款由Abner Lee开发的轻量级Markdown编辑器,适用于OS X、Windows和Linux三种操作系统,是一款免费软件。与其他Markdown编辑器不同的是,Typora没有采用源代码和预览双栏显示的方式,而是采用所见即所得的编辑方式,实现了即时预览的功能,但也可切换至源代码编辑模式。 ---维基百科 下载

levelup 4.x版本升级node.js下leveldb数据库对照文档

levelup 是一个由谷歌构建的简单 key-value 数据库. 它在 Google Chrome 和许多其他产品中使用,使用 fast Snappy算法,可以将任意字节数组作为键和值. leveldown 它提供了一个纯 C++ 绑定到 LevelDB. 在浏览器或者 memdown 中,有许多可选存储( 如 level.js ),用于内存存储中的. 它们通常支持键和值的字符串和缓冲区. 对于更丰富的数据类型集,可以用 encoding-down 包装存储. level 它可以看做是包的一个集合,捆绑了 levelup , leveldown 和 encoding-down. 它的

apt-get update 太慢,如何解决

apt-get update 太慢如何换源 备份系统source文件 sudo cp sources.list sources.list.bak 替换source内容 打开source文件,替换内容 # deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb

回到顶部