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)
}
相关推荐
Re.不晚几秒前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会2 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香5 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??9 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
码农派大星。10 分钟前
Spring Boot 配置文件
java·spring boot·后端
远望清一色25 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself35 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go