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的扩展名就是这个)

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

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


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语言包含着以下结构

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句与表达式
  • 注释
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 编译器自动完成。
如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。

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

注释

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

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

标识符

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

以下是有效的标识符:

maheshkumarabcmove_namea_123myname50_tempja23b9retVal
以下是无效的标识符:

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

字符串连接

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

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

结果是:GoogleRunoob

关键字

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:根据格式化参数生成格式化字符串并写入标准输出
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