go语言,Let's go(golang)(一)

我认为go语言是一个不但易学易用,而且非常强大的语言,是一个非常值得投资的语言。

安装

国外的golang.org大陆访问不了,下载go语言安装包要去golang中国或者go语言中文网

环境变量配置

  1. GOROOT环境变量,指向go语言的安装目录
  2. GOPATH环境变量,指向自己的工作区,这个目录下应该包含bin,pkg,src分别放置可执行文件,库文件,源代码

IDE

推荐使用vscode,跨linux,win,mac平台,另外go语言也能完美的运行在这3个平台上,可以简单的实现跨平台开发。vscode上还有一整套go语言的辅助工具,包括非常实用的代码提示工具等

第一个程序

来吧,开始第一个程序

package main

import (
	"fmt"
	"sync"
)

func main() {

	var hw = "hello go programming language"
	var wg sync.WaitGroup

	wg.Add(1)
	go func() {
		fmt.Printf("ansynchronous printf '%s'\n", hw)
		wg.Done()
	}()

	wg.Wait()
	fmt.Println("program terminated")
}

go语言的hello world,就是这么直接

第一行

package main

这表示该程序所属的包为main包,所有go源代码都必须被包含在指定的包中,但是main包是很特殊的,go会将这个包中的代码构建成可执行程序,而其他名字的包会被构建成库

import (
	"fmt"
	"sync"
)

顾名思义,导入包,fmt和sync都是go语言“标准库”中的包,分别用来处理格式化输出和同步操作,go语言的“标准库”非常庞大,功能全面,随着学习的深入,我们还会接触到很多其他的包

var hw = "hello go programming language"
var wg sync.WaitGroup

这两行声明了2个变量,可以看到,go语言声明变量是非常简洁的,编译器会帮我们判断变量的类型,而go语言和C++,C#语言一样,变量必须有类型。wg变量相信写过多线程程序的朋友应该一看就知道他的意义,简单来讲,就是等待“特定条件”达成,在这里,就是等待所有goroutine结束,goroutine又是什么呢?goroutine是go语言在语言层面支持并发的一种功能,合理使用goroutine可以方便快捷的进行多线程程序开发。

wg.Add(1)
go func() {
	fmt.Printf("ansynchronous printf '%s'\n", hw)
	wg.Done()
}()
wg.Wait()

在上面的代码的第二行,我们就启动了一个goroutine去执行我们指定的一个匿名函数,在启动前,我们对wg进行了Add(1)操作,表示有一个goroutine在执行中,在最后执行wg.Wait()表示主线程要等待所有的goroutine执行完成才能结束程序,匿名函数中,我们不但输出了hw变量中的内容,而且在最后执行了wg.Done()告诉主线程,我的事情都搞定了,不用等了。

如果我们的程序中不包含wg,则有可能因为主线程过快结束导致无法在goroutine中输出hw的值,这是go语言中多线程同步的一种方式。

构建,执行

将代码复制到main.go文件中,放到GOPATH的src目录下的foo文件夹中,并在powershell中执行go install foo,我们的程序就会生成到bin目录下了,运行一下看看吧

posted @ 2017-03-23 01:11  devgl  阅读(548)  评论(0编辑  收藏  举报