这两天从零学习了go语言,在学习过程中发现对于零基础选手来说有一些地方没提到(也可能是因为我太弱了),按照自己的学习顺序总结了一下。
首先,我们通过最基本的hello world来了解一下Go语言的程序框架
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world!")
}
package main定义一个包名,所有可运行的go包必须包含package mainimport main后的括号中表示引入的包,导入的包名需要使用双引号包裹,同时需要注意在go语言中左括号不能换行。- 从
func main进入程序入口,每一个程序中必须有一个main函数 - 通过使用
fmt.Println将文本打印到控制台,这里与Java有些类似
接下来是go语言的一些基本语法:
1. 变量
1.0 定义变量
go语言使用var关键字来声明变量,具体格式如下,在代码中定义了一个int类型变量。
package main
import (
"fmt"
)
func main() {
var a int =10//定义一个int类型变量a,赋值为10
}
1.1 未初始化
声明了变量类型,没有初始化,例如var a int,按照下表进行初始化
| 类型 | 值 |
|---|---|
| 数值类型 | 0 |
| 布尔类型 | false |
| 字符串 | "" |
1.2 未声明变量类型
没有声明变量类型,但是对变量初始值进行了设定,则根据初始值进行变量类型的判断。例如var f=false,此时f为布尔类型。
1.3 :=符号
在go语言中遇到了一个新的符号:=,该符号是一个声明语句,当我们定义一个变量后,不能使用该符号再次初始化变量。即可以使用b:=20完成初始化。
2.数据类型
Go语言的数据类型包括基本数据类型,例如整数、浮点数、字符串等,复合类型例如数组、结构体等,以及指针、函数等特殊类型,其大多使用方法与c语言类似。
2.1 复合类型
2.1.1 数组
- 数组初始化的方式有多种:
- 直接初始化
var c [3]int=[3]int{1,2,3} - 通过字面量进行
c :=[3]int{1,2,3} - 数组长度不确定,编译器自行推断
c :=[...]int{1,2,3}
2.1.2 结构体
结构体的定义和声明与c语言类似,在此不再赘述。具体代码参考如下:
package main
import (
"fmt"
)
type FF struct{
a int
b string
}
func main() {
var f1,f2 FF
f1=FF{10,"f1"}
f2.a=20
f2.b="f2"
fmt.Println(f1,f2)//输出{10 f1} {20 f2}
}
2.1.3 切片
切片可以看作是一个可以变化大小的数组,其内置的len函数返回切片中有效元素的长度,内置的cap函数返回切片容量大小,则cap返回值将大于等于len返回值。
var s []int=[]int{1,2,3}//初始化s切片,内部有1,2,3三个成员
fmt.Println(s)//输出[1 2 3]
s=append(s,4)//添加一个元素4
fmt.Println(s)//输出[1 2 3 4]
s=append([]int{-1,0},s...)//在开头添加两个元素-1与0
fmt.Println(s)//输出[-1 0 1 2 3 4]
s = s[1:] //删除开头一个元素
fmt.Println(s)//输出[0 1 2 3 4]
s = append(s[:2], s[3:]...)//删除下标为2的元素
fmt.Println(s)//输出[0 1 3 4]
2.2 特殊类型
2.2.1 指针
指针的用法与c语言类似,存储变量内存地址。
a:=10
var p *int =&a
2.2.2 函数
go语言中函数的定义将返回值放于函数名所在行,可以通过func add(a, b int) (c int) 返回函数中的指定参数c。同时,函数是特殊的数据类型,可以作为变量进行赋值操作。
func add(a, b int) int {
return a+b
}
func main() {
var f func(int,int)int=add
fmt.Println(f(2,3))//输出5
}