内容简介:目录google于2009年推出的系统编程语言特点:
目录
1、golang简介
google于2009年推出的系统编程语言
特点:
静态编译,没有依赖
垃圾回收
简洁的符号和语法
平坦的类型系统
基于CSP的并发模型,充分利用多核
高效简单的 工具 链
丰富的标准库
hello world:
package main import "fmt" func main() { fmt.Println("hello world") }
web编程:
package main import ( "fmt" "net/http" ) #w http.ResponseWriter左边是参数名字,右边是类型;*是指针 func handler(w http.ResponseWriter,r *http.Request) { fmt.Fprintf(w,"Hello world!") #Fprintf意思是把"Hello world!"写到w对象 } func main() { http.HandleFunc("/",handler) http.ListenAndServe(":8080",nil) }
C10K问题:
func handle(conn net.Conn) { fmt.Fprintf(conn, "%s", time.Now().String()) conn.Close() } func main() { l,err := net.Listen("tcp",":8080") if err != nil { log.Fatal(err) } for { conn,err := l.Accept() if err != nil { log.Fatal(err) } go handle(conn) #开启协程,并发 } }
并行和并发:
并发(concurrent)不是并行(parallel):node.js具有并发的能力,但不能充分利用多核(并行)
写出一个能充分利用多核的程序需要很深的系统编程积淀
得益于优秀的设计,go可以轻松地写出跑满所有cpu的程序
python多线程是伪线程(受一个全局锁限制),不能利用多核
python多进程呢?
python的协程呢?
2、安装
软件包:
go1.10.1.windows-amd64.zip win
go1.10.1.darwin-amd64.tar.gz OS
配置环境变量:
GOROOT放置 go 的标准库和工具链 $HOME/local/go (linux,mac) c:\local\go (win) GOPATH放置第三方代码和自己的工程 $HOME/go (linux,mac) c:\go (win) PATH export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
vim hello.go
package main import "fmt" func main() { fmt.Println("hello world") }
go run hello.go #会打印出hello world
go build hello.go #会生成一个hello.exe可执行文件,在cmd下执行,和go run的效果一样
linux或者mac上,可以执行:
GOOS=darwin go build -o hello.mac hello.go
GOOS=windows go build -o hello.exe hello.go
GOOS=linux go build -o hello.linux hello.go
windows上:
C:\go>set GOOS=windows
C:\go>go build hello.go #设置环境变量,然后编译
安装atom
安装插件go-plus
gofmt -w hello.go #将代码格式化
手动安装工具:
goimports -w hello.go #自动引用包,需要额外安装 cd $GOPATH && mkdir -p src/golang.org/x cd $GOPATH/src/golang.org/x git clone https://github.com/golang/tools.git #可以去github上下载,然后解压,并重命名为tools go install golang.org/x/tools/cmd/goimports #在GOPATH/bin目录下生成了goimports的可执行文件
利用atom自动安装,安装go-plus自动安装,但是要FQ!同时依赖git客户端
因此会提示:
$ go get -u golang.org/x/tools/cmd/goimports $ go get -u golang.org/x/tools/cmd/gorename $ go get -u github.com/sqs/goreturns $ go get -u github.com/nsf/gocode $ go get -u github.com/alecthomas/gometalinter $ go get -u github.com/zmb3/gogetdoc $ go get -u github.com/zmb3/goaddimport $ go get -u github.com/rogpeppe/godef $ go get -u golang.org/x/tools/cmd/guru $ go get -u github.com/fatih/gomodifytags $ go get -u github.com/tpng/gopkgs 从github上将上面的diamante下载下来,除了x/tools相关工具,解压到$GOPATH/src/github.com对应目录下,并重命名 然后手动用go install ...安装,重启atom,ok
GOPATH目录结构:
bin #编译生成的可执行文件 pkg # src #源码,全局唯一 github.com #放置github的项目 继续下面就是用户名 最后就是项目名 #依赖git命令,-d参数是只下载不安装,-u是通过网络更新软件及其依赖 go get : Get downloads the packages named by the import paths, along with their dependencies. It then installs the named packages, like 'go install'. go get -d github.com/51reboot/golang-01-homework cd $GOPATH/src/github.com/51reboot/golang-01-homework
常用工具:
编译: go build 测试: go test 下载更新依赖并编译: go get 自动文档工具: godoc -http=:9090,然后访问本地9090端口 在线查看文档: godoc.org/github.com/golang/protobuf/proto
3、指针
package main import "fmt" func main() { var x int x = 1 var y int y = 3 var p *int //*是指针的意思 p = &x //&是取地址的意思,p的值是存储x的地址 fmt.Println("p=", p) fmt.Println("*p=", *p) //*是取p指针指向的值 fmt.Println("x=", x) *p = 2 fmt.Println(x) p = &y fmt.Println("*p=",*p) }指针是操纵变量的变量。 直接传变量,内容太大 需要一个通用的变量能修改一类变量
语法:
*T即为类型T的指针,T可以是任何类型、包括指针类型 &t即为取变量t的地址,指针本来指向的就是内存中一块地址,是一串数字,但是编译器不允许随便指定指针为一串数字 *p即为取指针变量所执行的内容
package main import "fmt" func main() { var x int x = 1 add(x) fmt.Println("x=",x) addpointer(x) fmt.Println("x=",x) } func add(q int) { //将x赋值给p变量 q = q + 1 //p变量值是2,但是x变量还是1,python中也一样,不过没有下面的用法 } func addpointer(r *int) { //r是指针,指向x变量 r = *r + 1 //r指向(r指向的值+1) }
Go中变量就是内存中的一块地址存储的内容,指针是指向此地址的变量
Python中传参就没有传入指针的说法了。
4、gotrace
https://github.com/divan/gotrace
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming the Mobile Web
Maximiliano Firtman / O'Reilly Media / 2010-07-23 / $44.99
* Learn how to use your existing skills to move into mobile web development * Discover the new possibilities of mobile web development, and understand its limitations * Get detailed coverage of ......一起来看看 《Programming the Mobile Web》 这本书的介绍吧!