go语言

Go语言入门: Chapter1

女生的网名这么多〃 提交于 2020-02-19 10:23:15
书籍官网: http://www.gopl.io 环境配置: https://studygolang.com/articles/8284 安装go和vscode中go的相关插件 主要命令学习: go run xx.go go build xx.go go get url 下载资源 默认下载到登陆用户的home目录 主要概念学习: 包的概念 main函数入口 标准输入输出 类型实例化 make函数 os.Stdin os.Open os.Stderr os.Args[1:] range var variable = 初始化; variable := 初始化 类型推断; var vartible type 初始化为零值 for 和 if的条件控制 没有括号; statement结尾没有分号 fmt.Fprintf的格式化输出: %v自动选择合适的格式 strings库Join方法的使用 net/http中 http.Get(url)获取响应报文 const( 常量定义) var mu sync.Mutex 互斥锁 log 日志管理 通道的感性认识 func fetch( url string, ch chan<- string) 定义函数 ch := make(chan string) go fetch(url, ch) // start a goroutime fmt.Println

Go语言学习(二)-----Hello,World

拥有回忆 提交于 2020-02-19 10:17:40
用Eclipse+Goclipse写go代码的时候,感觉有点卡,尤其是在敲完一个“.”的时候,不知道大家都木有类似的经历。 暂且就用记事本好了,反正初级阶段,接触的代码都不多。 用记事本的话,会涉及到一些命令,可以查阅go语言的command资料: http://golang.org/cmd/go/ 看到有个朋友推荐基于IntelliJ改造的go-ide,貌似不错,等有时间在下载下来试试。 下面继续Go语言的学习。 一、Go程序的代码结构 以前一章节的hello word为例: package main import ( "fmt" ) func main() { fmt.Println("Hello world!") } 1.首先是包名,没啥说的 2.然后是导入,这里导入了fmt包,在main中用到了fmt包中的Println方法。导入的包也可以设置别名的,例如: package main import a "fmt" func main(){ a.Println("import alias test!"); } 这个例子中将fmt包设置了别名a。在后面使用的时候就直接写a来代替fmt。 3.接下来是函数, 函数的声明使用关键字func。整个程序将会从为main包中的main 函数开始执行,也就是所谓的入口函数。 4.需要说明的是:每一行语句结束之后,不需要写分号。 for循环中

Go语言基础之基本数据类型

我的未来我决定 提交于 2020-02-19 09:41:40
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。 基本数据类型 整型 整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64 其中, uint8 就是我们熟知的 byte 型, int16 对应C语言中的 short 型, int64 对应C语言中的 long 型。 类型 描述 uint8 无符号 8位整型 (0 到 255) uint16 无符号 16位整型 (0 到 65535) uint32 无符号 32位整型 (0 到 4294967295) uint64 无符号 64位整型 (0 到 18446744073709551615) int8 有符号 8位整型 (-128 到 127) int16 有符号 16位整型 (-32768 到 32767) int32 有符号 32位整型 (-2147483648 到 2147483647) int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) 特殊整型 类型 描述 uint 32位操作系统上就是 uint32 ,64位操作系统上就是 uint64

Go语言特点

别说谁变了你拦得住时间么 提交于 2020-02-18 18:04:42
作者:asta谢 链接:https://www.zhihu.com/question/21409296/answer/18184584 来源:知乎 1、Go有什么优势 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。 语言层面支持并发,这个就是Go最大的特色,天生的支持并发,我曾经说过一句话,天生的基因和整容是有区别的,大家一样美丽,但是你喜欢整容的还是天生基因的美丽呢?Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。 内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大,我最爱的也是这部分。 内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单

GO_11:GO语言基础之并发concurrency

六眼飞鱼酱① 提交于 2020-02-18 09:22:36
并发Concurrency   很多人都是冲着 Go 大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine 只是由官方实现的超级“线程池”而已。不过话说回来,每个实例 4~5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销,是制造 Go 号称的高并发的根本原因。另外,goroutine 的简单易用,也在语言层面上给予了开发者巨大的遍历。   高并发当中一定要注意:并发可不是并行。   并发主要由切换时间片来实现“同时”运行,而并行则是直接利用多核实现多线程的运行,但 Go 可以设置使用核数,以发挥多核计算机的处理能力。   goroutine 奉行通过通信来共享内存,而不是共享内存来通信。Go 语言主要是通过 Channe 技术通信来实现内存的共享的,因为 channel 是一个通道,Go 是通过通道来通信进行内存数据的共享。   对于初学者,goroutine直接理解成为线程就可以了。当对一个函数调用go,启动一个goroutine的时候,就相当于起来一个线程,执行这个函数。   实际上,一个goroutine并不相当于一个线程,goroutine的出现正是为了替代原来的线程概念成为最小的调度单位。一旦运行goroutine时,先去当先线程查找,如果线程阻塞了,则被分配到空闲的线程,如果没有空闲的线程,那么就会新建一个线程。注意的是

