(实践)Go 语言入门指南:基础语法和常用特性解析 | 青训营

76 阅读4分钟

Go的基本代码形式:

package main//包声明,main包是每个项目的入口
import "fmt"//导入包文件
func main(){//func关键字定义函数
    fmt.Println("Hwllo,World!")//go中的打印函数
}

tips : Go语言每行代码行尾是不需要像Java加分号; Go编译器会把换行符号解析成分号,也就说明 { 不能单独成行,编译器会在前面加上分号导致无法识别.

变量和常量
  • 变量用var来声明(Java不同)

  • 常量用const声明(Java用final)

    最不一样的是Go中变量定义规则: var 变量名 类型 = XXX

在Go语法中:

如果不设置值:

数字类型默认值为0,布尔类型为false,字符串为""

接口,指针,map,函数的默认值为nil

另外:

:= 含义是声明并赋值

= 则是给已经声明的变量赋值

指针

Go语言支持指针,默认值为nil,也可以用new来新建对象。

循环条件:

Go中的switch语句中每个case的代码块执行后不需要加入break;会自动终止。

并且Go中只有for循环,没有while关键字

int

Go中的int可以自定义大小:int8,int16,int32,int64,分别对应该位数的整数。

float

浮点数可以再float后加上数字代码长度:float32,float64

复数类型

Go中相较于java具有复数类型:

类型名字为complex64,complex128,其中实部和虚部分别由float32和float64组成。

real(a)用于获取复数的实部

imag(a)用于获取复数的虚部

字符串

Go字符串按照字节存储,不同字符占用不同数目的字节大小。

字符按照Unicode编码存储,汉字占3个字节,英文占1个字节,节省空间。

数组

数组的定义:

var a [大小]int//声明一个int类型的数组

并且可以定义数组同时初始化:

var b [3]int=[3]int{1,2,3}

在初始化数组的时候,大小不同的数组不能进行赋值操作,编译时会看成两种类型:

例如 [3]int不能与[4]int 进行赋值操作

数组按照值来传递

slice

slice切片很像Python,是一种拥有相同类型元素的可变长序列,与数组很像

这是因为切片的底层就是数组。

s := make([]int,10)//make函数定义了[]int类型的切片,长度为10

如果想结束s,释放:

s = nil//垃圾回收机制会回收slice的空间

切片是左闭右开的,例如:

s[0:3]---->下标{0,1,2}

slice的特点是可以进行动态的修改,append方法可以再原来的切片是插入元素,分为开头,结尾,指定位置,数组可以转换成slice再进行插入操作。

当进行插入操作时,slice对应的底层数组已满,Go则会创建一个更大的新数组,来进行插入操作。

copy()函数可以用于切片间的赋值,只涉及到元素的拷贝和覆盖,不涉及到新空间的创建。

map

Go中也提供了map这种存储键值对的无序集合,底层实现是哈希表。

m1 := make(map[string]int)
​
m2 := map[stirng]int{
  "k1":v1
}

访问map可以用:map[k]获取k对应的值,不存在第二个返回值ok为false

map[key]=value可以进行元素的添加,存在则更新,不存在就新增key-value键值对。

删除元素可以用delete函数:

delete(map,k)//删除对应map中的k键值对

需要注意的是:

  • map在元素赋值之前应该初始化(也可以在初始化时候赋值)
  • map的默认值是nil,这时进行元素赋值操作会报错。
struct

struct是复合类型,非引用类型,复合类型是值传递,而引用类型是引用传递。

Go中struct的定义也和正常顺序有出入:
type Person struct{
    name string
    age int
}
var p1 Person
p2 :=Person("Jack",18)

可以看出经过比较,struct的作用和C++中的struct作用差不多,可以充当Java中的对象,并且也具有默认的构造方法.

可以通过p2.name来访问成员变量

结构体指针
var pp *Person
pp:=new(Person) 创建指向Person结构体的指针pp
pp.name="Json" //Go的语法糖可以直接用结构体指针.成员名来访问对应成员的值。

make函数用于slice,map,chan分配内存,返回类型本身。

new函数返回类型对应的指针,主要用于struct初始化中

总结:

总的来说,Go中语法大部分和其他语言例如C++,Java的语法类似,但也有自己特殊的规则,除此之外,Go中取消了其他语言中的语法例如while,如果想要掌握Go,使用Go来进行编程,那就要熟悉Go的这些特殊的语法,能够将其语言的特性发挥出来,形成一种常识。