如何快速掌握Go语言(落地版)

GO语言出道十多年,在国内似乎不温不火。但在近一两年内,Go语言社区变得越来越活跃,吸引了大量的编码爱好者。在Github和码云上,搜一下Go相关的Project,watch和star多数都在大几百到上千。网上搜下相关职位招聘,Go相关的职位要十几到二十页,薪资也还很诱人。而且能够看到很多大厂像跳动字节、拼多多、美团、京东等都在招聘Golang开发工程师,似乎一下子变得“香”了起来。Go语言的由来Go语言亦叫Golong语言,是由谷歌公司推出。主要开发者有:肯·汤姆逊(Ken Thompson)...阅读全文

简书 2020-04-06 04:32:42 sailor_wang

聊一聊Gin Web框架之前,看一眼httprouter

HTTP Router 前言: Gin的词源是金酒, 又称琴酒, 是来自荷兰的一种烈性酒。 在Go中,有一个经常提及的web框架,就是gin web,具备高性能,可灵活定制化的特点,既然它是如此被看好,在深入了解它之前,不妨先看下他是基于什么实现的。 饮酒思源:httprouter 根据Git作者描述,Gin的高性能得益于一个叫httprouter的框架生成的,顺着源头看,我们先针对httprouter, 从HTTP路由开始,作为Gin框架的引入篇。 Router路由 在扎堆深入之前, 先梳理一...阅读全文

掘金 2020年04月05日 pixelpig

Golang入门(1):安装与配置环境变量的意义

摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者。而对于Golang来说,也需要从环境的配置开始学起。这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量GOROOT和GOPATH的配置以及这两个环境变量起到什么样的效果。 下面开始: 安装 和其他语言的安装类似,golang的安装我们也可以采用三种方式进行,从简单到复杂依次是通过可执行文件的安装、官方二进制包安装和源码编译安装。 我们可以在这里获取最新版本的go安装文件。 在这里解释一下,其实二进制...阅读全文

掘金 2020年04月05日 红鸡菌

Go 每日一库之 validator

