golang

leetcode的golang实现【0008】字符串转换整数

风流意气都作罢 提交于 2020-02-04 18:05:15
题目 请你来实现一个 atoi 函数,使其能将字符串转成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找第一个非空格的字符为止。 当我们找到的第一个非空字符为正或负号时,则将该符号与之后面尽可能多的 连续 数字组合起来。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0。 说明: 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−2 31 , 2 31 − 1]。如果数值超过这个范围,请返回 INT_MAX (2 31 − 1) 或 INT_MIN (−2 31 ) 。 示例1: 输入:“42” 输出:42 示例2: 输入:“-42” 输出:-42 解释:第一个非空白字符为‘-’,是负号 示例3: 输入:“4139 with words” 输出:4139 解释:转换截止于数字‘3’,因为下一个字符不是数字 示例4: 输入:“words

golang 学习路径

独自空忆成欢 提交于 2020-02-04 06:16:57
目录 一 了解 go 二 入门教程 三 安装运行环境 & IDE(goland) 四 gotour 五 简易源码解析 六 开始写代码 七 学习框架 八 惯用法 九 调优 一 了解 go 谷歌一下 go 的全貌 二 入门教程 http://www.runoob.com/go/go-tutorial.html 三 安装运行环境 & IDE(goland) 四 gotour 个人觉得是最佳教程 https://github.com/golang/tour https://tour.golang.org/welcome/1 五 简易源码解析 https://www.w3cschool.cn/go_internals/ 六 开始写代码 里面有各种基本数据结构的基本用法: https://gobyexample.com/ kafka client: https://blog.wolfogre.com/posts/golang-consume-kafka/ 七 学习框架 go web 搭建学习 https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/ https://chai2010.cn/advanced-go-programming-book/ 八 惯用法 https://golang.org/doc

golang用slice、list当queue

