go 学习笔记之初识 go 语言

Go 是一种开源编程语言,可以轻松构建简单,可靠,高效的软件.
摘录自 github: https://github.com/golang/go,其中官网(国外): https://golang.org 和官网(国内): https://golang.google.cn/
Go 是 Google 公司推出的静态强类型,编译型,并发型,并具有垃圾回收功能的开源编程语言,最初由 Robert Griesemer , Rob Pike ,Ken Thompson 三人主持开发,后来陆续加入其他开发者,最终于 2009 年 11 月正式开源.
创始人都是大神
Go 的三位主要创始人分别是: 罗伯特·格瑞史莫(Robert Griesemer),和肯·汤普逊(Ken Thompson)
- 罗伯特·格瑞史莫(
Robert Griesemer)
JS V8 引擎,Chubby ,Java HotSpot 虚拟机,Sawzall 语言和 Strongtalk 系统

github: https://github.com/griesemer
- 罗勃·派克(
Rob Pike)
Plan 9 操作系统和UTF-8 编码

github: https://github.com/robpike
- 肯·汤普逊(
Ken Thompson)
UNIX 操作系统 ,Plan 9 操作系统,B 语言,UTF-8 编码

github: https://github.com/ken
如此厉害的三位大牛合作创作的 Go 语言还能差到哪里去呢?

吉祥物也很可爱
原来的 logo 是一只可爱的囊地鼠,英文名叫 gopher.

新的 logo 是现代化图标,代表更快更强,体现速度和效率.

网上流传甚广的一组很萌很可爱的吉祥物,并附上 github 链接: https://github.com/tenntenn/gopher-stickers

体验 go 语言魅力
- 案例一
fmt.Println("Hello, 世界"): 输出字符串并换行
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}

- 案例二
a, b = b, a: 互换变量a和b的值,而其他语言一般都需要引入临时变量.
package main
import "fmt"
func main() {
var a = 3
var b = 4
fmt.Println(a, b)
a, b = b, a
fmt.Println(a, b)
}

- 案例三
go+chan关键字轻松完成并行计算
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(pi(5000))
}
func pi(n int) float64 {
ch := make(chan float64)
for k := 0; k <= n; k++ {
go term(ch, float64(k))
}
f := 0.0
for k := 0; k <= n; k++ {
f += <-ch
}
return f
}
func term(ch chan float64, k float64) {
ch <- 4 * math.Pow(-1, k) / (2*k + 1)
}

到底好用不好用
Go 语言是云计算时代的 C 语言也称为21 世纪的 C 语言,由此可见,Go 的地位非同一般.
Go 语言的诞生是为了提高生产效率,专门对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全,支持并行进程.
- 运行效率高,开发高效,部署简单.
运行效率高是因为编译性语言与解释性语言相比,开发高效是语法简单,部署简单是直接部署编译后的程序.
- 语言层面支持并发,易于利用多核实现并发.
不同于 php,只需要 go 配合 channel 即可完成进程或线程所做的工作.
- 内置
runtime并支持垃圾回收
类似
Java虚拟机支持垃圾回收,不必手动进行内存管理.
- 简单易学,丰富的标准库,强大的网络库.
学习成本低,语法简单但表达能力强,支持函数式编程,面向对象编程等多种编程范式.
- 内置强大的工具(
gofmt),跨平台编译,内嵌C支持.
不同的人有不同的代码风格,可转化统一风格
志同道合有几人
Docker: 是为开发人员构建和运行应用程序而构建的平台

Kubernetes: 自动化容器部署,扩展,管理的应用程序

Etcd: 分布式键值对存储系统

baidu-netdisk-downloaderx: 一款图形界面的百度网盘不限速下载器,支持Windows,Linux和Mac

pan-light: 百度网盘不限速客户端,golang + qt5, 跨平台图形界面

