It has been 602 days since the last update, the content of the article may be outdated.

Go语言

Go语言介绍

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

Go语言特色

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

Goland by Google

Go第一个程序

其实从昨晚睡觉前,刚学习Go语言,就被简洁的写法吸引到,很想学会这门语言
接下来,写一个Go程序,hello.go(go的扩展名就是这个)

go
1
2
3
4
5
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}

执行Go语言可以使用go run命令


go
1
2
3
4
5
6
7
8
9
$ go run hello.go 
Hello, World!
//上面是运行加结果
//也可以生成二进制文件
$ go build hello.go
$ ls
hello hello.go
$ ./hello
Hello, World!

Go语言结构

一个Go语言包含着以下结构

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句与表达式
  • 注释
go
1
2
3
4
5
6
package main //第一行定义了包名,必须在源文件中非注释的第一行声明这个文件属于哪个包。比如package main,package main表示一个可执行的文件,每个Go应用程序必须包含一个名为main的包
import "fmt" //import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}//func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。使用 fmt.Print("hello, world\n") 可以得到相同的结果。Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )

Go语言基础语法

Go标记

Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。如以下 GO 语句由 6 个标记组成:fmt.Println(“Hello, World!”)
6 个标记是(每行一个):

  1. fmt
  2. .
  3. Println
  4. (
  5. “Hello, World!”
  6. )

行分隔符

在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。

go
1
2
3
//以下为两个语句:就是以行做分隔符
fmt.Println("Hello, World!")
fmt.Println("runoob.com")

注释

注释不会被编译,每一个包应该有相关注释。
单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 / 开头,并以 / 结尾。

go
1
2
3
4
5
6
//以下是应用了注释的
// 单行注释
/*
Author by 菜鸟教程
我是多行注释
*/

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

以下是有效的标识符:

maheshkumarabcmove_namea_123myname50_tempja23b9retVal
以下是无效的标识符:

  • 1ab(以数字开头)
  • case(Go 语言的关键字)
  • a+b(运算符是不允许的)

字符串连接

Go 语言的字符串连接可以通过 + 实现
以下是示例:

go
1
2
3
4
5
package main
import "fmt"
func main() {
fmt.Println("Google" + "Runoob")
}

结果是:GoogleRunoob

关键字

Go语言的空格

在 Go 语言中,空格通常用于分隔标识符、关键字、运算符和表达式,以提高代码的可读性。
Go 语言中变量的声明必须使用空格隔开

go
1
2
3
4
5
6
7
8
//在变量与运算符间加入空格,程序看起来更加美观,如:
fruit = apples + oranges;
//在关键字和表达式之间要使用空格,例如:
if x > 0 {
// do something
}
//在函数调用时,函数名和左边等号之间要使用空格,参数之间也要使用空格。例如:
result := add(2, 3)

格式化字串符

Go 语言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串并赋值给新串:
两者的区别是:

  • Sprintf:根据格式化参数生成格式化字符串并返回字符串
  • Printf:根据格式化参数生成格式化字符串并写入标准输出
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
//以下是fmt.Sprintf的实际使用
package main
import (
"fmt"
)
func main() {
//%d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2020-12-31"
var url="Code=%d&endDate=%s"
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
}
//以下是fmt.Printf的实际使用
package main
import (
"fmt"
)
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var enddate="2020-12-31"
var url="Code=%d&endDate=%s"
fmt.Printf(url,stockcode,enddate)
}

结果一致,都是//Code=123&endDate=2020-12-31