golang简介
Posted green-frog-2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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存储
以上是关于golang简介的主要内容,如果未能解决你的问题,请参考以下文章