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)
}
相关推荐
源码哥_博纳软云16 分钟前
JAVA同城服务场馆门店预约系统支持H5小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
学会沉淀。24 分钟前
Docker学习
java·开发语言·学习
西猫雷婶1 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv
kiiila1 小时前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱581361 小时前
InnoDB 的页分裂和页合并
数据库·后端
小_太_阳1 小时前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾1 小时前
scala借阅图书保存记录(三)
开发语言·后端·scala
唐 城2 小时前
curl 放弃对 Hyper Rust HTTP 后端的支持
开发语言·http·rust
星就前端叭2 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc