写给新手的 Go 开发指南
转眼加入蚂蚁已经三个多月,这期间主要维护一 Go 写的服务器。虽然用的时间不算长,但还是积累了一些心得体会,这里总结归纳一下,供想尝试 Go 的同学参考。
本文会依次介绍 Go 的设计理念、开发环境、语言特性。本文在谈及语言特性的时也会讨论一些 Go 的不足之处,旨在给读者提供一个全面的视角。
简介
一般来说,编程语 ...
理解Go协程与并发
协程
Go语言里创建一个协程很简单,使用go关键字就可以让一个普通方法协程化:
package main
import (
"fmt"
"time"
)
func main(){
fmt.Println("run in main coroutine.")
for i:=0; i<10; i++ {
go func(i int) {
fmt.Printf("run in child coroutine %d.\n", i)
}(i)
}
//防止子协程还没有结束主协程 ...
Go排序
本文链接:https://blog.csdn.net/u011304970/article/details/71447148
简介
Go的sort包提供了排序功能。包括基本类型的排序和自定义数据(通常是结构体数组)的排序。
基本类型的排序
sort提供了以下API对基本类型进行排序,查找
// 排序
func Ints(a []int)
func Float64s(a []float64)
func Strings(a []string)
// 判 ...
Golang的安装与环境配置(包括Go lint、Go imports、Go fmt)
Golang安装
下载地址:https://studygolang.com/dl Go语言中文网
下载后安装,win10系统中会自动配置大部分设置,linux系统请参照网上教程
GO环境变量配置:
$GOROOT=/usr/local/go GO安装目录
$G ...
vue 之this.$router.push、replace、go的区别
一、this.$router.push
说明:跳转到指定URL,向history栈添加一个新的记录,点击后退会返回至上一个页面
使用:
this.$router.push('/index')
this.$router.push({path:'/index'})
this.$router.push({path:'/index',query:{name: '123'}})
this.$router.push({name:'index',params:{name:'123'}})
二、this.$rout ...
go安装以及使用gomod、 goland设置
一、 安装go
1. 官网下载go安装包,按照指引安装即可,
2. 推荐使用go1.12版本 ,它新增加了go mod用来管理依赖,并且不需要我们再刻意设置gopath环境变量
3. 默认go会将$HOME/go目录作为gopath,所有项目下载的依赖包都会存放在这个目 ...
Go 参数传递
Go参数传递
在面试中,经常会被问起,这门语言的参数传递是值传递还是引用传递,当然,大部分情况下我们都会提前准备,有恃无恐,但还是希望能够精益求精嘛,所以针对Go语言来分析,Go传参是值传递还是引用传递。那首先,我们先来了解什么是值传递,什么是引用传递。
值传递
值传递就是函数传递的是传进来参数的一个副本。换个说法就 ...
Go内置常用包
strings 字符串函数
Contains(s, substr string) bool
字符串s是否包含字符串substr,包含返回true
Split(s, sep string) []string
将字符串s按照分隔符sep分隔为slice
Join(a []string, sep string) string
字符串拼接,把slice a通过sep链接起
Trim(s string, cutset string) string
在s字符串的头部和尾部去除cutset指 ...
Go实战--golang中使用redis(redigo和go-redis/redis)
开源库redigo的使用
github地址:
https://github.com/garyburd/redigo
文档地址:
http://godoc.org/github.com/garyburd/redigo/redis
获取:
go get github.com/garyburd/redigo/redis
连接redis
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial( ...
[系列] Go - chan 通道
目录概述声明 chan写入 chan读取 chan关闭 chan示例推荐阅读
概述
原来分享基础语法的时候,还未分享过 chan 通道,这次把它补上。
chan 可以理解为队列,遵循先进先出的规则。
在说 chan 之前,咱们先说一下 go 关键字。
在 go 关键字后面加一个函数,就可以创建一个线程,函数可以为已经写好的函数,也可以是匿名函数。
...
[golang]7种 Go 程序性能分析方法
视频信息
Seven ways to Profile Go Applicationsby Dave Cheneyat Golang UK Conf. 2016
视频:https://www.youtube.com/watch?v=2h_NFBFrciI
幻灯:http://talks.godoc.org/github.com/davecheney/presentations/seven.slide#1
方法一:time
shell 内置的 time
最简单的性能测试工具就是 sh ...
go中内存泄露的发现与排查
内存泄露
前言
场景
暂时性内存泄露
永久性内存泄露
goroutine内存泄露
发送端channel满了
接收端消费的channel为空
生产者消费者异常退出,导致channel满了或者channel为空
channel未初始化
未添加超时处理
使用pprof排查
什么是pprof
浏览器查看
命令行模式分析
定位goroutine泄露
web可视化查看
使用命令行 ...
Go组件学习——cron定时器
1 前言
转到Go已经将近三个月,写业务代码又找到了属于Go的条件反射了。
后置声明和多参数返回这些Go风格代码写起来也不会那么蹩脚,甚至还有点小适应~
反而,前几天在写Java的时候,发现Java怎么启动这么慢,Java怎么能够容忍这些用不到的代码还理直气壮的躺在那……等等,这些话在哪听过类似的???
“G ...
go mod 无法自动下载依赖包的问题
go 11以后启用了go mod功能,用于管理依赖包。
当执行go mod init生成go.mod文件之后,golang在运行、编译项目的时候,都会检查依赖并下载依赖包。
在启动了go mod之后,通过go mod下载的依赖包,不在放在GOPATH/src中,而是放到GOPATH/pkg/mod中。
比如我当前的GOPATH=/root/go,我在/root/goProjects/下新建了一个项目gPr ...
mongo-go-driver详细使用示例
package main
import (
"context"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"go.mongodb.org/mongo ...
Go-项目结构和代码组织
简介
做大量的输入,通过对比、借鉴,加上自己的经验,产出一个尽可能优的方案。
开源界优秀项目的结构示例
因为最新的 Go 版本已经使用 module 作为版本依赖,所以,所有项目的 vendor 我都忽略,建议直接使用 module 来管理依赖,而且较好的解决某些库国内访问不了的问题,参考:https://studygolang.com/topics/8737
D ...
深度解密Go语言之channel
目录并发模型并发与并行什么是 CSP什么是 channelchannel 实现 CSP为什么要 channelchannel 实现原理数据结构创建接收发送关闭channel 进阶发送和接收元素的本质资源泄漏happened before如何优雅地关闭 channel关闭的 channel 仍能读出数据channel 应用停止信号任务定时解耦生产方和消费方控制并发数总结参考资料
大家好! ...
Go 逃逸分析
Go 逃逸分析
堆和栈
要理解什么是逃逸分析会涉及堆和栈的一些基本知识,如果忘记的同学我们可以简单的回顾一下:
堆(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。堆适合不可预知大小的内存分配,这也意味着为此付出的代价是分配速度较慢,而且会形成内存碎片。
栈(Stack):由编译器进行管理,自动申 ...
Gene Ontology (GO) 注释
Gene Ontology (GO) 注释
 osted on 2017-06-11 | In 生信
相似的基因在不同物种中,其功能往往保守的。显然,需要一个统一的术语用于描述这些跨物种的同源基因及其基因产物的功能,否则,不同的实验室对相同的基因的功能的描述不同,将极大限制学术的交流。而 Gene Ontology (GO) 项目正是 ...
【Go】使用Go调用Rest接口
用SpringBoot写了一个几个简单的Rest接口,对一个计数器进行查询,设置和增加,具体可以看:
https://www.cnblogs.com/wuyizuokan/p/11117294.html
废话不多说,直接上Go代码:
package main
import (
"fmt"
"net/http"
"encoding/json"
"bytes"
"strings"
"io/ioutil"
"github.com/garyburd/redigo/redis" ...