Go语言Web框架gwk介绍 (二)

让人想犯罪 __ 提交于 2020-02-18 02:07:06
HttpResult 凡是实现了HttpResult接口的对象,都可以作为gwk返回Web客户端的内容。HttpResult接口定义非常简单,只有一个方法: type HttpResult interface { Execute(ctx *HttpContext) error } func Execute(ctx *HttpContext) error 方法定义了应该怎么样将数据返回客户端,*HttpContext 是当前http请求的上下文对象,后文会详细介绍。 gwk内置了支持几种常用的HttpResult。 ContentResult type ContentResult struct { ContentType string Data interface{} } func Content(data interface{}, contentType string) *ContentResult { return &ContentResult{ Data: data, ContentType: contentType, } } ContentResult对应了raw html数据,直接将Data原样写入到http response中,如果你定义了ContentType参数,会在写Data之前先写http header:Content-Type。

Go语言并发编程总结

你。 提交于 2020-02-16 03:47:23
Golang :不要通过共享内存来通信,而应该通过通信来共享内存。 这句风靡在Go社区的话,说的就是 goroutine中的 channel ....... 他在go并发编程中充当着 类型安全的管道作用。 1、通过golang中的 goroutine 与sync.Mutex进行 并发同步 import( "fmt" "sync" "runtime" ) var count int =0; func counter(lock * sync.Mutex){ lock.Lock() count++ fmt.Println(count) lock.Unlock() } func main(){ lock:=&sync.Mutex{} for i:=0;i<10;i++{ //传递指针是为了防止 函数内的锁和 调用锁不一致 go counter(lock) } for{ lock.Lock() c:=count lock.Unlock() ///把时间片给别的goroutine 未来某个时刻执行该routine runtime.Gosched() if c>=10{ fmt.Println("goroutine end") break } } } 2、goroutine之间通过 channel进行通信,channel是和类型相关的 能够理解为 是一种类型安全的管道。 简单的channel

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:/

深度解密Go语言之context

一个人想着一个人 提交于 2020-02-16 03:23:16
目录 什么是 context 为什么有 context context 底层实现原理 整体概览 接口 Context canceler 结构体 emptyCtx cancelCtx timerCtx valueCtx 如何使用 context 传递共享的数据 取消 goroutine 防止 goroutine 泄漏 context 真的这么好吗 总结 参考资料 Go 语言的 context 包短小精悍,非常适合新手学习。不论是它的源码还是实际使用,都值得投入时间去学习。 这篇文章依然想尝试全面、深入地去研究。文章相比往期而言,整体不长,希望你看完可以有所收获! 什么是 context Go 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。 随着 context 包的引入,标准库中很多接口因此加上了 context 参数,例如 database/sql 包。context 几乎成为了并发控制和超时控制的标准做法。 context.Context 类型的值可以协调多个 groutine 中的代码执行“取消”操作,并且可以存储键值对。最重要的是它是并发安全的。

Go语言开发教程

早过忘川 提交于 2020-02-16 03:06:37
Go语言简述 兴起:2009年Gogle发布的第二款开源编程语言 特征: 语法简单:语法标准比较严格,适合开发人员短时间高效的服务端开发。 并发模型:Goroutine是Go最显著的特征,使用类协程的方式来处理并发,搭载channel实现CSP模型 内存分配:Go选择tcmaclloc来实现高并发的内存管理和分配 垃圾回收:防止出现OOM的坑 静态链接:简化了部署和发布操作,极大程度上降低了代码发布的依赖关系 标准库:功能完善的标准库,有利于降低学习成本 工具链:无论是编译,格式化,错误检查,帮助文档和对应的测试支持都比较完善 总结: go语言作为一个现代化的开发语言,利用其高并发的特性,有利于实现服务端开发;再结合自身的语法规范性上,可以更好的为API的开发提供更好的帮助;作为一种编译性开发语言。在web开发方面还存在着一定的高效性差距;然而在通过同步方式封装异步概念来更好的处理并发,所以更适合现在的服务端开发。 Go环境安装 官方站点: https://golang.org/dl/ 官方站现在不能访问,提供如下的下载站点: https://studygolang.com/dl 开发IDE链接: http://www.jetbrains.com/go/ linux下配置Go 下载对应的: go1.9.2.linux-amd64.tar.gz tar xf go1.9.2