golang简介
GO语言是Google于2009年推出的一门新的系统编程语言
特点:
静态编译
垃圾回收
简洁的符号和语法
平坦的类型系统
基于CSP的并发模型
高效简单的工具链
丰富的标准库
为什么选择go语言
编译型语言,运行速度快
静态编译没有依赖
天生支持并发,充分利用多核
大厂支持,有后台
Hello World示例:
package main //像Java一样必须指定package。 main表示二进制程序
improt "fmt" //引用fmt包
func main() { // func 相当于Python的 def 定义函数
fmt.Println("hello golang") //fmt表示格式化 Println 打印并换行
}
HTTP版本Hello World
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) { //request表示请求的页面,response表示返回的页面,把要返回的内容写在response里面。 *表示指针 w表示参数,后面是类型。r也是参数,返回的是request类型
fmt.Fprintf(w, "Hello %s", r.URL.Path) //把所要输出的东西写到这里。
} //Fprintf 第一个F表示file的意思,打印到文件句柄里,print打印,f是format的意思,按格式去打印。全的意思是按一定格式往一个文件句柄里去打印。 什么格式呢,上面就定义了这个格式,URL.Path这个格式,意思就是我在URL打点什么东西,页面就会显示什么东西。
func main() {
http.HandleFunc("/", handler) // 访问/的时候,调用函数handler。 用来处理具体的事物的。
http.ListenAndServe(":8080", nil) // 设置监听端口, nil跟python的none一个意思,表示空值。
}
TCP版helloworld
package main
import (
"fmt"
"log"
"net"
"time"
)
func handle(conn net.Conn) { //conn是个连接参数,net.Conn是conn的类型
fmt.Fprintf(conn,"%s", time.Now().String()) //把时间传给conn连接,并打印它
conn.Close() //关闭这个连接
}
func main() {
l, err := net.Listen("tcp", ":8080") //先拿net.Listen去监听TCP连接的8080端口
if err != nil { //判断是不是有错误,有错误就返回log.Fatal
log.Fatal(err)
}
for { //for 没加东西在go里面就是无限循环的意思
conn, err := l.Accept() //l.Accept()接受过来的连接
if err != nil { //判断错误是否为空
log.Fatal(err) //如果有错误返回log.Fatal这个错误,Fatal在go里面的意思是打印几条错误日志,然后退出
}
go handle(conn) //没有错就把这个连接传到handle这个函数里面。不加这个go,就只调用一次这个函数,就结束了。 go 表示开一个协程,这个协程单独去运行这个函数,去运行上面的handle参数处理。
}
}
并行和并发
并发(concurrent)不是并行(parallel)
一个例子,node.js具有并发的能力,但不能充分利用多核
写出一个能充分利用多核的程序需要很深的系统编程积淀
得益于优秀的设计,go可以轻松地写出跑满所有CPU的程序
go语言的应用
Docker,正火热的容器化几乎
kubernetes, Goole Borg的开源实现
Etcd, 类似zookeeper的高可用key-value存储
最新文章
- 《如何使用Javascript判断浏览器终端设备》
- DOJO DOM 功能
- Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie
- Contains Duplicate III
- 读javascript高级程序设计16-几条函数小技巧
- redis3.0 集群实战3 - java编程实战
- EasyUI_tree根据数据库数据生成树形结构JSON格式
- HDU 4586 A - Play the Dice 找规律
- js pix
- 【Visual C++】Windows GDI贴图闪烁解决方法
- javascript的字符串判断方法
- 并发编程(三):全视角解析volatile
- 【Tableau】电商广告投放的地域分析
- C#排队处理DEMO
- [转]Android精品开源项目整理
- Datatable数据分组
- java 盒子模型
- js实现toFixed截取效果
- Entity Framework for Oracle 基本配置
- 创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或
热门文章
- 给当当同学的random data
- vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式
- ABBYY FineReader 14.0.107.232 Enterprise 下载和安装使用
- linux 验证 NFS 是否成功
- MT41J256M16HA-125 原厂订购 现货销售
- [Poj2349]Arctic Network(二分,最小生成树)
- 06.队列、python标准库中的双端队列、迷宫问题
- 谷歌浏览器 安装 Vue.js devtools 工具
- linux运维、架构之路-linux磁盘管理
- 浅谈MySQL优化