go语言基础之append函数的使用
向切片追加元素 为切片追加新的元素是种常用的操作,为此 Go 提供了内建的append函数。内建函数的文档对此函数有详细的介绍。 func append(s []T, vs ...T) []T append的第一个参数s是一个元素类型为T的切片,其余类型为T的值将会追加到该切片的末尾。 append的结果是一个包含原切片所有元素加上新添加元素的切片。 当s的底层数组太小,不足以容纳所有给定的值时,它就会分配一个更大的数组。返回的切片会指向这个新分配的数组。 package main import...阅读全文
go log自定义日志记录
golang 自定义日志记录 var ( logFileName = flag.String("log", "server.log", "Log file name") ) func logcc() { runtime.GOMAXPROCS(runtime.NumCPU() * 2) flag.Parse() //set logfile Stdout logFile, logErr := os.OpenFile(*logFileName, os.O_CREATE|os.O_RDWR|os.O_A...阅读全文
golang标准库之flag
flag包实现了简单的命令行参数解析,支持bool、int、int64、uint、uint64、float64、string和time.Duration八种类型的命令行解析。 使用方法 注册flag流程如下: import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname") // 返回指针类型,访问时需要加* fmt.Println("ip has value ", *ip) var flagvar in...阅读全文
golang日志log
1、log简介 golang内置了log包,实现简单的日志服务。通过调用log包的函数,可以实现简单的日志打印功能。 2、log使用 log包中有3个系列的日志打印函数,分别print系列、panic系列、fatal系列。 函数系列 作用 print 单纯打印日志 panic 打印日志,抛出panic异常 fatal 打印日志,强制结束程序(os.Exit(1)),defer函数不会执行 2.1 简单示例 func main() { defer fmt.Println("panic退出前处理")...阅读全文
learn go with tests 学习笔记(三) 指针和错误
知识点 接收者 type Circle struct { Radius float64 } func (c Circle) Area() float64 { return 0 } 声明方法的语法跟函数差不多,因为他们本身就很相似。唯一的不同是方法接收者的语法 func(receiverName ReceiverType) MethodName(args) 当方法被这种类型的变量调用时,数据的引用通过变量 receiverName 获得。在其他许多编程语言中这些被隐藏起来并且通过 this 来获得...阅读全文
golang 中mongodb利用时间戳进行分组统计
话不多说,直接先上代码: // StatGameActive 游戏活跃人数 func StatGameActive(start, end int64, gameID string) map[string]int { type resp struct { Date string `bson:"date"` Count int `bson:"count"` } var ( m career.GameLoginLog data []resp rs = make(map[string]int) ) wh...阅读全文
etcd+jwt实现鉴权
本文基于搭建好etcd集群,若为搭建请移步:https://www.jianshu.com/p/ec0e4911236d etcd我们使用其存储key/value的功能,存储jwt的私有key,也可以通过etcd来更新key。 设计思路: 内部服务通过go-micro api相互访问时,为了保证访问的安全,防止来自外部的攻击,我们在服务间通过token来识别。 各服务在请求对方是在header中加入token,token使用jwt生成,jwt 的私有key来自etcd。 为什么这么做 我们使用g...阅读全文
面试必备!就凭借着这份Java 高频面试题,我拿下了阿里,字节的offer!
List 1. 为什么 arraylist 不安全? 我们查看源码发现 arraylist 的 CRUD 操作,并没有涉及到锁之类的东西。底层是数组,初始大小为 10。插入时会判断数组容量是否足够,不够的话会进行扩容。所谓扩容就是新建一个新的数组,然后将老的数据里面的元素复制到新的数组里面(所以增加较慢)。 2. CopyOnWriteArrayList 有什么特点? 它是 List 接口的一个实现类,在 java.util.concurrent(简称 JUC,后面我全部改成 juc,大家注意下...阅读全文
Golang MySQL
2839526_203626093214_2.jpg 库: database/sql : database/sql 是 golang 的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现。 database/sql库提供了一些 type。这些类型对掌握它的用法非常重要。 DB : 数据库对象。 sql.DB 类型代表了数据库。和其他语言不一样,它并是数据库连接。golang 中的连接来自内部实现的连接池,连接的建立是惰性的,当...阅读全文
Go语言HTTP请求流式写入body
背景 最近在开发一个功能时,需要通过 http 协议上报大量的日志内容,但是在 Go 标准库里的 http client 的 API 是这样的: http.NewRequest(method, url string, body io.Reader) body 是通过io.Reader接口来传递,并没有暴露一个io.Writer接口来提供写入的办法,先来看看正常情况下怎么写入一个body,示例: buf := bytes.NewBuffer([]byte("hello")) http.Post("...阅读全文
状态变换 | 我的代码没有else
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「状态模式」如何在真实业务场景中使用。 「状态模式」比较简单,就是算法的选取取决于于自己的内部状态。相较于「策略模式」算法的选取由用户决策变成内部状态决策,「策略模式」是用户(客户端)选择具体的算法,「状态模式」只是通过内...阅读全文
客户决策 | Go语言设计模式实战
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「策略模式」如何在真实业务场景中使用。 什么是「策略模式」? 「策略模式」比较简单,大家平常工作中应该经常使用到,所以本文作为复习,帮助大家温故知新。我们先来看下定义: 不同的算法按照统一的标准封装,客户端根据不同的场景,...阅读全文
状态变换 | Go语言设计模式实战
嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「状态模式」如何在真实业务场景中使用。 「状态模式」比较简单,就是算法的选取取决于于自己的内部状态。相较于「策略模式」算法的选取由用户决策变成内部状态决策,「策略模式」是用户(客户端)选择具体的算法,「状态模式」只是通过内...阅读全文
[上海]IPO之前阶段互联网公司招聘Golang开发、爬虫职位
**公司介绍:** IPO 之前互联网公司,主要业务为互联网文娱方向,公司规模超过一千人,在北美地区、北京、上海等城市均设有办公室,招聘职位会放在商业化团队内部。(职位为猎头招聘,所以不方便透露详细公司情况在招聘信息内,希望谅解) ***资深后端开发工程师 /lead (上海) * ** 工作职责: 1 、负责后端技术的探索和技术优化及公共组件的开发; 2 、负责系统的架构设计,编码实现、重构和优化; 3 、学习和研究新技术以满足产品需求。 工作...阅读全文
25. 学习 Go 协程:详解信道/通道
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutin...阅读全文
解决yaml.v2依赖问题
前言 golang 踩坑,其他博客太坑了 问题 下载 gopkg.in/yaml.v2 go get gopkg.in/yaml.v2 复制代码 使用 gopkg.in/yaml.v2 官方提供的例子: package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var data = ` a: Easy! b: c: 2 d: [3, 4] ` // Note: struct fields must be public in order for ...阅读全文
Golang基础教程——map使用篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法。 map这个数据结构我们经常使用,存储的是key-value的键值对。在C++/java当中叫做map,在Python中叫做dict。这些数据结构的名称虽然不经相同,背后的技术支撑也不一定一样,比如说C++的map是红黑树实现的,Java中的hashmap则是通过hash表。但是使用起来的方法都差不多,除了Java是通过get方法获取键值之外,C++、Pytho...阅读全文