Go(又称Golang[3])是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。来自维基百科
1.什么是Go语言?
Go是一门并发支持、垃圾回收和编译型系统编译语言,旨在创造一个门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点的一门编程语言。
Go语言是Rob Pike以及Ken Thompson于2007年9月开始设计的,Go是基于Inferno操作系统所开发的。[4]Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。(这个类似土拨鼠的logo是由Rob Pike 的妻子 Renee French 绘制的)
2. Go语言的优点
Go语言的价值:Go在谷歌:以软件工程为目的的语言设计
Go的主要特点有如下几点:
- 1、类型安全和内存安全
- 2、以非常直观和极低代价的方案实现高并发
- 3、高效的垃圾回收机制
- 4、快速编译(同时解决了C语言中头文件太多的问题)
- 5、为多核计算机提供性能提升的方案
3.Go语言的项目架构
Go语言的工作目录如下表,根据约定,GoPath
下需要建立3个目录
目录 | 含义 |
---|---|
bin | 存放编译后生成的可执行文件 |
pkg | 存放编译后生成的包文件 |
src | 存放项目源码 |
GOPATH是的你的工作目录,GOROOT是你的安装目录。
程序的整体结构如下图所示:
4.Go语言的开发环境
本教程采用go1.9
以及goland 2018.1
的开发环境,首先要学会环境配置(这里就不讲了,比较简单),然后开始Go的开发之旅了!
1.新建一个HelloWord.go
文件
在右键新建的时候会两种文件格式:
Empty file
是新建后是一个空文件,然后Simple Application
新建后会有main
函数的示例代码。
package main
import "fmt"
func main() {
fmt.Print("hello,world!")
}
Go程序的一般结构:
- 1、Go程序是通过
package
来组织的; - 2、只有
package
名称为main
的包可以包含main函数,一个可执行程序有且仅有一个main包; - 3、通过
import
关键字来导入其他非main包; - 4、通过
const
关键字进行常量的定义; - 5、通过在函数体外部使用
var
关键字来进行全局变量的声明与赋值; - 6、通过
type
关键字来进行结构(struct)或接口(interface)的声明; - 7、通过
func
关键字来进行函数的声明。
运行结果如下:
2.基本类型
go语言的基本类型如下:
示例如下:
package main
import (
"fmt"
"strconv"
)
func main() {
//声明和赋值
var a int = 65
var c int = 75
//简化赋值和显示强制转换
b:= string(a)
//转换为数字
d:= strconv.Itoa(c)
fmt.Println(b)
fmt.Println(d)
}
结果如下:
因为string()表示将数据转换为文本格式,因此计算机中存储的任何东西本质都是数字,因此此函数自然地认为我们需要的是65表示的文本A。
3.函数
函数的调用如下:参考文件Go指南中文版
//func 方法名 形式参数 返回参数类型
func add(x int,y int) int {
return x+y
}
//func add(x ,y int) int {
// return x+y
//}
func main() {
fmt.Print(add(42,13))
}
4.多值返回
package main
import "fmt"
func main() {
a,b:=swap("hello","world")
fmt.Print(a,b)
}
func swap(a string, b string) (string,string) {
//这个可能是交换程序了,甚至不需要不需要一个临时变量,但是这个内部是怎么做的呢?
return b,a
}
Q:go语言中swap方法是如何做的呢?
5.变量以及短变量的使用
package main
import "fmt"
var i,j int =1,2
func main() {
var c, python, java = true,false,"no"
//短变量的声明和赋值
k:=3
fmt.Print(i,j,c,python, java,k)
}
6.各种类型的初始值
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
7.类型转换(必须显示转换,在Go中不能隐式转换)
package main
import (
"math"
"fmt"
)
func main() {
var x, y int = 3, 4
//将xy的值强制类型转换为float64类型
var f float64 = math.Sqrt(float64(x*x+y*y))
//unit无符号整数
var z uint = uint(f)
fmt.Print(x,f,z)
}