go语言

Day102 Go语言简介和开发环境搭建

天涯浪子 提交于 2019-12-10 17:00:09
一.Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 二.Go语言的特点 跨平台的编译型语言 语法接近C语言 管道(channel),切片(slice),并发(routine) 有垃圾回收的机制 支持面向对象和面向过程的编程模式 三.Go语言已实现的项目 docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。 kubernetes :Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡 区块链:BTCD 是用go语言实现的完整节点的比特币实现 nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息 packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者 skynet:分布式调度框架 Doozer:分布式同步工具,类似ZooKeeper Heka:mazila开源的日志处理系统 cbfs

go语言基础

隐身守侯 提交于 2019-12-10 16:59:16
1, go环境与编辑工具安装 2, hello,word 3, 数据类型 4, 变量与常量 5, 流程控制与循环语句 6, 函数 7, 包 8, 数组 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1, go环境与编辑工具安装 下载地址: https://golang.org/dl/ 下载地址: https://golang.google.cn/dl/ 下载后点击注册机,点击next,直到完成安装, 将安装完成的文件Go\bin添加到计算环境变量中即可.在命令行可以测试,输入go env.安装完成将会go语言的环境配置. 其中GOPATH:是go文件编辑存储路径, GOROOT:是go环境路径 下在Go的编辑器: https://www.jetbrains.com/go/ . 无脑下一步即可, 2, hello, word! go的第一个程序: Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 让我们来看下以上程序的各个部分

Go语言基础三

六眼飞鱼酱① 提交于 2019-12-10 15:58:36
Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: 1 var a [3]int // 定义一个长度为3元素类型为int的数组a 数组定义: 1 var 数组变量名 [元素数量]T 比如: var a [5]int , 数组的长度必须是常量,并且长度是数组类型的一部分。 一旦定义,长度不能变。 [5]int 和 [10]int 是不同的类型。 1 var a [3]int 2 var b [4]int 3 a = b //不可以这样做,因为此时a和b是不同的类型 数组可以通过下标进行访问,下标是从 0 开始,最后一个元素下标是: len-1 ,访问越界(下标在合法范围之外),则触发访问越界,会panic。 数组的初始化 数组的初始化也有很多方式。 方法一: 初 始化数组时可以使用初始化列表来设置数组元素的值。 1 func main() { 2 var testArray [3]int //数组会初始化为int类型的零值 3 var numArray = [3]int{1, 2} //使用指定的初始值完成初始化 4 var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化 5 fmt.Println(testArray) //

Go语言内置包之strconv

