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)
}
相关推荐
橙橙笔记14 分钟前
QT的安装
开发语言·qt·安装·软件
掘金者阿豪21 分钟前
Codex 开放 1M 上下文后,我折腾了一圈才发现:新版根本不是网上教的那样配置
后端
爱勇宝29 分钟前
《道德经》第 10 章:真正成熟的人,能成事但不控制一切
前端·后端·程序员
格林威36 分钟前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
兔兔兔兔11 小时前
记录C++ 8
开发语言·c++
六边形6661 小时前
独立开发不知道做什么?使用 TRAE Work 抓取差评痛点,快速跑通产品立项流
前端·后端·面试
高频因子挖掘机1 小时前
量化交易系统的数据层和策略层如何解耦?从紧耦合泥潭到优雅分层架构
后端·github
临江仙4551 小时前
同一个 AI Agent 如何同时服务 Web、微信和 QQ:PureChat 的渠道架构实践
前端·人工智能·后端
我的AI队友1 小时前
DeepSeek Harness 接钉钉通知,踩了两个坑:签名不匹配 + 纯对话刷屏
后端·deepseek