自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (1)
  • 收藏
  • 关注

原创 LQH入职第12天--启动服务

1、启动服务的主要代码func StartServer() { lis, _ := net.Listen("tcp", "127.0.0.1:8090") //创建一个grpc服务器对象 gRpcServer := grpc.NewServer() pb.RegisterHelloServiceServer(gRpcServer, &impl.HelloServiceServer{}) //开启服务端 gRpcServer.Serve(lis)}2、创建服

2020-05-29 20:48:07 560

原创 LQH入职第11天-unicode编码&return与defer的顺序&错误处理

1、ASCII编码、unicode、utf-8(1)ASCII码一共规定了128个字符的编码(2)Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。每个字符用3个字节进行存储。(3)互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。2、UTF-8编码UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示

2020-05-28 20:20:50 113

原创 LQH入职第11天--初始化日志

一、日志简介1、日志功能在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能:(1)能够将事件记录到文件中,而不是应用程序控制台。(2)日志切割-能够根据文件大小、时间或间隔等来切割日志文件。(3)支持不同的日志级别。例如INFO,DEBUG,ERROR等。(4)能够打印基本信息,如调用文件/函数名和行号,日志时间等。2、zap日志介绍1.zap是Uber开源的日志库;2.很多大的公司和小的公司都在使用;3.跟seelog、logrus等类库相比,高性能是它最突出的优势;

2020-05-28 12:21:30 125

原创 LQH入职第10天

1、go test 测试单个文件和测试单个函数1,测试单个文件,一定要带上被测试的原文件go test -v wechat_test.go wechat.go 2,测试单个方法go test -v -test.run TestRefreshAccessToken2、僵尸进程与孤儿进程我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终

2020-05-28 10:03:48 103

原创 LQH入职第10天--加载配置文件

1、获取mac地址func getMacAddr() string { interfaces, err := net.Interfaces() if err != nil { panic("get mac addr er: " + err.Error()) } macAddr := "" for _, inter := range interfaces { if inter.Name == "en0" { macAddr = inter.HardwareAddr.String()

2020-05-27 20:17:57 152

原创 LQH第10天-返回接口类型&git用法

1、返回接口类型一个函数的返回值类型声明的是一个接口的类型,但是实际在函数体内返回的却是一个结构体类型的对象。一个结构体实现了一个接口,那么函数中返回值类型为接口时,就应该返回这个结构体package mainimport ( "fmt")/**Shape接口定义两个函数:area() :计算面积circumference() :计算周长*/type Shape interface { area() float64 circumference() float64}//

2020-05-27 16:58:36 175

原创 LQH入职第10天-git的简单用法&telnet用法

1、git的简单用法(1)下载固定分支上的代码git clone -b ** https:**.git(2)下载指定tag版本的代码git clone --branch x.x.x https://xxx.xxx.com/xxx/xxx.git(3)查看所有分支git branch -a(4)查看当前分支git branch(5)切换分支git checkout 分支名(6)上传代码到指定分支git statusgit add .git commit -m"kk"git pus

2020-05-27 13:26:51 313

原创 LQH入职第10天--go服务器进程无缝重启

1、如何实现优雅地重启一个Go网络程序呢。主要要解决两个问题:进程重启不需要关闭监听的端口既有请求应当完全处理或者超时2、怎么实现无缝重启1 .不关闭现有连接,正在运行中的程序2 .新的进程启动并替代旧的进程3 .新的进程接管新的连接4 .连接要随时响应用户的请求,当用户仍在请求旧进程时要保持连接,新用户因该请求新进程5 不能出现请求被拒绝的时候3、实现步骤:err := endless.ListenAndServe("localhost:4242", mux)只需替换 http

2020-05-27 10:47:09 210

原创 go--信号

1、信号简介信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式。一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,告诉它们某个事件发生了。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。如果目标进程先前注册了某个信号的处理程序(signal handler),则此处理程序会被调用,否则缺省的处理程序被调用。2、信号的响应动作每个信号都有自己的响应动作,当接

2020-05-27 10:26:41 609

原创 go context实践学习

1、简单的例子在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。(1)第一种方案对于多

2020-05-27 09:34:30 164

原创 入职第8天

1、拉取分支上的代码git clone -b 分支2、beego orm学习user := new(User)qs = o.QueryTable(user) qs.Filter("id", 1) // WHERE id = 1qs.Filter("profile__age", 18) // WHERE profile.age = 18qs.Filter("Profile__Age", 18) // 使用字段名和 Field 名都是允许的qs.Filter("profile__age", 18

2020-05-26 09:34:20 112

原创 入职第8天-toml学习

1、TOML 的目标TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。2、TOML语法TOML 是大小写敏感的。(1)注释使用 # 表示注释(2)字符串字符串和 JSON 的定义一致,只有一点除外: TOML 要求使用 UTF-8 编码。注释以引号包裹,里面的字符必须是 UTF-8 格式。引号、反斜杠和控制字符(U+0000 到 U+001F)需要转义。(3)布尔值布尔值永远是小写。(4)日期时间使用 ISO 8601 完

2020-05-25 20:44:02 424

原创 LQH入职第五天

1、内置库模块flag学习(1)flag结构体type Flag struct {Name string // flag在命令行中的名字Usage string // 帮助信息Value Value // 要设置的值DefValue string // 默认值(文本格式),用于使用信息}(2)flag的命令行参数a、flag.TypeVar()将指定类型的名称、默认值注册到变量b、flag.Type()将指定类型的名称、默认值注册到flagfunc Int

2020-05-22 20:34:55 107

原创 LQH入职第五天--protobuf学习

1、protobuf的介绍和优缺点protof的描述首先 protobuf是一个开源项目,是goole内部久经考验的一个东西。主要用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过他更小,更快,也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。甚至可以在无需重新部署程序的情况下更新数据结构。protobuf的优点:(1)性能好/效率高时间开销: XML格式化(序列化)的开销还好;但是XML解析(反序列化)的开销就不敢恭维了。 但是protobuf在这个

2020-05-22 11:34:19 557

原创 LQH入职第四天(3)

1、map中interface的实现map记得分配内存解析出来的int类型会变成float64类型注意判断不为nil后再转换类型package mainimport ( "fmt")func main() { mapInterface := make(map[interface{}]interface{}) mapString := make(map[string]string) mapInterface["k1"] = 1 mapInterface[3] = "hel

2020-05-21 19:56:06 109 1

原创 interface学习

interface的应用场景(1)类型转换(2)实现多态1、底层分析golang中的接口分为带方法的接口和空接口。带方法的接口在底层用iface表示,空接口的底层则是eface表示。下面我们透过底层分别看一下这两种类型的接口原理。以下是接口的原型://runtime/runtime2.go//非空接口type iface struct { tab *itab data unsafe.Pointer}type itab struct { inter *int

2020-05-21 19:34:42 294

原创 LQH入职第四天(2)

1、TOML的简介TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。2、语法注释使用 # 表示注释日期时间使用 ISO 8601 完整格式。1979-05-27T07:32:00Z数组数组使用方括号包裹。空格会被忽略。元素使用逗号分隔。注意,不允许混用数据类型。[ 1, 2, 3 ][ “red”, “yellow”, “green” ][ [ 1, 2 ], [3, 4, 5] ][ [ 1, 2 ], [“a”, “

2020-05-21 18:27:24 82

原创 LQH入职第四天

1、如何MD5加密算法客户端+盐(字符串)==》MD5==》服务器端+盐(字符串)==》MD5==》数据库原理:如果是用的https则无需加密,因为https会将传输的文件加密,不用担心第三方会获取途中的数据2、MD5、对称加密、非对称加密的比较区别(1)md5是一种不可逆的加密,一定记住是不可逆的。(2)对称的加密算法,现在大多用的是AES和DES等,因为不管服务端还是客户端都用的是一个相同的密钥所以可以说是对称加密(3)非对称加密用的多的就是RSA,这个加密之所以叫非对称是因为客户端和

2020-05-21 18:04:14 96

原创 LQH入职第三天(3)

1、判断文件是否存在// PathExists 判断文件夹是否存在func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err}os.Stat用来获取文件属性os.IsNotExist根据错误信息判断文件夹是否

2020-05-21 15:09:43 122

原创 LQH入职第三天(2)

1、获取excel表的数据第一列xlsx, err := excelize.OpenFile("/Users/***/Desktop/kk.xlsx")if err != nil {fmt.Println(err)}rows := xlsx.GetRows(“Sheet1”)for _,row :=range rows{fmt.Println(row[0]);}2、go 字符串处理(1)字符串截取str := “XBodyContentX”content := str[1 : len

2020-05-21 13:50:23 138

原创 LQH入职第三天

1、远程连接mysql(1)远程连接mysql需要本地启动mysql服务(2)下载安装mysqla、下载安装homebrew运行命令/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"https://www.zhihu.com/question/35928898Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。安装包

2020-05-21 10:16:51 152

原创 LQH入职第二天(3)

1、grpc学习(1)grpc.Dial()建立连接过程(2)没有证书,所以使用grpc.WithInsecure()跳过了证书验证(3)grpc优缺点:优点:1、protobuf二进制消息,性能好/效率高(空间和时间效率都很不错) 2、proto文件生成目标代码,简单易用3、序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)4、支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级 5、支持多种语言(可以把proto文件看做IDL文

2020-05-19 19:58:26 206

原创 LQH入职第二天(2)

1、mac下terminal路径显示特别长echo $PS1cd ~vim .bash_profileexport PS1="LQH>"注:此处为想修改的值source .bash_profilehttps://blog.csdn.net/qinlulucsdn/article/details/89399753

2020-05-19 14:04:19 122

原创 LQH入职第二天

1、从gitlib上拉下代码命令:git clone https:www.com.githttps://blog.csdn.net/H_ONE_PIECE/article/details/99678096

2020-05-19 11:11:30 136

转载 HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

原文:https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A一、HTTP的历史早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript,来丰

2020-05-19 10:15:18 77

原创 LQH入职第一天

1、学习了解公司的文化与公司的发展历程。2、申请工作相关的权限。3、安装工作环境:https://studygolang.com/articles/24239安装go,配置工作路径export GOPATH=/Users/***/Desktop/goProject/srcexport GOROOT="/usr/local/go"export GOBIN=""下载goland4、了解、学习公司的技术栈...

2020-05-19 09:25:28 136

原创 面试之求两个数组的交集

求两个数组int A[m]和int B[n]的交集。例如A={1,3,1,5,2,1},B={2,1,1,4},交集为{1,1,2}面试问到这个问题第一反应是(1)暴力遍历:int* And(int A[],int m,int B[],int n){ vector<int> arr; int flag = true; for(int i=0;i<m;i++) { flag = true; for(int j = 0;j<n;j++) {

2020-05-14 20:00:36 181

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除