前面已经给大家整理过Golang的安装和环境搭建,那么基本语法今天就和大家聊聊。
其实定义一个Go语言的基本结构非常简单,也就几步而已:
Golang基本语法
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
示例:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
解析:
-
第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。
package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 -
第二行 import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
-
第三行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
-
下一行 /…/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
-
最后一行 fmt.Println(…) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。
使用 fmt.Print(“hello, world\n”) 可以得到相同的结果。
Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。 -
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public)。
-
标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
特别注意:
1、写C++ 的人都会将 “{” 独立一行,但是这在go 里面是错误的 ,“{” 必须和方法体在同一行。很多人都容易写go 的时候习惯性的就犯这个错误,最后还不知道错误在哪。
2、if…else 语句中的 else 必须和 if 的 ’ } ’ 在同一行,否则编译错误。
3、包名的定义。你必须在源文件中非注释的第一行声明包名,如:package main。
package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
4、在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
如果你打算将多个语句写在同一行,则必须使用 ; 人为的去区分,但在实际开发中我们并不鼓励这种做法。
5、main()函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数。
然而,每个package 中,只能有一个main() 函数,否则会报main redeclared in this block previous declaration at … 的错误。
6、当函数、结构等标识符以一个大写字母开头,如:GetInfo,那么使用这种形式的标识符的对象就可以被外部包的代码所使用,这被称为导出(像面向对象语言中的 public);
标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
7、标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
以下是无效的标识符:
- 1ab(以数字开头)
- case(Go 语言的关键字)
- a+b(运算符是不允许的)
8、错误 no new variables on left side of := ,意思是,“左边一个新的变量也没有!”
解决办法就是:对于x,y := …这种形式,只要把其中的一个变量命名成新的就可以了。
9、不能使用++自增或- -自减运算符初始化变量和对变量赋值。
执行 Go 语言命令
- 打开编辑器如Sublime Text3,将以上示例中的代码添加到编辑器中。
- 将以上代码保存为 hello.go
- 打开命令行,并进入程序文件保存的目录中。
- 输入命令 go run hello.go 并按ctrl+B执行代码。
- 这时在底部的控制台就会看到 “Hello Go!” 字样的输出.
- 还可以使用 go build 命令来生成二进制文件:
go build hello.go
ls
hello hello.go
./hello
Hello, Go!
数据类型
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
go中的数据类型包括基本数据类型和高级数据类型(派生类型):
基本数据类型又分为三大类:
- 布尔型
- 数字类型
- 字符串类型
布尔型:
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
分为:
- 整数类型(byte,rune,int/uint,int8/uint8,int16/uint16,int32/uint32,int64/uint64)
- 浮点类型(float32,float64)
- 复数类型(complex64,complex128)
- 其他数字类型
整数类型
浮点型
其他数字类型
高级数据类型(派生类型)
- 数组(array)
- 切片(slice)
- 字典(map)
- 通道(channel)
- 函数(function)
- 结构体(function)
- 接口(interface)
- 指针类型 (*Xxx,Pointer,uintptr)
- 结构化类型(struct)
- 接口类型(interface)
如果按照底层结构划分,值类型包括(所有基本数据类型,数组,结构体),引用类型包括(slice,map,channel,function,interface,指针)
总结:
如下图所示:
变量&常量
变量定义
-
变量名由字母、数字、下划线组成,其中首个字母不能为数字,例:var name string
-
声明:
1、指定变量类型,声明后若不赋值,使用默认值
var name string
name = “李四”2、根据值自行判定变量类型
var name = “李四”3、简短形式,省略var
age := 10
注意:
- (:=)是使用变量的首选形式
- (:=)只能被用在函数体内,而不可以用于全局变量的声明与赋值
- (:=)左侧的变量不应该是已经声明过的,否则会导致编译错误
常量定义
-
常量的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
-
常量声明:
const b string = “abc”
iota:特殊常量
const (
a = iota
b
c
)
解析:
- 代表连续的,无类型的整数常量
- 以const开始的常量声明语句为单位
- 从0开始,每赋给一个常量就递增一次
- 一旦跨越以const开始的常量声明语句就归0