GO语言系列(一)- 初识go语言

1、golang语言的特性

1.垃圾回收

  • a.内存自动回收,不再须要开发人员管理内存
  • b.开发人员专一业务实现,下降了心智负担
  • c.只须要new分配内存,不须要释放

2.自然并发

  • a.从语言层面支持并发,很是简单
  • b.goroute,轻量级线程,建立成千上万个goroute成为可能
  • c.基于CSP(Commnuncating Sequential Process)模型并发
func main() {
    go fmt.Println(“hello")
}

3.channel

  • a.管道,相似unix/linux中的pipe
  • b.多个goroute之间经过channel进行通讯
  • c.支持任何类型
func test_pipe() {
	pipe := make(chan int, 3)
	pipe <- 1
	pipe <- 2
	pipe <- 3

	sum = <-pipe
	// pipe <- 4

	fmt.Println("sum=", sum)
	fmt.Println(len(pipe))
}

 4.多返回值

  a.一个函数返回多个值python

package main

func clac(a int, b int) (int, int) {
	// 多返回值
	c := a + b
	d := (a + b) / 2

	return c, d
}

2、开发环境搭建

1. Go 语言支持如下系统:

  • Linuxlinux

  • FreeBSDgit

  • Mac OS X(也称为 Darwin)github

  • Windowsgolang

安装包下载地址为:https://golang.org/dl/json

若是打不开可使用这个地址:https://golang.google.cn/dl/windows

根据操做系统选择对应的安装包,点击安装包进行安装(linux直接解压)并发

设置环境变量函数

2.配置环境变量

linux
  
export GOROOT=$PATH:/path/to/go/
export PATH=$PATH:$GOROOT/bin/
export GOPATH=/home/user/project/go

windows安装的若是是msi安装文件,Go语言的环境变量会自动设置好。若是后面的测试没法经过,能够从新设置环境变量。post

set GOBIN=D:\Go\bin        /* 设置go的可执行文件路径 */
set GOPATH=E:\go\project  /* 设置工做目录路径 */
set GOROOT=D:\Go          /* 设置安装go的根目录 */

第一个golang程序

hello world, 在新建hello.go

package main

import "fmt"

func main() {
	fmt.Println("hello world")
}

在终端输入go run hello.go,如何成功打印hello world则证实配置成功

3. IDE搭建(vscode)

新建项目目录结构

4. 安装插件

首先打开扩展,搜索Go,点击安装

使用VScode时,当咱们安装完go语言扩展时,新建一个go的源码文件,进行保存时,会提示咱们须要安装一些go的扩展插件,可别小看这些插件,这些插件都是很是有用的,好比说自动补全等,通常咱们都会选择install all去进行安装全部插件,这些插件均是从github上进行下载,可是由于地处中国被墙的缘由,大多插件都会下载失败。

这些失败的库,不是没有下载下来,而是依赖的文件在go官网上,致使失败。如下为解决办法:

一、在%GOPATH%\src\ 目录下,创建golang.org 文件夹,并再新建x文件夹。最终目录为 "%GOPATH%\src\golang.org\x\"

二、完成目录切换后,开始下载插件包:

git clone https://github.com/golang/tools.git tools

三、执行完之后,会多一个tools文件夹。

四、打开vsCode终端,切换到 终端,进入“%GOPATH”目录,执行下述命令

注意:下述命令根据须要进行下载,并非所有都要下载,此处博主仅仅下载了vscode提示须要装的。
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install github.com/josharian/impl
go install github.com/rogpeppe/godef
go install github.com/sqs/goreturns
go install github.com/golang/lint/golint
go install github.com/cweill/gotests/gotests
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install github.com/josharian/impl
go install github.com/rogpeppe/godef
go install github.com/sqs/goreturns
go install github.com/golang/lint/golint
go install github.com/cweill/gotests/gotests
go get -u -v github.com/mdempsky/gocode
go install golang.org/x/tools/cmd/goimports

可是,有一个插件仍是安装失败了,这个插件就是golint

下面将介绍golint插件的安装方法,为手动安装,其余插件安装失败都可以采用此方法进行手动安装

手动安装golint插件

手动安装至关于直接从github上将该插件源码下载下来。

一、在vscode终端中咱们首先进入%GOPATH%\src\golang.org\x\下,而后执行以下命令进行golint源码包下载:

git clone https://github.com/golang/lint.git lint

二、 而后执行以下命令便可安装成功

go get -u github.com/golang/lint/golint

5. vscode配置

设置位置:文件-首选项-设置-打开json设置,打开json添加以下设置:

 {
    "go.autocompleteUnimportedPackages": true,
    "go.inferGopath": true,
    "go.gotoSymbol.includeImports": true,  
    "go.useCodeSnippetsOnFunctionSuggest": true,
    "go.gocodePackageLookupMode": "go",
} 

参考 https://www.liwenzhou.com/posts/Go/00_go_in_vscode/?tdsourcetag=s_pcqq_aiomsg

3、包的概念

  • a.和python同样,把相同功能的代码放到一个目录,称之为包
  • b.包能够被其余包引用
  • c.main包是用来生成可执行文件,每一个程序只有一个main包
  • d.包的主要用途是提升代码的可复用性

实例: 代码目录

 

add.go

package calc

func Add(a int, b int) int {
	return a + b
}

sub.go

package calc

func Sub(a int, b int) int {
	return a - b
}

 main.go

package main

import (
	"fmt"
	"go_dev/day1/package_example/calc"
)

func main() {
	sum := calc.Add(100, 300)
	sub := calc.Sub(100, 300)

	fmt.Println("sum=", sum)
	fmt.Println("sub=", sub)
}

编译

go build -o 输出路径(相对于GOPATH) 包的路径(相对于GOPATH/src)
go build -o bin/calc.exe go_dev/day1/package_example/main 

4、goroute 

1. goroute实现并发

goroute.go

package main

import "fmt"

func test_goroute(a int) {
	fmt.Println(a)
}

main.go

package main

import "time"

func main() {
	for i := 0; i < 100; i++ {
		go test_goroute(i)
	}

	time.Sleep(3 * time.Second)
}

// go build go_dev/day1/goroute 

2. goroute管道通讯

add.go

package goroute

func Add(a int, b int, c chan int) {
	sum := a + b
	c <- sum
} 

main.go

package main

import (
	"fmt"
	"go_dev/day1/goroute_example/goroute"
)

func main() {
	var pipe chan int
	pipe = make(chan int, 1)
	go goroute.Add(100, 300, pipe)
	sum := <-pipe
	fmt.Println("sum=", sum)
相关文章
相关标签/搜索