zoukankan      html  css  js  c++  java
  • GO语言系列之 初识go语言

    一、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))
    }

    二、开发环境搭建

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

    • Linux

    • FreeBSD

    • Mac OS X(也称为 Darwin)

    • Windows

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

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

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

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

    设置环境变量

    2.配置环境变量

    linux
    vi /etc/profile
    export GOROOT=/usr/local/go
    export GOPATH=/home/gopath
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

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

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

    第一个golang程序

    hello world, 在gopath路径下新建src目录,新建文件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官网上,导致失败。以下为解决办法:

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

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

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

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

    4、打开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上将该插件源码下载下来。

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

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

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

    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

    三、包的概念

    • 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 

    四、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)

     

  • 相关阅读:
    sql语句中as的用法和作用
    设置国内AndriodSDK代理
    Ionic开发环境搭建
    SpringMvc+Mybatis开发调用存储过程
    SpringMvc的JSON数据交互
    SpringMvc+Mybatis开发需要的jar包
    nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/resourceloading/ResourceBundleLocator
    SpringMvc错误:HTTP Status 500
    解决在Tomcat中的server.xml中修改了配置,启动后还原的问题
    SpringMvc参数绑定出现乱码解决方法
  • 原文地址:https://www.cnblogs.com/zhangyafei/p/10639837.html
Copyright © 2011-2022 走看看