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

释放双眼,带上耳机,听听看~!

一、golang语言的特性

1.垃圾回收

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

2.天然并发

  • a.从语言层面支持并发,非常简单

  • b.goroute,轻量级线程,创建成千上万个goroute成为可能

  • c.基于CSP(Commnuncating Sequential Process)模型并发


1
2
3
4
1func main() {
2    go fmt.Println(“hello")
3}
4

3.channel

  • a.管道,类似unix/linux中的pipe

  • b.多个goroute之间通过channel进行通信

  • c.支持任何类型


1
2
3
4
5
6
7
8
9
10
11
12
13
1func test_pipe() {
2   pipe := make(chan int, 3)
3   pipe <- 1
4   pipe <- 2
5   pipe <- 3
6
7   sum = <-pipe
8   // pipe <- 4
9
10  fmt.Println("sum=", sum)
11  fmt.Println(len(pipe))
12}
13

4.多返回值

a.一个函数返回多个值


1
2
3
4
5
6
7
8
9
10
1package main
2
3func clac(a int, b int) (int, int) {
4   // 多返回值
5   c := a + b
6   d := (a + b) / 2
7
8   return c, d
9}
10

二、开发环境搭建

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

  • Linux

  • FreeBSD

  • Mac OS X(也称为 Darwin)

  • Windows

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

如果打不开可以使用这个地址:https://golang.google.cn/dl/。

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


1
2
3
4
1wget -c https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
2tar -zxvf go1.13.4.linux-amd64.tar.gz -C /usr/lcoal
3mkdir /home/gopath
4

设置环境变量

2.配置环境变量

linux


1
2
3
4
5
1vi /etc/profile
2export GOROOT=/usr/local/go
3export GOPATH=/home/gopath
4export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
5

windows安装的如果是msi安装文件,Go语言的环境变量会自动设置好。如果后面的测试无法通过,可以重新设置环境变量。


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

第一个golang程序

hello world, 在gopath路径下新建src目录,新建文件hello.go


1
2
3
4
5
6
7
8
1package main
2
3import "fmt"
4
5func main() {
6   fmt.Println("hello world")
7}
8

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

3. IDE搭建(vscode)

新建项目目录结构

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

4. 安装插件

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

使用VScode时,当我们安装完go语言扩展时,新建一个go的源码文件,进行保存时,会提示我们需要安装一些go的扩展插件,可别小看这些插件,这些插件都是非常有用的,比如说自动补全等,一般我们都会选择install all去进行安装所有插件,这些插件均是从github上进行下载,但是因为地处中国被墙的原因,大多插件都会下载失败。

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

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

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


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

3、执行完以后,会多一个tools文件夹。

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1注意:下述命令根据需要进行下载,并不是全部都要下载,此处博主仅仅下载了vscode提示需要装的。
2go install github.com/ramya-rao-a/go-outline
3go install github.com/acroca/go-symbols
4go install golang.org/x/tools/cmd/guru
5go install golang.org/x/tools/cmd/gorename
6go install github.com/josharian/impl
7go install github.com/rogpeppe/godef
8go install github.com/sqs/goreturns
9go install github.com/golang/lint/golint
10go install github.com/cweill/gotests/gotests
11go install github.com/ramya-rao-a/go-outline
12go install github.com/acroca/go-symbols
13go install golang.org/x/tools/cmd/guru
14go install golang.org/x/tools/cmd/gorename
15go install github.com/josharian/impl
16go install github.com/rogpeppe/godef
17go install github.com/sqs/goreturns
18go install github.com/golang/lint/golint
19go install github.com/cweill/gotests/gotests
20go get -u -v github.com/mdempsky/gocode
21go install golang.org/x/tools/cmd/goimports
22

但是,有一个插件还是安装失败了,这个插件就是golint

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

手动安装golint插件

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

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


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

2、 然后执行如下命令即可安装成功


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

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

5. vscode配置

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


1
2
3
4
5
6
7
8
1{
2    "go.autocompleteUnimportedPackages": true,
3    "go.inferGopath": true,
4    "go.gotoSymbol.includeImports": true,  
5    "go.useCodeSnippetsOnFunctionSuggest": true,
6    "go.gocodePackageLookupMode": "go",
7} 
8

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

三、包的概念

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

实例: 代码目录

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

add.go


1
2
3
4
5
6
1package calc
2
3func Add(a int, b int) int {
4   return a + b
5}
6

sub.go


1
2
3
4
5
6
1package calc
2
3func Sub(a int, b int) int {
4   return a - b
5}
6

main.go


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1package main
2
3import (
4   "fmt"
5   "go_dev/day1/package_example/calc"
6)
7
8func main() {
9   sum := calc.Add(100, 300)
10  sub := calc.Sub(100, 300)
11
12  fmt.Println("sum=", sum)
13  fmt.Println("sub=", sub)
14}
15

编译


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

四、goroute 

1. goroute实现并发

goroute.go


1
2
3
4
5
6
7
8
1package main
2
3import "fmt"
4
5func test_goroute(a int) {
6   fmt.Println(a)
7}
8

main.go


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1package main
2
3import "time"
4
5func main() {
6   for i := 0; i < 100; i++ {
7       go test_goroute(i)
8   }
9
10  time.Sleep(3 * time.Second)
11}
12
13// go build go_dev/day1/goroute 
14

2. goroute管道通信

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

add.go


1
2
3
4
5
6
7
1package goroute
2
3func Add(a int, b int, c chan int) {
4   sum := a + b
5   c <- sum
6} 
7

main.go


1
2
3
4
5
6
7
8
9
10
11
12
13
14
1package main
2
3import (
4   "fmt"
5   "go_dev/day1/goroute_example/goroute"
6)
7
8func main() {
9   var pipe chan int
10  pipe = make(chan int, 1)
11  go goroute.Add(100, 300, pipe)
12  sum := <-pipe
13  fmt.Println("sum=", sum)
14

 

 

给TA打赏
共{{data.count}}人
人已打赏
安全技术

spring cache

2022-1-11 12:36:11

安全技术

JavaScript内置对象

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索