时光怂恿深爱的人放手 提交于 2020-02-03 21:48:33
背景 golang没有queue这种类型,不过可以用slice、list模拟 slice当queue 声明队列 var queue []int 入队一个元素: queue = append(queue, 1) 出队一个元素: if len(queue) > 1 { queue = queue[1:] } 问题:当不断入队列时,需不停的扩容 list当queue 初始化一个队里: queue := list.New() 入队一个元素: queue.PushBack(1) 出队一个元素: if queue.Len() > 1 { queue.Remove(queue.Front()) } 实例:层次遍历二叉树 list题解 func levelOrderBottom(root *TreeNode) [][]int { var result [][]int if root == nil { return result } queue := list.New() queue.PushBack(root) for queue.Len() > 0 { curlen := queue.Len() var curList []int for i:= 0; i < curlen; i++ { curTree := queue.Remove(queue.Front()).(*TreeNode)

[ golang ] golang 语言特性

感情迁移 提交于 2020-02-03 14:00:07
一、golang 语言特性 golang 语言特性主要包括以下几点: q 自动垃圾回收 q 更丰富的内置类型 q 函数多返回值 q 错误处理 q 匿名函数和闭包 q 类型和接口 q 并发编程 q 反射 q 语言交互性 自动垃圾回收 C 语言代码不支持垃圾自动回收,会导致指针存在如下两个问题: void foo() { char * p = new char [128]; ... // 对 p 指向的内存块进行赋值 func1(p); // 使用内存指针 delete [] p; } 1 、各种非预期的原因, 比如由于开发者的疏忽导致最后的 delete 语句没有被调用,都会引发经典而恼人的内存泄露问题。假如该函数被调用得非常频繁,那么我们观察该进程执行时,会发现该进程所占用的内存会一直疯长 ,直至占用所有系统内存并导致程序崩溃,而如果泄露的是系统资源的话,那么后果还会更加严重,最终很有可能导致系统崩溃。 2 、手动管理内存的另外一个问题就是由于指针的到处传递而无法确定何时可以释放该指针所指向的内存块 。假如代码中某个位置释放了内存,而另一些地方还在使用指向这块内存的指针,那么这些指针就变成了所谓的 “ 野指针 ” ( wild pointer )或者 “ 悬空指针 ” ( dangling pointer ),对这些指针进行的任何读写操作都会导致不可预料的后果。 由于其杰出的效率,

golang并发一看就懂系列

眉间皱痕 提交于 2020-02-03 11:55:36
1.从并发模型说起 定义: 在go里面,每一个并发执行的活动成为goroutine。 详解:goroutine可以认为是轻量级的线程,与创建线程相比,创建成本和开销都很小,每个goroutine的堆栈只有几kb,并且堆栈可根据程序的需要增长和缩小(线程的堆栈需指明和固定),所以go程序从语言层面支持了高并发。 程序执行的背后:当一个程序启动的时候,只有一个goroutine来调用main函数,称它为主goroutine,新的goroutine通过go语句进行创建。 1.2多个线程创建 package main import ( "fmt" "time" ) func DelayPrint() { for i := 1; i <=5; i++ { time.Sleep(300 * time.Millisecond) fmt.Println(i) } } func HelloWorld() { fmt.Println("Hello world goroutine") } func main() { go DelayPrint() // 开启第一个goroutine go HelloWorld() // 开启第二个goroutine time.Sleep(2*time.Second) fmt.Println("main function") } 函数输出: Hello world

golang-协程理解

泄露秘密 提交于 2020-02-03 08:05:07
本文总结一下go协程的理解,如有错误望请指正。 网上都说协程是一种轻量级线程,线程又是一种轻量级的进程。这话在语言层面看来是没有错的,但它们的实现是不同的。 线程是cpu资源调度的最小单位。协程不由cpu进行调度,由应用程序进行调度,也就是由go进行调度。在go中,协程的调度也有专门的调度器。但go的协程调度器的复杂程度比cpu的线程调度器是要低许多的。 计算机进程/线程的运行是抢占式的,操作系统负责分配cpu执行时间给各个线程,当时间到达后,当前线程必须暂停进入睡眠,等待后续获得cpu执行时间再度恢复执行;当然线程也可以主动放弃cpu,进入睡眠,这一操作大多由程序员来控制。 协程实现原理 下面说下go中协程的实现原理,这些是我个人所知道的,错误之处望指正。 go中协程的实现原理还是基于线程的,大致由一个数据队列和多个线程实现。将一个个协程的代码放入数据队列,由go内部的线程去数据队列中拉取协程进行执行,协程本质还是运行在线程上的。go明面上并没有提供任何创建启动一个线程的方法,只提供了创建运行协程的方法。当用户创建的协程越来越多,线程处理不完时,go自己就会创建新的线程来执行协程。可以看到go本质上也是多线程的运行方式。但它与传统的一个请求一个线程的方式又有不同,在go中,http服务接受一个请求是创建一个协程来为这个请求服务的,可以看到,在资源利用方法

Golang - 指针与引用

天大地大妈咪最大 提交于 2020-02-01 18:51:28
​ Golang有指针 , 那么一切数据都是值传递吗 ? 都需要用户进行指针传递吗, 其实不然, 对于Go语言, 虽然有指针, 但是其也有引用传递. 是不是很绕, 因为引用传递就是指针传递哇 . 我们继续解释. 概念 在Go语言中,对于 布尔变量 或 数值类型 或 字符串类型 或 数组 以及 struct 都是按照值传递的:值在传递给函数或者方法时会被复制一份,然后方法或函数使用的是复制的这份值,也就不会对原值产生什么影响。一般情况下,对于布尔变量或数值类型或字符串类型的按值传递是非常廉价的,Go语言编译器会在传递过程中进行安全优化。 对于大字符串是这样,对于数组进行值传递也是如此。为了解决可能产生的巨大代价,Go语言使用数组切片来代替数组的使用。传递一个切片的代价跟传递字符串差不多,无论该切片的长度或容量是多大。对切片进行复制修改操作也不会像字符串那样需要创建新的切片, 因为切片是可变的,属于引用类型 。 因此以下就是重点 : 语言中的值传递类型有:基本数据类型,数组 , struct 特点 :变量直接存储值,内存通常在栈中分配,栈在函数调用完会被释放 , 在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数 , 所以他最大的好处就是不怕多线程安全性问题. 但是浪费内存 Go语言中的引用类型有:映射(map),数组切片(slice)

golang开始

 ̄綄美尐妖づ 提交于 2020-02-01 05:42:57
公司大量的产品都是建立在云的基础上,像云服务器,docker容器,有必要了解一下21世纪语言golang // Main file has non-main package or doesn't contain main function // Go的错误信息提示的很直接了当,main方法只能放在package main中,go run 是执行命令,必须要一个main用来调用,install可以直接编译成包文件,也可以编译出exe(如果有main函数的话) package main import "fmt" // go是一门强类型的语言 // go的变量必须要有明确的类型,有明确的类型之后,可以做一个静态编译,在解析的时候不需要判断相应的类型 // 编译器会自动在每一行增加分号 // go追求简洁,减少冗余变量,变量在定义之后,需要使用之后才能编译通过 func add ( a int , b int ) int { // 定义一个变量 var 变量名字 变量类型 var sum int sum = a + b return sum } func main ( ) { var c int c = add ( 5 , 6 ) fmt . Println ( "add(5,6)=" , c ) } 来源: CSDN 作者: Cocktail_py 链接: https://blog

Golang - 开篇必须吹牛逼

独自空忆成欢 提交于 2020-02-01 01:14:47
目录 Golang - 开篇必须吹牛逼 Go牛逼吗 安装环境 Golang - 开篇必须吹牛逼 (1)我们为什么要学 高并发 深度 || 广度 (2)go学习思路和目标 多打多练 掌握go语言 做一个并发相关的案例 Go牛逼吗 1. 认识go语言 go语言(或 Golang)是Google在 2007 年开发的一种开源编程语言,于2009年11月开源,2012年发布go稳定版 go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性 2. go的诞生 Robert:曾协助制作Java的HotSport编译器,制作了chrome浏览器的js引擎V8 Rob:google首席科学家,与ken共事多年,创出广泛实用的UTF-8编码 Ken:1966年加入贝尔实验室,1983年图灵奖和美国国家技术奖得主,是Unix的原创者,发明了衍生出C的B语言 3. go的优势 做高并发有巨大的优势 开发简单,开发效率堪比python 运行效率高,很适合用作中央服务器的系统编程语言 是项目转型的首选语言,很多公司在用go重构代码 提供了海量并行的支持,很适合处理游戏相关数据 4. 使用go的公司 Google https://github.com/kubernetes/kubernetes Facebook https://github

Golang gin开源实例学习

浪尽此生 提交于 2020-02-01 00:44:18
返回值 字段:code、msg、data 举例 # 失败 { "code": 10001, "msg": "已存在该标签名称", "data": null } #成功 { "code": 200, "msg": "ok", "data": null } 接口列表 模块 接口 协议 参数 返回值 示例 标签 /api/v1/tags GET name state { "code": 200, "msg": "ok", "data": { "lists": [{ "id": 4, "created_on": 1580484919, "modified_on": 1580484919, "deleted_on": 0, "name": "tag1", "created_by": "jihite", "modified_by": "", "state": 0 }], "total": 1 } } /api/v1/tags POST name created_by state { "code": 200, "msg": "ok", "data": null } /api/v1/tags/:id PUT /api/v1/tags/:id DELETE /api/v1/tags/export POST /api/v1/tags/import POST 文件 dd 来源: https://www