go 基本知识点备忘

原站地址:Go 语言教程 | 菜鸟教程

本文目的: 精简方式记录最重要的知识点,方便快速复习

一、基本语法

  1. GO语言特点:高效,并行,开源,搭载Web服务器

  2. 执行命令: go run hello.go

  3. 编译命令: go build hello.go

  4. 包声明: package main

  5. 引入包: import "fmt"

  6. 每行不需要分号结束;但一行多个语句的话,需要分号。

  7. 声明变量方式一:用关键字 var,名字在前,类型在后。var b, c int = 1, 2

  8. 声明变量方式二:a := 1, 相当于var a int = 1

  9. 变量没有初始化,默认值分别是:0,false,"",nil (指针、切片,map)

  10. 局部变量声明后不使用,会报错。但全局变量可以声明后不使用。

  11. 交换两个变量的值:a, b = b, a

  12. 并行复制可以用于函数返回,比如:val, err = Func1(var1)。

  13. 可以通过 &i 来获取变量 i 的内存地址

  14. 数据类型:

(1) 常规类型:bool,int,float32,,float64,string

(2) 派生类型:指针,数组,struct,Channel,函数,切片,接口,Map

(3) 其他类型:字节(byte),字符(rune), 无符号整型(uintptr)用于存放一个指针

  1. 定义常量:const LENGTH int = 10

  2. 定义枚举:(也是用的常量const关键字)

Go 复制代码
const (
    Female = 1
    Male = 2
)
  1. 特殊常量 itoa,在 const关键字出现时初始值是 0, 每新增一行常量声明将使 iota 计数一次. 且不受直接赋值操作的影响。
Go 复制代码
const (
            a = iota   //0
            b          //1
            f = 100    //iota +=1
            i          //3
    )
  1. 枚举的每一行的运算规则,跟随上一行。比如下图, g跟随f,继续是100
Go 复制代码
const (
            a = iota   //0
            b          //1
            f = 100    
            g          //100
            h = iota   //4,恢复计数
            i          //5
    )
  1. 常量可以用len(), cap() 等 内置函数 计算表达式的值,但必须是内置函数。

  2. 特殊运算符: <<左移, >>右移,^异或,&返回指针地址,*声明是指针

二、条件、循环语句

  1. 包含: if, else if, else, switch case, select case

  2. switch case :

Go 复制代码
switch var1 {
    case a:
        ...
    case b:
        ...
    default:
        ...
}

(1) a 和 b 必须是相同数据类型, 但不被局限于常量或整数,可以是表达式。

(2) 从上至下逐一测试,直到匹配为止

(3) case 最后自带 break 语句,如果需要执行后面的 case,可以使用 fallthrough

  1. select case:
Go 复制代码
select {
  case <- channel1:
    // 执行的代码
  case value := <- channel2:
    // 执行的代码
  case channel3 <- value:
    // 执行的代码
  default:
    // 所有通道都没有准备好,执行的代码
}

(1) 只能用于通道操作,要么是发送要么是接收

(2) 会监听所有通道,其中一个准备好就会执行相应的代码块。

(3) 多个通道都准备好,会随机选择一个通道执行。

(4) 所有通道都没有准备好,会执行 default 的代码。如果没有 default 子句,select 将阻塞,直到某个通道可以运行

  1. for 语句:有 4 种形式

(1) for init; condition; post { } 和 C 语言的 for 一样

(2) for condition { } 和 C 的 while 一样

(3) for { } 无限循环

(4) For-each range 循环:可以对字符串、数组、切片等迭代输出元素,获得索引和值

Go 复制代码
strings := []string{"google", "runoob"}
for i, s := range strings {
    fmt.Println(i, s)
}

如果是map的话,可以获得 key 和value

Go 复制代码
ap1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
for key, value := range map1 {
    fmt.Printf("key is: %d - value is: %f\n", key, value)
}
相关推荐
Thomas_YXQ3 分钟前
Unity3D Overdraw性能优化详解
开发语言·人工智能·性能优化·unity3d
北辰浮光8 分钟前
[springboot]SSM日期数据转换易见问题
java·spring boot·后端
lanbing10 分钟前
PHP 与 面向对象编程(OOP)
开发语言·php·面向对象
yzx99101311 分钟前
Gensim 是一个专为 Python 设计的开源库
开发语言·python·开源
木梓辛铭15 分钟前
Spring Cache的详细使用
java·后端·spring
麻雀无能为力28 分钟前
python自学笔记2 数据类型
开发语言·笔记·python
招风的黑耳41 分钟前
Java集合框架详解与使用场景示例
java·开发语言
xrkhy43 分钟前
java中XML的使用
xml·java·开发语言
抽风的雨6101 小时前
【python基础知识】Day 27 函数专题2:装饰器
开发语言·python
martian6651 小时前
医学影像系统性能优化与调试技术:深度剖析与实践指南
开发语言·系统安全·dicom