自学技术哪家强
- https://golang.org/ : The Go Programming Language
- https://golang.google.cn/ : The Go Programming Language
- https://tour.go-zh.org/welcome/1 : Go 语言之旅
- https://studygolang.com/ : Go语言中文网- Golang中文社区
- https://www.runoob.com/go/go-tutorial.html : Go 语言教程| 菜鸟教程
自问自答解疑惑
go和golang是什么关系?
go 是 golang 的简称,golang 是 go language 的缩写,即 go 语言.
go的常用IDE有哪些?
独立集成工具主要有 LiteIDE 和 GoLand 两种,但是常见 IDE 基本上均提供各种 Go 插件,支持 Windows ,MacOS 和 Linux 常见操作系统.
go的常见Web开发框架有哪些?
Beego ,Iris 和 Gin 等,国人用的比较多是 Beego,目前资料也比较齐全.
无总结不成文章
Go 是 Google 出品的开源编程语言,出身名门注定不凡,并且拥有十分活跃的社区环境.
国内使用 Go 语言比较早的公司主要有七牛云和 beego,其中七牛云主要是云存储方面的业务,这也正是 Go 支持高并发分布式的特色,而 Beego 是 Go 的 Web 开发框架,支持 MVC 编程模型,不愧是国人开发深受国人喜爱.
同时,今年著名的 bilibili 源代码泄露事件也让我们看到了 Go 的身影,侧面说明了 Go 越来越流行,不愧是 21 世纪的 C 语言啊!
好了,暂时没有别的废话了,本文到此为止,下一章将开始介绍 Go 语言的环境搭建与 IDE 的基本配置,敬请期待.
go 学习笔记之初识 go 语言的更多相关文章
- Go学习笔记:初识Go语言
Go语言简介 Go语言是Google(谷歌)公司开发的一款静态型.编译型并自带垃圾回收机制和并发的编程语言. Go语言的风格类似于C语言.其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括 ...
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- LevelDB学习笔记 (1):初识LevelDB
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)
在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- sqlite学习笔记7:C语言中使用sqlite之打开数据库
数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...
随机推荐
- C#高性能大容量SOCKET并发(四):缓存设计
原文:C#高性能大容量SOCKET并发(四):缓存设计 在编写服务端大并发的应用程序,需要非常注意缓存设计,缓存的设计是一个折衷的结果,需要通过并发测试反复验证.有很多服务程序是在启动时申请足够的内存 ...
- Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器。
Long Shadows Generate是一款在线使用纯CSS3实现长阴影的效果,一款强大的扁平化长投影制造器. Long Shadows Generate 彩蛋爆料直击现场 Long Shadow ...
- 关于防范csrf攻击基于token鉴权
在web开发中,之前都使用cookie + session方式来实现身份认证鉴权.但是现在前后端分离,以及终端有可能不支持cookie的情况下,一般都采用token方式.现在系统设计思路如下: 服务端 ...
- php一个不错的分页
1.分页源码 <?php class PageView{ /**页码**/ public $pageNo = 1; /**页大小**/ public $pageSize = 20; /**共多少 ...
- Anaconada安装
目录 Anaconda介绍 Anaconda下载 安装Anaconda 配置环境变量 管理虚拟环境 activate 切换环境 卸载环境 关于环境总结 安装第三方包 卸载第三方包 查看环境包信息 导入 ...
- 深入V8引擎-AST(2)
先声明一下,这种长系列的大块头博客只能保证尽可能的深入到每一行源码,有些代码我不乐意深究就写个注释说明一下作用.另外,由于本地整理的比较好,博客就随心写了. 整个Compile过程目前只看到asmjs ...
- 短视频技术详解:Android端的短视频开发技术
在 <如何快速实现移动端短视频功能?>中,我们主要介绍了当前短视频的大热趋势以及开发一个短视频应用所涉及到的功能和业务.在本篇文章中,我们主要谈一谈短视频在Android端上的具体实现技术 ...
- C++程序设计2(侯捷video all)
一.转换函数Conversion function(video2) 一个类型的对象,使用转换函数可以转换为另一种类型的对象. 例如一个分数,理应该可以转换为一个double数,我们用以下转换函数来实现 ...
- spring 5.x 系列第8篇 —— 整合Redis客户端 Jedis和Redisson (代码配置方式)
文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件和其映射类 2.2 ...
- 网络学习笔记(三):HTTP缓存
HTTP缓存是一种保存资源副本并在下次请求时直接使用该副本的技术,合理的使用缓存可以有效的提升web性能. 浏览器将js文件.css文件.图片等资源缓存,当下次请求这些资源时,可以不发送网络请 ...