简介 今天我们来介绍一个非常实用的库——validator。validator用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。 快速使用 先安装: $ go get gopkg.in/go-playground/validator.v10 复制代码后使用: package main import ( "fmt" "gopkg.in/go-playground/validator.v1...阅读全文

掘金 2020年04月05日 darjun

Golang | 高级数据类型

一、数组 数组作为函数参数,传值的; 只有长度和类型相同,才是同一类型,才可以相互赋值; var arr = [10]int{1, 2, 3}//声明长度才是数组,没声明长度的是切片 //切片可以append,数组不可以 //[]int 和 [10]int是不能相互赋值的。 复制代码二、切片 切片是引用类型, 什么是引用类型? "引用类型" 有两个特征:1、多个变量引用一块内存数据,不创建变量的副本,2、修改任意变量的数据,其它变量可见。 1、slice内存结构 type SliceHeader...阅读全文

掘金 2020年04月05日 _Liu_

Golang | json

一、解析JSON 1、解析JSON有两种方法 解析到结构体中(需要提前知道结构体的结构); 解析到接口; 2、JSON数据与struct字段是如何相匹配的 首先查找tag(标签)中,含有Foo的可导出的struct字段(若标签不匹配,则匹配失败) 其次查找,字段名是Foo的导出字段 最后查找类似FOO或者FoO这样的除了首字母之外其他大小写不敏感的导出字段 注意:当接收到一个很大的JSON数据结构而你只想获取其中的部分数据的时候,只需将想要的数据对应的字段名大写,即可轻松解决这个问题。 3、匹配...阅读全文

Golang | IO库

一、io 1、两个接口 Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出; Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作; 围绕io.Reader/Writer,有几个常用的实现: net.Conn, os.Stdin, os.File: 网络、标准输入输出、文件的流读取 strings.Reader: 把字符串抽象成Reader(类似流那样,这样就有各种API了) bytes.Reader: 把[]byte抽象成...阅读全文

掘金 2020年04月05日 _Liu_

Golang | 静态编译

**问题:**同样一个Hello World程序,为什么go的编译出来后,大小比C编译的大的多 因为C采用的是动态链接库形式编译,而go采用的是静态编译的形式,导致了编译后的二进制文件体积较大; 早期的计算机内存资源十分宝贵,才引入了动态装入的思想,也就产生了动态链接库; 现在的计算机内存动辄几十G,完全不用为了节省几百k或者1M内存而大费周章; go采用静态编译,不依赖任何动态链接库,可以避免各种动态链接库依赖的问题; 编译好后,只要平台是一致的(linux amd64),就可以任意部署,完全...阅读全文

Golang | HttpRouter

1、什么是httprouter httprouter谈不上是一个框架,它的性能非常优秀。完全可以用来代替默认的 ServeMux。 所以比较适合对性能要求高,路由相对简单扁平的业务,或者作为高层HTTP框架的内部模块。 httproute内部通过实现一个trie树来提高性能。 核心代码就是golang标准库中 http.Handler 接口,在该函数中实现自己的请求路由分发策略。 gorilla/mux也是一个第三方的路由器,但是性能一般 2、为什么用httprouter 说说net/http的...阅读全文

掘金 2020年04月05日 _Liu_

Golang | 插件化方案

1、什么是插件(也叫动态库) 在写C++程序时,时常需要将一个class写成DLL(动态链接库),供客户端程序调用。这样的DLL可以导出整个class,也可以导出这个class的某个方法。 通过DLL调用和把代码写在程序里调用的区别:看这个函数是否提供给别的程序调用; 别的程序肯定没法调用这个程序的某个函数,总不能把代码拷给他把,且不说可不可以拷,就算可以也麻烦阿,直接写成DLL让他自己调用去; 插件就类似dll; 通过使用插件在运行时扩展程序的功能, 而无需重新编译程序; 启动启程之后不用停止...阅读全文

掘金 2020年04月05日 _Liu_

Go 每日一库之 validator

简介 今天我们来介绍一个非常实用的库——validator。validator用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。 快速使用 先安装: $ go get gopkg.in/go-playground/validator.v10 后使用: package main import ( "fmt" "gopkg.in/go-playground/validator.v10" )...阅读全文

Segmentfault 2020-04-07 14:32:34 darjun

leetcode_328

Golang: 思路:这题O(1)空间复杂度,其实只需要拆分成两个链表,然后连接下就好了 代码如下: func oddEvenList(head *ListNode) *ListNode { nd1,nd2:=&ListNode{Val:0},&ListNode{Val:0} node1,node2,temp,flag:=nd1,nd2,head,0 for temp!=nil{ if flag%2==0{ node1.Next=temp node1=node1.Next }else{ node...阅读全文

简书 2020-04-05 20:33:06 淳属虚构

leetcode_347

Golang: 思路:topN问题,这里给出比较蠢一点的写法,时间复杂度应该为O(nlogn) 代码如下: type Ints [][]int func (s Ints) Len() int { return len(s) } func (s Ints) Less(i, j int) bool { if s[i][1] > s[j][1] { return true }else if s[i][1]==s[j][1]{ if s[i][0]<s[j][0]{ return true }else{...阅读全文

简书 2020-04-05 20:33:05 淳属虚构

9.指针

Go语言基础之指针 | Golang 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。 比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量A,把内存地址赋值给...阅读全文

简书 2020-04-05 20:33:05 雪上霜

Go语言库系列之aurora

背景介绍 今天跟大家推荐一款可以给终端输出上色的工具--aurora。 file 极速上手 准备工作 初始化项目 go mod init aurora 演示项目结构 . ├── go.mod ├── go.sum └── main.go 安装aurora包 go get -u github.com/logrusorgru/aurora 代码演示 首先引入aurora库 import . "github.com/logrusorgru/aurora" 输出一个品红颜色的内容,Magenta是以颜色...阅读全文

简书 2020-04-05 20:33:04 平也

GO 环境安装及配置

这里采用最通用的二进制包安装方式,比较通用的安装方式。 下载安装包 下载地址:https://golang.org/dl/ 选择你自己的系统对应版本,下载到你本地目录下 安装 解压:tar -C /usr/local -xzf go1.14.linux-amd64.tar.gz 说明:在mac和windows中都有可以直接点击安装的安装包,这个看个人喜好,建议采用我这种方式 配置 linux 或 Mac 编辑~/.bash_profile 添加如下变量: GOROOT=/usr/local/go...阅读全文

简书 2020-04-05 20:33:02 舍是境界

第三十一章:JWT与Golang

JWT基础概念 JWT是 json web token的简称 其中的 token 是令牌的意思, 其实这个令牌实质上是服务端生成的一段有规则的字符串 我们看看JWT官方自己对其的定义 JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a J...阅读全文

简书 2020-04-05 20:32:50 captain89