在这里记录一下自己记录的 Go 的一些常用的语法。Go 跟之前学过的 C,C++,Java 差别有点大。不太习惯。

#

每个 Go 程序都是由包构成的。程序从 main 包开始运行。按照约定,包名与导入路径的最后一个元素一致。一个包的名字和包的导入路径的最后一个字段相同,例如 gopl.io/ch2/tempconv 包的名字一般是 tempconv 。使用包直接使用 tempconv 加上一个 . 然后就可以选择包里的方法了。

# 导入

导入包有两种方法:

  1. 分组形式导入:

    import(
     "fmt"
     "math"
    )
  2. 编写多个导入语句:

    import "fmt"
    import "math"

    推荐使用第一种。

    # 导出名

在 Go 中规定,如果一个名字以大写字母开头,那么它就是已导出的。如: Pi 导出自 math 包。

# 函数

Go 中的函数可以没有参数或者接受多个参数,还可以返回多个值
需要注意的是,Go 语言中是变量在前,类型在后。

当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其他都可以省略。
如:
x int y int 可写成 x,y int

# 命名返回值

Go 函数中的返回值可以被命名,它们被看为定义在函数顶部的变量。
看代码:

// 这里是对返回值进行命名,这样返回值就和参数一样拥有参数变量名和类型。
// 括号里的就是返回值类型,因为这里返回两个数,所以使用两个 string
func exists(m map[string]string, k string) (v string, ok bool) {
   v, ok = m[k]
   return v, ok
}

这个代码中如果 return 后面没跟参数,则默认返回 stringbool 类型的两个参数。

# 变量

Go 中变量声明有两种方法:

  1. var 语句声明。 var 语句可以出现在包或函数级别(后面介绍那个则只能在函数中)。例, var x int 。Go 语言中还有类型推导,你可以写成 var x = 6 ,它根据你写给的参数自动命名(类型推导)。
  2. 短变量声明。使用符号 := 可在类型明确的地方代替 var 声明,它不能在函数外使用。
    例如: g := 99 这里也是自动判断是什么类型的。

跟其他语言一样,如果声明却没有赋值,则根据这几种情况默认赋值:

  • 数值类型为 0

  • 布尔类型为 false

  • 字符串为 ""
    需要注意的是,Go 语言中不允许声明而不使用的变量。
    所以根据这个特性 Go 中定义了空标识符 _ , 这个东西可以怎么用呢?看下面这段代码

    sum := 0
    for _, value := range array{
      sum += value
    }

    这里呢就是相当于我们在 C 语言这样写 (意思差不多就行了):

    int sum = 0;
    for (int i = 0; i < 2; i++){
      sum++;
    }

    就是只是为了索引而已。

# 常量

常量的声明与变量类似,只是多了一个 const 关键字。
常量不能用 := 语法声明。
const x = 9

# range

range 语言范围。
用于 for 循环中迭代数组 (array)、切片 (slice)、通道 (channel) 或集合 (map) 的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

nums := []int{1, 2, 3}
sum := 0
for _, value := range nums{
    sum += value
}

sum 的值为 6。

# Map

Map 是一种无序的键值对的集合。
Map 的定义有两种:

  1. 使用 make 关键字

  2. 使用 map 关键字

    // 使用 make 定义
    // 也可以使用 map 关键字定义
    //var map_variable map[key_data_type]value_data_type
    //key 是 string 类型,值是 int 类型
    m := make(map[string]int)
    m2 := map[string]int{"one": 1, "two": 2}

# 总结

Go 语言与之前学的几种都不太相同,比如它 if 和 for 都不用加括号,代码行尾不用加分号,变量在前类型在后等等。不过要是有一些语言的基础,理解这些基础语法并不难。

更新于 阅读次数