视频版 |《老运维带你用 Golang 飞》

Outline

  • What is Golang
  • Syntax
  • Concurrent
  • Example
  • Docker
  • Useful tools

History

  • Design began in late 2007 by Google.
  • Authors:
  • Rob Pike (Bell Lab & UTF-8)
  • Ken Thompson (UNIX & C & Turning Award)
  • Robert Griesemer (Chrome JavaScript V8)

  

Go Users

Google, Facebook, Github, Dropbox, Docker, CloudFlare, DigitalOcean, Baidu BFE, 许式伟…

https://github.com/golang/go/wiki/GoUsers

What is go?

  • open source
  • concurrent
  • garbage-collected
  • efficient
  • scalable
  • simple
  • http://golang.org
  • benchmark

Declarations

  • C syntax

  • Go syntax

For more information:

golang.org/s/decl-syntax

Function syntax

  • Function on type T:

  • Method of type T (Class Method?):

  • Variable (closure) of type T:

  • Multi return


Naming

  • Simple rule:

    upper case initial letter: Name is visible to clients of package

    otherwise: name (or _Name) is not visible to clients of package

  • Applies to variables, types, functions, methods, constants, fields....
  • That Is It.

Pointers and Structs

  • Go has pointers. A pointer holds the memory address of a variable.

Reflection

Garbage collection

  • In C:

Auto GC (Mark and Sweep), stop-the-world(-_-)

see more: http://adamansky.bitbucket.org/slides/gc/index.html?full#1

  • Problems:

Memory leak  or Wild pointer ?


Defer


  • A defer statement defers the execution of a function until the surrounding function returns.

  • Defer StacK

Concurrent


  • In C:

process, thread, libevent

  • In Go:

goroutine

channel

select

waitGroup

Goroutine


  • A goroutine is a lightweight thread managed by the Go runtime.
  • Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won‘t need them much in Go as there are other primitives. (channel & select)
  • See more: https://tour.golang.org/concurrency/1
  • go func() {}
  • coroutine Python?

Channel


  • Channels are a typed conduit through which you can send and receive values with the channel operator, <-.

  • Don‘t communicate by sharing memory, Share memory by communicating(No Lock !)
  • http://my.oschina.net/clopopo/blog/141873

Dead lock



Buffered channel

  • Buffered channel (like Queue in Python, thread safe FIFO)
  • Sends to a buffered channel block only when the buffer is full.
  • Receives to block when the buffer is empty.

Select

  • The select statement lets a goroutine wait on multiple communication operations.
  • A select blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready.
  • The default case in a select is run if no other case is ready.


WaitGroup


  • A WaitGroup waits for a collection of goroutines to finish.
  • Add()
  • Wait()
  • Done()
  • https://github.com/wusuopubupt/go_spider/blob/master/src/spider/spider.go


Example


  • http://eleme.io/blog/2014/goroutine-1/
  • https://github.com/wusuopubupt/go_spider
  • Docker


Docker -- A Go Project


  • Docker enables developers and IT admins to build, ship and run any application, anywhere.
  • written in the Golang, released as open source in 2013
  • Resource isolation(Namespaces, Cgroups, Libcontainer)
  • https://en.wikipedia.org/wiki/Docker_(software)
  • https://www.docker.com/
  • http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation


Docker basic concept


  • Image (https://hub.docker.com)
  • container
  • repository


Dockerfile

  • docker build -t 4paradigm/dango-base-lastest .     (-t == --tag)
  • docker run -t -i 4paradigm/dango-base-lastest /bin/bash  (-t == --tyy),  ip conflict?
  • See more: https://docs.docker.com/engine/reference/builder/

Dokcer Commands

  • Image
  • docker images
  • docker build
  • docker rmi <image name>
  • docker export
  • Container
  • docker ps -a
  • docker run/restart/start/stop <container name>
  • docker logs < container name>
  • docker exec -ti $1 bash
  • Repository
  • docker login
  • docker search
  • docker push/pull
  • https://docs.docker.com/engine/reference/commandline/

Useful tools 4 Go

  • gofmt
  • go build|run|get|test
  • godoc
  • vim + YCM

What‘s next?


  • Try It!
  • tour.golang.org
  • golang.org/wiki/Learn
  • golang.org/project

视频版

百度网盘链接地址:http://pan.baidu.com/s/1pL8zPcn

密码:e4vk

时间: 2024-10-06 00:03:08

视频版 |《老运维带你用 Golang 飞》的相关文章

转载:一个老运维的心里话

https://tieba.baidu.com/p/4356267156?red_tag=3195727331 功能介绍 互联网技术分享平台,分享的力量.帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说.熟悉运维自动化,擅长架构设计,熟悉各种云平台技术和产品.负责设计开发运维平台管理体系. 正文其实我本没有想过要写这篇文字,但有次和业内的一位技术朋友聊起当前互联网技术的话题,聊了很多东西,从互联网产业的崛起.蓬勃发展.未来的走向又聊到互联网技术起步.变化.开源.融合..

[转载]系统运维秘诀大分享专题

系统运维秘诀大分享专题 本专题整合收录了有关系统运维/系统管理员工作和个人成长方面的各种心得分享.经验总结.以及必须牢记的一些准则,适合所有在运维领域有追求的技术人阅读.有些分享的层次比较深,有些则是运维的基础课,但通过翻看他人的心得,相信你总能有所收获. 1 Dormando的系统运维秘诀三部曲... 4 1.1 技术篇... 4 1.1.1 为变化而设计.... 4 1.1.2 使用自动的,可重复的构建过程.... 4 1.1.3 使用冗余.... 4 1.1.4 使用备份.... 5 1.

部队-&gt;运维-&gt;分享-&gt;讲师历程

2015年7月1日,51CTO学院成立2周年,几乎也是我发布第一个课程的一周年纪念.这是一个值得纪念的日子,祝愿在以后的日子里能伴随着51CTO学院一起进步,共同成长. 之前想写一个我的IT十年回顾,一直没有机会,借助这个机会谈谈我从部队走向51CTO学院讲师的心路历程,可能已经没有那么多优雅的文字和充满激情的情节,但是一路走来,回想起来,思绪万千....... 2005年-2008年:部队的Linux之旅     2005-2007年我从Windows2003转向Redhat9.0,这其中有一

从十年运维看“云”维趋势

又到岁末,就这样默默地在运维行业里已有十年余.总是想找个机会总过去展望未来,并给刚上路或是在路上的运维朋友交流一些观点.虽然现在比前几年轻松,但是惰性也随之有增,所以从未实际提笔.但是因为脑子里一直记着这事儿,所以其实一直在脑子中整理文字和框架,结合工作实际,很多观点也经受了验证,并非侃侃而谈.终于因为圣诞假期开始,趁着回国途中有集中的时间写出来,其实也是为了在万米高空消磨消磨时间. 笔者目前在北美某著名游戏公司从事运维工作,十年间发表过不少文章,著有<Linux系统命令及Shell脚本实践指南

Linux系统运维与架构设计

一 本章概览 介绍Linux系统运维与架构设计的方方面面 二 Linux基础入门 认识计算机核心硬件和服务器 Linux发展历史.系统组成.应用领域以及发行版 搭建运维环境:VMWareWorkStation.SecureCRT的使用 Linux系统的基本使用 Shell入门以及命令概述 三 Linux系统管理 文件目录管理 用户管理 权限管理 VIM编辑器的使用 文档压缩打包 程序包管理 网络管理 文件系统管理 内存管理 系统管理(监控.环境变量) 安全管理(selinux,iptables)

最简单也最难:运维监控的最后1公里

谈运维我们不得不提监控,监控是运维的起点,也是难点.随着IT架构逐渐复杂化,从前端到IT底层,中间涉及浏览器.网络.服务器.操作系统.中间件.应用.数据库等,每个环节厂商不尽相同.当出现异常需要定位哪个环节出了问题的时候,排查就耗时耗力,若使用优云监控产品,以上难题不再是问题.优云全栈运维监控覆盖了所有环节的监控,真正做到监控无盲区,运维无隐患. 运维最后一公里是指高度可视化.优云除了提升监控能力还注重可视化,深知可视化是运维的亮点更是本质,为了让每个环节监控的数据更好的展现出来,优云拥有一批在

【干货】马哥linux运维学院公开课-第一季

一大波高质量Linux运维和自动化运维公开课正在来袭,你准备好了么? 2016为了感谢广大同仁对马哥linux运维学院的支持,经过内部商讨,特推出一系列公开课来助力大家在职场中的发展!接下来就跟随小编来瞧瞧马哥linux运维学院都为大家呈上了一份什么样的神秘干货大礼包??? 想要参加公开课的小伙伴们请加群:339184057公开课报名链接:http://ke.qq.com/course/119808 课程详情 O2O业务的运维挑战和解决之道 AWK企业实战案例分享 深入浅出三剑客-grep/se

运维学python之爬虫高级篇(六)scrapy模拟登陆

上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为很多应用要解析到本地.oracle没有这个解析可能启动不了. 2.注释掉UUID以及MAC地址,需要绑定网卡的时候,这个可能会有影响. 3.磁盘满了无法启动,  var下木有空间,无法创创建PID等文件,导致文件无法启动,按e   进入single  然后b  重启进入单用户模式. 4.ssh登陆系