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)
}
相关推荐
天若有情6738 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
特种加菲猫9 小时前
继承,一场跨越时空的对话
开发语言·c++
小码哥_常9 小时前
告别MySQL!大厂集体转投PostgreSQL,到底藏着什么玄机?
后端
玩转单片机与嵌入式10 小时前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
茉莉玫瑰花茶10 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
刀法如飞10 小时前
Go数组去重的20种实现方式,AI时代解决问题的不同思路
后端·算法·go
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题】【Java基础篇】第30题:JDK动态代理和CGLIB动态代理有什么区别
java·开发语言·后端·面试·代理模式
swipe11 小时前
别再把 AI 聊天做成纯文本:从 agui 这个前后端项目,拆解“可感知工具调用”的流式 AI UI
后端·langchain·llm
GetcharZp11 小时前
GitHub 爆火!纯 Go 编写的文件同步神器 Syncthing,凭什么成为程序员的标配?
后端