golang

Golang Http请求

徘徊边缘 提交于 2020-02-19 12:23:18
请求的结构 HTTP的交互以请求和响应的应答模式。go的请求我们早就见过了,handler函数的第二个参数http.Requests。其结构为: type Request struct { Method string URL *url.URL Proto string // "HTTP/1.0" ProtoMajor int // 1 ProtoMinor int // 0 Header Header Body io.ReadCloser ContentLength int64 TransferEncoding []string Close bool Host string Form url.Values PostForm url.Values MultipartForm *multipart.Form .... ctx context.Context } 从request结构可以看到,http请求的基本信息都囊括了。对于请求而言,主要关注一下请求的URL,Method,Header,Body这些结构。 URL HTTP的url请求格式为scheme://[userinfo@]host/path[?query][#fragment], go的提供了一个URL结构,用来映射HTTP的请求URL。 type URL struct { Scheme string Opaque

leetcode刷题笔记(Golang)--98. Validate Binary Search Tree

a 夏天 提交于 2020-02-19 05:56:54
98. Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node’s key. The right subtree of a node contains only nodes with keys greater than the node’s key. Both the left and right subtrees must also be binary search trees. Example 1: 2 / 1 3 Input: [2,1,3] Output: true Example 2: 5 / 1 4 / 3 6 Input: [5,1,4,null,null,3,6] Output: false Explanation: The root node’s value is 5 but its right child’s value is 4. 解题思路 var preNode * TreeNode func

Golang定时任务简单实现

大城市里の小女人 提交于 2020-02-19 04:31:40
下载cron包: go get github . com / robfig / cron 开启一个定时: 根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始。 c := cron.New()默认从分开始,所以加上cron.WithSeconds(),保证定时按照表达式字面意思执行。 func main ( ) { c := cron . New ( cron . WithSeconds ( ) ) //精确到秒 //定时任务 spec := "*/1 * * * * ?" //cron表达式,每秒一次 c . AddFunc ( spec , func ( ) { fmt . Println ( "11111" ) } ) c . Start ( ) select { } //阻塞主线程停止 } 停止定时: 由于goroutine没有线程id,所以无法从外部停止指定的定时任务。cron自带Stop()方法,支持在方法体里使用,来停止当前定时。 何时调用Stop()方法,需要根据自身业务触发,例如运行完成100次后停止,数据库当前状态为注销时停止,等等。 func main ( ) { c := cron . New ( cron . WithSeconds ( ) ) //精确到秒 //定时任务 spec := "*/1 * * * * ?" /

准备冲锋 golang入坑系列

蓝咒 提交于 2020-02-18 09:24:37
史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意。 所以换成史前摘要,反正是一个意思。 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在 这里 。放到博客园的目的是为了方便不能翻墙的同学查看。 有人说写的太肤浅没意思,我的回答是,饭有粗茶咸淡,味有酸甜苦辣,萝卜青菜各有所爱。没辙,本人也就这点能耐了,耐看您就多看点,不耐看,呵呵,那我也改不了啦。 好,史前的话说完了,下面开始史后的话。 树活一张皮,人活一张脸。文章好不好,标题最重要。光起名就想了10几分钟,中国汉语博大精深,但适合做技术类标题的真心太难想了。标题不够,写诗来凑,所以来段绕口小段子算是开场: 守法朝朝忧闷,强盗夜夜欢歌。 损人利己骑马骡,正直公平却挨饿。 修桥补路瞎眼人,杀人放火事儿真多。我到西天问我佛,佛说:我TM也没辙。 看完,乐完。收拾心情,开始继续学Golang。 在上一节,你学会了写第一个Golang程序,也知道了Golang的程序结构。我不知道你是什么技术背景,也不知道有多少编码功底。所以有的地方写的比较啰嗦,懂了,就一笑而过。不懂,就好好看一下。知识多了,不丢人。不懂装懂,最可怕。 这一节,你将接触到Golang的基本数据类型。 自打有编程语言开始,基本类型就三类:布尔,字符/字符串,数值(和其它)。不同的语言,对类型有不同的分类标准,就会衍生出更为细致的分类

Golang数组去重&切片去重

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-17 19:57:10
方法一: 定义一个新切片(数组),存放原数组的第一个元素,然后将新切片(数组)与原切片(数组)的元素一一对比,如果不同则存放在新切片(数组)中。 package main import "fmt" func main() { var arr = []string{"hello", "hi", "world", "hi", "china", "hello", "hi"} fmt.Println(RemoveRepeatedElement(arr)) } func RemoveRepeatedElement(arr []string) (newArr []string) { newArr = make([]string, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i] == arr[j] { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } 方法二: 先将原切片(数组)进行排序,在将相邻的元素进行比较,如果不同则存放在新切片(数组)中。 package main import "fmt" func main() { var arr

46-全排列

不打扰是莪最后的温柔 提交于 2020-02-17 15:06:25
不得说不说,golang用递归的时候如果参数是数组的,我真的有点懵。。以后这种情况下我都拿新的变量来接参数,不然总是会出错,而且这个错误我看不懂。。 这道题是返回全排列,做了上一道题后再来这一道,很容易想到回溯。需要注意的是回溯的时候要排除当前的这个元素,不然就会出现重复了,于是,代码就是下面这样。 这里倒没什么问题,但是,要注意的是,假如我是按照下面这种就是说错的。。就是我没有单独声明两个变量来接candidates和nums的话就会出错。。。 而且我不知道为啥错了,可能就是前面golang陷阱差不多的那个错误 来源: CSDN 作者: qq_40058686 链接: https://blog.csdn.net/qq_40058686/article/details/104356530

【golang】浅析rune数据类型

泪湿孤枕 提交于 2020-02-17 02:48:23
golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。 golang中还有一个 byte 数据类型与rune相似,它们都是用来表示字符类型的变量类型。它们的不同在于: byte 等同于int8,常用来处理ascii字符 rune 等同于int32,常用来处理unicode或utf-8字符 package main import ( "fmt" "unicode/utf8" ) func main() { var str = "hello 你好" //golang中string底层是通过byte数组实现的,座椅直接求len 实际是在按字节长度计算 所以一个汉字占3个字节算了3个长度 fmt.Println("len(str):", len(str)) //以下两种都可以得到str的字符串长度 //golang中的unicode/utf8包提供了用utf-8获取长度的方法 fmt.Println("RuneCountInString:", utf8.RuneCountInString(str)) //通过rune类型处理unicode字符 fmt.Println("rune:", len([]rune(str))) } 来源: https://www.cnblogs.com

golang ----rune数据类型

不打扰是莪最后的温柔 提交于 2020-02-17 02:47:39
查询,官方的解释如下: // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. //int32的别名,几乎在所有方面等同于int32 //它用来区分字符值和整数值 type rune = int32 我们通过一个简单的例子来看下rune的作用。先来看下下面这块代码执行结果是什么? package main import "fmt" func main() { var str = "hello 你好" fmt.Println("len(str):", len(str)) } 我们猜测结果应该是:8:5个字符1个空格2个汉字。那么正确答案是多少呢? len(str): 12  结果居然是12,这是为什么呢!? golang中string底层是通过byte数组实现的。中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。  那么?如果我们预期想得到一个字符串的长度,而不是字符串底层占得字节长度,该怎么办呢??? package main import ( "fmt" "unicode

Go - 项目收藏

痴心易碎 提交于 2020-02-16 03:46:52
1、谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 2、[知乎网] 有哪些值得学习的 Go 语言开源项目? 3、[知乎用户:hack stoic] 看过 awesome-go 项目, 汇总了很多 go 开源项目。 但是 awesome-go 收集了太全了, 而且每个项目没有描述。 因此我自己根据 go 语言中文社区提供的资料,还有互联网企业架构设计中的常见组件分类, 共精心挑选了100多个开源项目(项目不限于在github开源的项目), 分成以下十几个大类。 这个项目可以理解为互联网IT人打造的中文版 awesome-go。这个项目初衷是帮助到那些想学习和借鉴优秀golang开源项目, 和在互联网架构设计时期望快速寻找合适轮子的人。 项目地址: https:// github.com/hackstoic/go lang-open-source-projects -> 监控系统 - 容器技术 - PaaS工具 - 大数据 - 数据库技术 - 存储技术 - 分布式系统 - 消息系统 - 服务器管理 - 安全工具 - 网络工具 - Web工具 - Web框架 - 区块链技术 - 其它 4、[开源中国] 优秀的 Go 存储开源项目和库 下面推荐几款适合学习的项目: 1、cache2go: https:/

golang学习系列——22. 结构体(struct)

痞子三分冷 提交于 2020-02-16 03:23:22
目录 1. 说明 2. 结构体 2.1 定义 2.2 创建 2.3 初始化 2.4 使用 2.5 结构体转换 3. 结构体进阶 3.1 带标签的结构体 3.2 匿名字段和内嵌结构体 3.3 工厂模式 1. 说明 Go 通过类型别名和结构体的形式支持用户自定义类型,或者叫定制类型。 Go 语言可以为自定义类型定义方法, 来完成类似其他语言类的定义. 2. 结构体 2.1 定义 type identifier struct { field1 type1 field2 type2 ... } 结构体成员一般都有名字,如果字段在代码中从来也不会被用到,那么可以命名它为 _。 结构体成员类型可以是任意类型, 可以是结构体/函数或者接口. 注意:当成员类型是结构体自身的时候(如:链表/树), 必须使用指针类型. 类型 struct1 在定义它的包 pack1 中必须是唯一的,它的完全类型名是:pack1.struct1。 2.2 创建 使用 new 函数, 会给结构体变量分配内存, 并返回该类型的指针 var t *T t = new(T) //t := new(T) // 等价于 t = &T{} 直接声明变量, 也会分配内存, 并初始化为零值 var t T 2.3 初始化 type struct1 struct { age int high float name string } ms