【Go】GoLang基础语法总结

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

环境配置(windows篇章)

下载 - 安装到指定盘(比如:D:)

依次配置GOROOT、GOPATH(工作路径)、Path

查看版本

  • go version

配置 Vscode - 安装Go插件

  • 选择设置选项

  • 选择扩展Go configuration选择配置,在settings.json中编辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"go.buildOnSave":"off",// 保存代码时优化
"go.lintOnSave":"package",// 保存代码时检查潜在错误
"go.vetOnSave":"package",// 保存代码时执行测试
"go.coverOnSave":false,
"go.useCodeSnippetsOnFunctionSuggest":true,
"go.useCodeSnippetsOnFunctionSuggestWithoutType":true,// 代码格式化
"go.formatTool":"goreturns",
"go.gocodePackageLookupMode":"go",
"go.gotoSymbol.includeImports":true,
"go.docsTool":"godoc",
"go.inferGopath":true,
"go.useLanguageServer":true,
"go.autocompleteUnimportedPackages":true,// go语言安装环境目录
"go.goroot":"D:\\Golang",// go语言工作目录
"go.gopath":"C:\\Users\\panzhong171\\Desktop\\goProject",
"go.gocodeAutoBuild": false,
"go.enableCodeLens": {

"references": false,
"runtest": true
}

确保安装好 git 的前提下,完成配置。

1
2
$ go env -w GO111MODULE=on 
$ go env -w GOPROXY=https://goproxy.cn,direct
  • 然后打开vscode,看他报错点安装,就可以了。不需要手动安装包。

测试一下

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, World!")
}
1
2
$ go run test.go
Hello, World!

语言学习框架

语言简介

简介

  • Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
  • Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

最主要的特性

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

主要用途

  • Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
  • 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

语言结构

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

一个例子

1
2
3
4
5
6
7
8
package main  // 定义包名 

import "fmt" // 引入包

func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}

关于包名的注解

  • 文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
  • 文件夹名与包名没有直接关系,并非需要一致。
  • 同一个文件夹下的文件只能有一个包名,否则编译报错。

文件结构

1
2
3
4
5
6
Test
--helloworld.go

myMath
--myMath1.go
--myMath2.go

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// helloworld.go
package main

import (
"fmt"
"./myMath"
)

func main(){
fmt.Println("Hello World!")
fmt.Println(mathClass.Add(1,1))
fmt.Println(mathClass.Sub(1,1))
}

// myMath1.go
package mathClass
func Add(x,y int) int {
return x + y
}

// myMath2.go
package mathClass
func Sub(x,y int) int {
return x - y
}

Go 程序的一般结构: basic_structure.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 当前程序的包名
package main

// 导入其他包
import . "fmt"

// 常量定义:通过 const 关键字来进行常量的定义。
const PI = 3.14

// 全局变量的声明和赋值:在函数体外部使用 var 关键字来进行全局变量的声明和赋值。
var name = "gopher"

// 一般类型声明
type newType int

// 结构的声明:通过 type 关键字来进行结构(struct)的声明。
type gopher struct{}

// 接口的声明:通过 type 关键字来进行接口(interface)的声明。
type golang interface{}

// 由main函数作为程序入口点启动
func main() {
Println("Hello World!")
}

通过 package 来组织

  • 只有 package 名称为 main 的包可以包含 main 函数。
  • 一个可执行程序有且仅有一个 main 包。
  • 通过 import 关键字来导入其他非 main 包。

可以通过 import 关键字单个导入

1
2
import "fmt"
import "io"

可以同时导入多个

1
2
3
4
5
6
7
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Exp2(10)) // 1024
}

使用 <PackageName>.<FunctionName> 导入调用

1
2
3
package main
// 为fmt起别名为fmt2
import fmt2 "fmt"

省略调用(不建议使用)

1
2
3
4
5
// 调用的时候只需要Println(),而不需要fmt.Println()
import . "fmt"
func main (){
Println("hello,world")
}

可见性规则

  • Go语言中,使用大小写来决定该常量、变量、类型、接口、结构或函数是否可以被外部包所调用。
1
2
3
4
//函数名首字母小写即为 private :
func getId() {}
//函数名首字母大写即为 public :
func Printf() {}