Go初探

泥人冷风 · · 446 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1 Go语言特性

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性

2语言结构

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释
package main

import "fmt"

func main() {
    /* Always Hello, World! */
    fmt.Println("Hello, World!")
}

2.1 解释:

    1. package main定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包。
      package main表示一个可独立执行的程序,每个Go应用程序都包含一个名为main的包
    1. import "fmt" 告诉编译器程序运行需要用fmt包
    1. func main()是程序开始执行的函数,main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有init()函数则会先执行该函数)。
    1. {}中"{"不可以单独放一行。
    1. 注释在程序执行时将被忽略。//单行注释,/..../多行注释也叫块注释,不可以嵌套使用,一般用于包的文档描述或注释成块的代码片段。
    1. fmt.Println(...)将字符串输出到控制台,并在最后自动增加换行字符\n。用fmt.Print("Hello, World!\n")可以得到相同的结果。


      VSCODE运行环境

2.2 测试init

除了main函数外,还有另外一个特殊的init函数,先于main函数执行,实现包级别的一些初始化操作。

init函数的主要作用:

  • 初始化不能采用初始化表达式初始化的变量。
  • 程序运行前的注册。
  • 实现sync.Once功能。
  • 其他

init函数的主要特点:

  • init函数先于main函数自动执行,不能被其他函数调用;
  • init函数没有输入参数、返回值;
  • 每个包可以有多个init函数;
  • 包的每个源文件也可以有多个init函数,这点比较特殊;
  • 同一个包的init执行顺序,golang没有明确定义,编程时要注意程序不要依赖这个执行顺序;
  • 不同包的init函数按照包导入的依赖关系决定执行顺序。

golang程序初始化

golang程序初始化先于main函数执行,由runtime进行初始化,顺序如下:

    1. 初始化导入的包(包的初始化顺序并不是按导入顺序执行的,runtime需要解析包依赖关系,没有依赖的包最先初始化,与变量初始化依赖关系类似);
  • 初始化包作用域的变量(该作用域的变量的初始化按照runtime解析变量依赖关系,没有依赖的变量最先初始化)
package main

import "fmt"

func init() {
    // 初始化函数
    fmt.Println("初始化函数")
    
}
func main() {
    /* Always Hello, World! */
    fmt.Println("Hello, World!")
}

init测试

初始化顺序:变量初始化->init()->main()

3 开发环境配置

3.1 IDE选择

vscode(推荐免费)地址:https://code.visualstudio.com/
goland(不推荐收费)地址:https://blog.jetbrains.com/go/

3.2 安装Go 语言包

下载地址:https://studygolang.com/dl
根据自己系统版本,酌情选择

3.3 配置

  • 不管是哪个系统,需要配置go安装环境到path环境变量里面。
  • goland只需要选择go对应的sdk配置即可,也就是把go安装的路径添加进去,使用安装的go环境进行编译,不需要安装任何额外插件。
  • vscode需要安装额外插件,在插件市场里面直接搜索go,随后进行安装即可,在安装的时候容易出现下载失败问题,此时需要更换为国内源,如下设置:
    要求Go版本>=1.13
    windows设置:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

MacOS or Linux

export GO111MODULE=on
export GOPROXY=https://goproxy.cn

参照: Windows下安装

双击你下载的安装包(go1.13.4.windows-amd64.msi),一直点击“Next”即可,注意有一步要求选择安装路径,为了后面教程好说明请不要更改。

然后点“Install”安装

这个过程请等待

点击“Finish”完成安装

怎么来验证我们的安装是成功的呢?按windows键+R,输入:cmd回车

在出现的命令行窗口输入:go version回车,这时会显示你当前安装的go版本,说明咱们已经安装成功了

安装VSCode

1、下载

打开官网https://code.visualstudio.com/Download,进入下载页后,找到下载的地方如下图:

image

win10 64 bit点击第一处红箭头指向处下载,CentOS 64 bit点第二处箭头指向处下载

2、windows下安装

双击你下载的安装程序,然后按下图顺序一路点击

安装VSCode中文包

如果你和笔者一样英文很low,你可以选择安装中文语言包

先可以点左侧第五个图标,或按快捷键Ctrl+Shift+X 打开Extensions,在搜索框里输入:language,中文(简体)的包,然后点“Install”安装,如下图

image

重新打开VSCode,这时已经是中文的啦

image

安装go插件

打开Extensions,输入go,安装作者Microsoft的这个

image

安装vscode-go

对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go
这款插件的特性包括:

Colorization 代码着彩色
Completion Lists 代码自动完成(使用gocode)
Snippets 代码片段
Quick Info 快速提示信息(使用godef)
Goto Definition 跳转到定义(使用godef)
Find References 搜索参考引用(使用go-find-references)
File outline 文件大纲(使用go-outline)
Workspace symbol search 工作区符号搜索(使用 go-symbols)
Rename 重命名(使用gorename)
Build-on-save 保存构建(使用go build和go test)
Format 代码格式化(使用goreturns或goimports或gofmt)
Add Imports 添加引用(使用 gopkgs)
Debugging 调试代码(使用delve)
集成安装命令,拷贝到cmd窗口就可完成安装:
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols

测试安装

1、在GoPath中新建一个文件夹GoHello,打开VSCode打开这个文件夹,新建一个文件main.go,在文件中输入以下代码

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

如果右下角有提示你有些插件需要更新,你可以不面要理会,或直接点更新,如图提示:Your version of go-outline appears to be out of date. Please update for an improved experience.
image

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:泥人冷风

查看原文:Go初探

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

446 次点击  
加入收藏 微博
上一篇:gen-id
下一篇:Go基础技术
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传