最后都变了- 提交于 2019-12-10 15:36:28
Go语言中 strconv 包实现了基本数据类型和其字符串表示的相互转换。 strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi() 、 Itia() 、parse系列、format系列、append系列。 更多函数请查看 官方文档 。 string与int类型转换 这一组函数是我们平时编程中用的最多的。 Atoi() Atoi() 函数用于将 字符串类型的整数转换为int类型 ,函数签名如下。 func Atoi(s string) (i int, err error) 如果传入的字符串参数无法转换为int类型,就会返回错误。 s1 := "100" i1, err := strconv.Atoi(s1) if err != nil { fmt.Println("can't convert to int") } else { fmt.Printf("type:%T value:%#v\n", i1, i1) //type:int value:100 } Itoa() Itoa() 函数用于将i nt类型数据转换为对应的字符串 表示,具体的函数签名如下。 func Itoa(i int) string 示例代码如下: i2 := 200 s2 := strconv.Itoa(i2) fmt.Printf("type:%T

go语言基于cron模块实现定时任务

时光毁灭记忆、已成空白 提交于 2019-12-10 13:08:49
最近由于工作需要写一个固定的定时任务,但是要求用go写。查了查文档,总结一下 首先安装一下cron这个模块,这个在我看来就是类似于crontab,有兴趣可以百度一下linux crontab了解详细 go get github.com/robfig/cron 代码部分是: c := cron.New() spec := "0 0 * * * " c.AddFunc(spec, check_dt) c.Start()   这部分放在main函数里面。check_dt是你要定时执行的函数,如果比较小直接func(){}就妥了。   解释一下spec,这是一个字符串来标定执行时间,本着尊重作者的精神,具体可以在看完后面几句话之后异步到 https://www.jianshu.com/p/e629d637bf4c (这篇文章介绍的比较详细,但是有些坑没说)。windows下spec这个字符串里是:秒 分 时 日 月 星期几,这样的包含6个信息的东西。但是linux下只能精确到分,也就少了一位。   然后上面那个博客里面说可以用?代替*,这个我不是很建议,还是直接*就好,主要是因为出过一个玄学问题,后续解决了会回来更新。   最后比如每min执行一次*/1 * * * *这样,依次类推,详情还是参考上面文章。 来源: https://www.cnblogs.com/XiaoBoya/p

Atitit.go语言golang语言的新的特性  attilax总结

可紊 提交于 2019-12-10 04:54:05
Atitit.go 语言 golang 语言的新的特性 attilax 总结 1 . 继承树 less 动态接口 1 1 .1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。 q 自动 垃圾回收 q 2 1 .2. 更丰富的内置类型 2 1 .3. . 更丰富的内置类型 2 1 .4. 错误处理 defer 3 1 .5. 匿名函数和闭包 q 3 1 .6. 类型和接口 非侵入型”接口的概念。 3 1 .7. q 并发 编程 4 1 .8. q 反射 4 1 .9. q 语言交互性 4 1 .10. 函数多返回值 > func getName()(firstName, middleName, lastName, nickName string){ > return "May" , "M" , "Chen" , "Babe" } //定义了一个多返回值的 函数 getName > > fn , mn , ln , nn := getName ( ) //调用赋值 > _ , _ , lastName, _ := getName() //缺省调用 5 2 . 参考 5 1. 继承树 less 动态接口 编程语言作为工具和其他所有工具的目的是一样的,就是为了提高生产力。Go语言也不例外,Go语言也有GC、也支持Erlang式的轻量级并发

【Go语言】基本的语法

て烟熏妆下的殇ゞ 提交于 2019-12-10 03:05:31
  昨天花了几个小时的时间把Go的语法过了一遍,发现Go语言的语法核心和大部分编程语言的规则还是挺相近的,差别的就是不同的书写规范。还有就是前天安装VScode编译器那个插件把人弄得恶心了,总是安装不成功,找了各种办法(包括翻墙)还是没能解决。最后也没有过于执着的继续弄了 。大概记录以下基础语法部分。 程序结构   最简单的例子:   package main # 包申明 import "fmt" # 导入的包,和py挺像的,只不过go需要用”“括起来 func main() { # 函数入口,就像c语言中的main函数一样, 另外{不能单独另起一行,会报错。 fmt.Println("Hello, World!") # 打印字符, 一行代表一个语句的结束,不用向c一样需要;符号,虽然Go也可以多条语句一行(加;号),但是并不推荐这种用法。 }   package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。   import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。   func main() 是程序开始执行的函数。main

Go语言基础之rand(随机数)包

倖福魔咒の 提交于 2019-12-10 02:50:42
在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景。 "math/rand" 包实现了伪随机数生成器。也就是生成 整形和浮点型。    该包中根据生成伪随机数是是否有种子(可以理解为初始化伪随机数),可以分为两类 :   1、有种子。通常以时钟,输入输出等特殊节点作为参数,初始化。该类型生成的随机数相比无种子时重复概率较低。   2、无种子。可以理解为此时种子为1, Seek(1)。 // 如果无种子编译后运行的结果是定值 package main import ( "fmt" "math/rand" "time" ) func main() { for i := 0; i < 10; i++ { r := rand.New(rand.NewSource(time.Now().UnixNano())) fmt.Printf("%d ", r.Int31()) } fmt.Println("") for i := 0; i < 10; i++ { fmt.Printf("%d ", rand.Int31()) } } // 输出 490307279 1883158150 444844955 1515267566 332588293 405951414 174061166 311302046 1235903925

go语言的学习之路

喜夏-厌秋 提交于 2019-12-09 23:46:05
  一.学习前言   (1)go语言的介绍      1.解释型语言:python PHP java scripy (前端)      2.编译型语言:C C++ C#(微软开发) java(sun公司开发 后来被甲骨文公司收购)       go(谷歌)      3.热门语言的法展:2009年11月初 ;使用 python:1989年;java:1990年      4.Go是静态强类型语言:强类型》》》固定类型        是一门跨平台的编译型语言    (2)补充:      (1)C开发:在window上开发,编译好的代码只能在windows 环境上使用 无法实现 跨平台       Java 横空出世:跨平台,一处代码处处使用           原理:代码编译成字节码文件: 中间件       java概念普及:         jdk: JDK,开发java程序用的开发包,JDK里面有java的运行环境(JRE),包括client和server端的。需要配置环境变量。。。。 Jdk 全写是java development kit,是java的开发工具包,里面包含了各种类库和工具         jre Jre 是java runtime environment, 是java程序的运行环境 》》》 java 的运行程序 、既然是运行,当然要包含jvm

Go语言学习笔记(七)杀手锏 Goroutine + Channel

五迷三道 提交于 2019-12-09 22:17:23
Goroutine Go语言的主要的功能在于令人简易使用的并行设计,这个方法叫做Goroutine,通过Goroutine能够让你的程序以异步的方式运行,而不需要担心一个函数导致程序中断,因此Go语言也非常地适合网络服务。 我们通过go让其中一个函数同步运行,如此就不需要等待该函数运行完后才能运行下一个函数。 func main() { // 通过 `go`,我们可以把这个函数异步执行,这样就不会阻塞往下执行。 go loop() // 执行 Other } Goroutine是类似线程的概念(但Goroutine并不是线程)。线程属于系统层面,通常来说创建一个新的线程会消耗较多的资源且管理不易。而 Goroutine就像轻量级的线程,但我们称其为并发,一个Go程序可以运行超过数万个 Goroutine,并且这些性能都是原生级的,随时都能够关闭、结束。一个核心里面可以有多个Goroutine,通过GOMAXPROCS参数你能够限制Gorotuine可以占用几个系统线程来避免失控。 在内置的官方包中也不时能够看见Goroutine的应用,像是net/http中用来监听网络服务的函数实际上是创建一个不断运行循环的Goroutine。 设置同时执行的cpu数(GOMAXPROCS) GOMAXPROCS 在调度程序优化后会去掉,默认用系统所有资源。 func main() { num :