抱歉,你查看的文章不存在

一起来学 Go -- 数据与逻辑结构

最近,我准备学习一门新的编程语言。之前写过一篇博文: 如何学习一门新的编程语言 - 以 Python 为例 ,按照这种学习思路,我们一起来学 Go。

1. Go 的数据结构

基础类型

  • 布尔类型:bool
  • 整型:byte、int、int8、int16、uint、uintptr
  • 浮点类型:float32、float64
  • 复数类型:complex64、complex128
  • 字符串:string
  • 字符类型:rune
  • 错误类型:error

复合类型

  • 指针:pointer
  • 数组:array
  • 切片:slice
  • 字典:map
  • 通道:chan
  • 结构体:struct
  • 接口:interface

Go 变量标识由字母、数字、下划线组成,其中首字母不能为数字。声明变量时,类型放在变量标识后面。一般形式为:

// 单个变量
var identifier type

// 多个变量
var identifier1, identifier2 type

声明变量时,如果没有初始化,则默认为零值。对于有初始值的变量声明,可以省略类型,因为 Go 能推导出类型。

var i int = 0
var i = 0
// 还可以省略 var 关键字,使用 := 语法糖声明变量
i := 0

2. Go 的逻辑结构

  • 循环结构 for
for i := 0; i < 10; i++ {
    sum += i
}
sum := 0
for sum < 1000 {
    sum += sum
}
  • 条件分支 if、switch
if x < 0 {
    return -x
} else {
    return x
}
switch t := i.(type) {
case bool:
    return "I'm a bool"
case int:
    return "I'm an int"
default:
    return "Don't know type %T", t
}
  • 跳转 goto

goto 可以无条件跳转到指定的标签

if error {
  goto doError
}
// 发生错误时,跳过的代码块
doError:
// 发生错误时,立即执行的代码块
  • 推迟 defer

defer 语句会被压入栈中,当外层函数返回之后,依次出栈执行。

func main() {
    defer second_run()
    first_run()
}

3. Go 的模块定义

3.1 函数

Go 语言函数定义格式:

func function_name( [parameter list] ) [return_types] {
    // 函数体
}
  • func,函数声明关键字
  • function_name,函数名称,与参数列表一起构成了函数签名
  • parameter list,参数列表
  • return_types,返回类型

举个例子:

func max(num1, num2 int) int {
    if (num1 > num2) {
      return num1
    } else {
      return num2
    }
}

Go 函数还可以返回多个值:

func addAndMult(a int, b int) (int, int){
    return a + b, a * b
}

除此,Go 中还可以声明匿名函数,直接赋值给变量:

my_func_name := func() {
    // 函数体
}

3.2 包(package)

Go 使用 package 来管理代码,这种方式与 Python 类似。package 是一个或多个 Go 源码文件的集合。Go 语言内置了很多 package,例如 fmt、os、io 等。

声明包时,在文件第一行添加如下标识:

package package_name

引用时,在文件头部添加如下标识

import "path/package_name"

package 的特性:

  • 一个目录下的同级文件属于一个 package
  • 包名与目录名可以不同,但是通常会保持一致
  • 程序的入口是 main 包的 main 函数,如果没有 main 包,则不会生成可执行文件
  • 仅首字母大写的标识符,包外可以访问

查看最新更新,请前往 https://www.chenshaowen.com/blog/let-us-start-learning-go-2.html

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

陈少文的专栏

8 篇文章6 人订阅

扫码关注云+社区

领取腾讯云代金券