万物之始,大道至简,演化至繁,一切复杂的软件都是由基本的程序排列组合来的。
Go语言主要是为了解决当前其他编程语言对并发支持不友好、编译速度慢、编程复杂的问题而诞生的,因为是后来设计的,比目前主流的编程语言历史都短,因此也借鉴了其他编程语言的优秀经验,同时也避免了很多缺点。
基本上每个语言第一个程序都是hello world,Go语言的hello world如下
例1.1 hello world
- package main
-
- import "fmt"
-
- func main() {
- fmt.Println("hello world")
- }
结果:
hello world
Hello world程序解读:
第一行package main定义了一个包,包名是main,main是可执行程序的包名,所有的Go程序文件头部必须有一个包声明语句,Go通过包来管理命名空间
第3行import "fmt" 表示引用一个外部包fmt,这里可以引用标准库的包,也可以是第三方包或者自定义的包
第5行使用func关键字声明定义了一个函数,函数名为main,main代表Go程序入口函数
Go代码的特征:
源程序以.go为后缀
默认为UTF-8编码
标识符区分大小写
语句结尾的分号可以省略,也可以加(这点感觉设计的不好,不应该提供两种选择让用户选择,直接规定一种格式更好,让用户选择反而会导致代码风格不同)
main函数所在的包名必须是main
编译运行
go编译命令为go build xxxx.go,运行命令为./xxxx,如下例所示:
- //go build test2.go 为编译命令
- bytedance@C02D31DRML85 awesomeProject12 % go build test2.go
- //./test2 为运行命令
- bytedance@C02D31DRML85 awesomeProject12 % ./test2
- hello world
这块和其他编程语言基本类似,go的标识符也是必须以字母或下划线开头,后面可以跟任意个字符、数字、下划线,且区分大小写
Go有25个关键字,相比Java少了很多,在定义变量/常量等的时候,要避开关键字,否则会出问题
Go的操作符和其他编程语言也大同小异,基本都是算术运算符、位运算符、赋值运算符、比较运算符、逻辑运算符那些
高级语言通过一个标识符来绑定一块特定的内存,后续对这块特定的内存的操作都可以使用该标识符来代替,这类绑定了某个存储单元的标识符可分为变量和常量,变量表示指向的内存可以被修改,而常量表示指向的内存不能被修改。
Go的基本类型变量声明有三种方式,如下例所示:
例1.1 变量的声明方式
- package main
-
- import (
- "fmt"
- )
-
- func main() {
- var a = 4 //变量声明方式1
- var b int = 5 //变量声明方式2
- c := 6 //变量声明方式3,Go编译器会自动进行数据类型推断
-
- fmt.Println("a = ", a)
- fmt.Println("b = ", b)
- fmt.Println("c = ", c)
- }
Go语言提供自动内存管理,通常情况下程序员不需要特别关注变量的生存期和存放位置
例1.2 同时声明多个变量
- package main
- import (
- "fmt"
- )
-
- func main(){
- var (
- a string
- b int
- c bool
- )
-
- a = "adb"
- b = 124
- c = true
-
- fmt.Println("a = ",a)
- fmt.Println("b = ",b)
- fmt.Println("c = ",c)
- }
常量使用一个名称来绑定一块内存地址,该地址里存放的内容不可以改变,使用关键字const来声明常量,如下例所示:
例1.3
- package main
- import (
- "fmt"
- )
-
- func main(){
- const (
- a = 23
- b = 23332
- c = "233"
- )
-
- fmt.Println("a = ",a)
- fmt.Println("b = ",b)
- fmt.Println("c = ",c)
- }
iota关键字:
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举