一.Hello World
不管学习什么语言,都是从HelloWorld来迈入新语言学习的大门,让我们先看看go语言的HelloWorld程序吧。
package main
import "fmt"
func main() {
fmt.Println("hello world!")
}
代码解释:
- go语言的文件后缀是
.go package main表示这个文件归属于哪一个包,go语言中,每个文件都有一个属于自己的包import "fmt"表示导入一个包,在这个代码中,这个包是用来输出到控制台的func main表示是主函数,是程序的入口
编译与执行:
// 编译 hello.go 后 会生成一个 hello.exe文件
go build hello.go
// 运行 hello.ext
hello.ext
也可以通过
go run hello.go
来直接运行。不过需要记住在生产环境中,代码需要先编译后执行,与开发环境有一定的区别。
二.Go语言主要特征
在学习go语言之前,当然得先了解go语言的一些特征与优势,这样在学习完之后才能够进行更贴合go语言特色的开发。
思想
Less can be more 大道至简,小而蕴真 让事情变得复杂很容易,让事情变得简单才难 深刻的工程文化
优点
- 自带gc。
- 静态编译,编译好后,扔服务器直接运行。
- 简单的思想,没有继承,多态,类等。
- 丰富的库和详细的开发文档。
- 语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。
- 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
- 超级简单的交叉编译,仅需更改环境变量。
- Go 语言是谷歌 2009 年首次推出并在 2012 年正式发布的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去10多年间软件开发的难度令人沮丧。Google 对 Go 寄予厚望,其设计是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助开发者处理琐碎但重要的内存管理问题。Go 的速度也非常快,几乎和 C 或 C++ 程序一样快,且能够快速开发应用程序。
Go语言命名:
1.Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则:
1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限
2.Go只有25个关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
3.Go还有37个保留字
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
4.可见性:
1)声明在函数内部,是函数的本地值,类似private
2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似protect
3)声明在函数外部且首字母大写是所有包可见的全局值,类似public
Go语言声明:
有四种主要声明方式:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。
Go的程序是保存在多个.go文件中,文件的第一行就是package XXX声明,用来说明该文件属于哪个包(package),package声明下来就是import声明,再下来是类型,变量,常量,函数的声明。
三.Go语言基础语法
变量与常量
Go语言的变量声明格式为:
var 变量名 变量类型
变量声明以关键字var开头,变量类型放在变量的后面,行尾无需分号。 举个例子:
var name string
var age int
var isOk bool
批量声明
每声明一个变量就需要写var关键字会比较繁琐,go语言中还支持批量变量声明:
var (
a string
b int
c bool
d float32
)
变量的初始化
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil。
当然我们也可在声明变量的时候为其指定初始值。变量初始化的标准格式如下:
var 变量名 类型 = 表达式
举个例子:
var name string = "pprof.cn"
var sex int = 1
或者一次初始化多个变量
var name, sex = "pprof.cn", 1
类型推导
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。
var name = "pprof.cn"
var sex = 1
短变量声明
在函数内部,可以使用更简略的 := 方式声明并初始化变量。
// 全局变量m
var m = 100
func main() {
n := 10
m := 200 // 此处声明局部变量m
fmt.Println(m, n)
}
常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。
const pi = 3.1415
const e = 2.7182
声明了pi和e这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。
多个常量也可以一起声明:
const (
pi = 3.1415
e = 2.7182
)
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同。 例如:
const (
n1 = 100
n2
n3
)
上面示例中,常量n1、n2、n3的值都是100。
这次的笔记就先记录到这里,下次接着记录有关go的学习笔记。 在这次go语言的最基础部分的学习中,了解了许多go语言的特性以及go语言最初部分与其他语言相似与不相似的地方。我认为最初步的学习更重要的是了解思想,各个编程语言的语法都有共同之处,但是思想缺差别很大,想要学好一门语言更重要的是学习其中的思想并融会贯通。