惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
P
Proofpoint News Feed
WordPress大学
WordPress大学
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
腾讯CDC
罗磊的独立博客
P
Privacy International News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Latest news
Latest news
C
Cisco Blogs
Project Zero
Project Zero
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
Spread Privacy
Spread Privacy
博客园 - 三生石上(FineUI控件)
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tenable Blog
Know Your Adversary
Know Your Adversary
Security Latest
Security Latest
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
L
Lohrmann on Cybersecurity
IT之家
IT之家
T
Tor Project blog
S
SegmentFault 最新的问题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
L
LINUX DO - 热门话题
C
CERT Recently Published Vulnerability Notes
T
Threat Research - Cisco Blogs
A
Arctic Wolf
D
DataBreaches.Net
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
T
Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
博客园 - 司徒正美
Vercel News
Vercel News
H
Help Net Security
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 Minecraft 认证服务器代理 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间 在WSL2中安装CUDA支持 | 泠泫凝的异次元空间 MinIO 集群部署 | 泠泫凝的异次元空间 vmware 虚拟化平台备份工具 Veeam 12 安装及配置 ubuntu 24.04 安装 nVidia 驱动后网卡消失 XMRig 自编译 | 泠泫凝的异次元空间 云桌面通过组策略统一体验配置 | 泠泫凝的异次元空间 Fortigate SSLVPN 无法连接内网 VNC 服务器 CentOS 7 使用镜像作为本地源并将自身作为YUM源服务器 | 泠泫凝的异次元空间 CentOS 7 离线更新 OpenSSH 服务 使用KubeKey离线部署Kubernetes | 泠泫凝的异次元空间 使用PGP对消息进行签名 | 泠泫凝的异次元空间 禁止MinIO展示桶内文件列表 | 泠泫凝的异次元空间 华为 Fusion Access 云桌面部署 | 泠泫凝的异次元空间 vmware Horizon 模板机部署 | 泠泫凝的异次元空间 vmware Horizon 云桌面与云应用部署 | 泠泫凝的异次元空间 Citrix XenApp 云应用交付 | 泠泫凝的异次元空间 Citrix XenDesktop 云桌面部署 | 泠泫凝的异次元空间 PVE LVM 扩容 | 泠泫凝的异次元空间 Linux 网络聚合(bond方式) | 泠泫凝的异次元空间 Citrix XenServer 7.2 部署教程 | 泠泫凝的异次元空间 在 Windows Server 2019 上安装 AMD 显卡驱动 openEuler 安装并使用 EPEL 源 | 泠泫凝的异次元空间 从已有Linux系统创建带桌面环境的Docker镜像 | 泠泫凝的异次元空间 下载联想原厂镜像及解密 | 泠泫凝的异次元空间 在基于 arm 架构的服务器上安装 PVE | 泠泫凝的异次元空间 自制 EVE-NG 镜像 | 泠泫凝的异次元空间 不使用 Snap 在 ubuntu 上安装 Chromium 浏览器 Fortigate 6.2 固件从 PPPoE 获得 IPv6 地址 Fortigate 手记 | 泠泫凝的异次元空间 Fortigate 通过命令行自定义 NTP 服务器 | 泠泫凝的异次元空间 arm 架构 CentOS 7 安装 MySQL 5.7 版本 ubuntu 20 安装计算卡驱动和 CUDA Toolkit 锐捷诺客云添加设备后一直显示“等待同步” | 泠泫凝的异次元空间 Windows 10 自动登录 | 泠泫凝的异次元空间 OpenWRT IPv6 防火墙设置 | 泠泫凝的异次元空间 k8s 部署踩坑合集 | 泠泫凝的异次元空间 改变 Ubuntu TTY 终端字体 | 泠泫凝的异次元空间 Parted 无损扩容磁盘分区 | 泠泫凝的异次元空间 NTP服务器测试 | 泠泫凝的异次元空间 【相亲相爱】2024祝大家!新年快乐!!! ESXi中重新挂载数据盘 | 泠泫凝的异次元空间 使用 MediaMTX + RTSP 搭建低延迟直播服务器 Firewalld 手记 | 泠泫凝的异次元空间 Ubuntu 上不使用 snapd 安装 Firefox 在 armbian 上安装 xfce 和 VNC 做远程桌面 在 ubuntu 20 上使用 TigerVNC 做远程桌面 在 openEuler 上部署安装 openGauss | 泠泫凝的异次元空间 Wireguard 组网笔记 | 泠泫凝的异次元空间 让特定IP(段)走VPN连接 | 泠泫凝的异次元空间 在Wireguard中排除部分IP(段) | 泠泫凝的异次元空间 CentOS 7 上升级 OpenSSL | 泠泫凝的异次元空间 将黑群晖部署到ESXi(笔记) | 泠泫凝的异次元空间 apk 代码反编译笔记 | 泠泫凝的异次元空间 Windows 搭建 iSCSI 服务器全攻略 | 泠泫凝的异次元空间 CentOS 7 编译安装 Python 3 开源语音识别工具 Whisper | 泠泫凝的异次元空间 Ubuntu 下 Python 编译安装及关联问题解决 | 泠泫凝的异次元空间 Ansible Tower 安装 | 泠泫凝的异次元空间 提高 PowerPoint 导出到图片时的分辨率 | 泠泫凝的异次元空间 利用亚马逊云服务器和VPC 构建安全可靠的虚拟网络 | 泠泫凝的异次元空间 Windows Server 多网卡链路聚合 | 泠泫凝的异次元空间 MT3000路由+移远EC20模块体验 | 泠泫凝的异次元空间 Python安装依赖时出现ctype问题 | 泠泫凝的异次元空间 GL-MT3000日用设置 | 泠泫凝的异次元空间 解除 vCenter 的最低内存限制 | 泠泫凝的异次元空间 跳过Windows 11的强制联网和账户登录 | 泠泫凝的异次元空间 Cloudflare Trace API 信息详解 | 泠泫凝的异次元空间 在CentOS中搭建由nginx反代和Apache2作为后端的Wordpress | 泠泫凝的异次元空间 通过nginx进行文件共享 | 泠泫凝的异次元空间 禁用 sudo 时密码认证 | 泠泫凝的异次元空间
Go语言学习笔记 | 泠泫凝的异次元空间
Lxn's Area · 2022-07-05 · via 泠泫凝的异次元空间

我自己的Go语言学习笔记。

仓库地址

LxnChan/go-learn

每个Go语言项目应至少包含main.gogo.mod文件,前者是入口文件,后者是项目名称、所使用Go版本和需要引入的模块的列表。

main.go应由最少两个结构:包名和main函数组成:

1
2
3
4
5
package main

func main() {

}

可以使用import关键字引入包:

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello world.")
}

其中函数结构体的花括号不能单独一行,必须和func等关键字处于同一行。

所有逻辑必须在函数内部。

变量、常量和赋值

变量

1
2
3
4
5
6
7
8

var name string


var name string = "XiaoMing"


var name = "XiaoMing"

如果变量从未被引用过则编译器可能会报错;

不能同时不写数据类型又不赋值。

也可以在函数中短定义变量,基本结构变量名:=值

1
2
3
4
5
6
7
8
9
package main

import "fmt"

func main() {
if nbhl := 999; nbhl < 5 {
fmt.Println("not true")
}
}

常量

1
2

const name2 string

运算符

算术运算

+-*/

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {

var a int = 10
var b int = 90
fmt.Println(a + b)
fmt.Println(a - b)
fmt.Println(a * b)
fmt.Println(a / b)
}

除四则运算还有一个取余数:

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {

var a int = 5
var b int = 2
fmt.Println(a % b)
}

输出结果是1

自增自减

  • ++:自增,步进值为1;
  • --:自减,步进值为1。

比较(关系运算)

  • >/>=:大于和大于等于;
  • </<=:小于和小于等于;
  • !=/==:不等于和等于;

逻辑运算

下表列出了所有Go语言的逻辑运算符。假定 A 值为 True,B 值为 False。

  • &&:逻辑 AND 运算符:如果两边的操作数都是 True,则条件 True,否则为 False,(A && B) 为 False;
  • ||:逻辑 OR 运算符:如果两边的操作数有一个 True,则条件 True,否则为 False,(A || B) 为 True;
  • !:逻辑 NOT 运算符。如果条件为 True,则逻辑 NOT 条件 False,否则为 True,!(A && B) 为 True。

流程控制

If

基本结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {
if 条件表达式 {
语句
} else if 条件表达式 {
语句
} else {
语句
}

if nbhl := 999; nbhl < 5 {
fmt.Println("not true")
} else {
fmt.Println("666")
}
}

If 语句可以简写为:

1
2
3
4
5

var a bool=true
if a {
fmt.Println("True.")
}

=true部分可忽略。

For

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {

for i:=0; i<5; i++ {
fmt.Println(i)
}
}

break跳出循环

执行到break时立即停止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

func main() {

var c int
for {
c++
fmt.Println(c)
if c == 100 {
break
}
}
}

Switch

1
2
3
4
5
6
7
8
9
10
11
switch 变量 {
case1:
语句
case2:
语句
case3, 值4, 值5:
语句

default:
语句
}

延迟执行

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"



func main() {
fmt.Println("Start...")
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
fmt.Println("end")
}

数组

定义方法:

1
2
3
4
5
6
7
8
9

var arrCity = [2] string {"Beijing", "Tianjin"}

var arrPoint = [...] int {99, 98, 99, 100, 92}

var arrPeople = [...]string{1: "小王", 3: "18", 7: "女"}
fmt.Println("姓名为", arrPeople[1], ",年龄为", arrPeople[3], ",性别为", arrPeople[7])

fmt.Println(len(arrPoint))

多维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16



var arrRobot = [...][4]string{
{"1a96", "2a13", "3a16", "4a19"},
{"1a96b", "2a13b", "3a16b", "4a19b"},
}
fmt.Println(arrRobot[1][2])

for i := 0; i <= len(arrRobot)-1; i++ {
fmt.Println(i)
for j := 0; j <= 3; j++ {
fmt.Println(j)
fmt.Println(arrRobot[i][j])
}
}

获取多维数组元素数量

给定数组,求获取{7, 3, 6}的元素数量。

1
2
3
4
var arrTmp = [][]int{{1, 5}, {7, 3, 6}, {3, 5}}

len(arrTmp[1])

切片

切片的底层本质就是一种数组。

1
2

var sliceAtr = [] int {9, 6, 6}

基于数组得到切片

数组或切片的截取操作。截取操作有带 2 个或者 3 个参数,形如:[i:j][i:j:k],假设截取对象的底层数组长度为 l。在操作符 [i:j] 中,如果 i 省略,默认 0,如果 j 省略,默认底层数组的长度,截取得到的切片长度和容量计算方法是 j-il-i。操作符 [i:j:k],k 主要是用来限制切片的容量,但是不能大于数组的长度 l,截取得到的切片长度和容量计算方法是 j-ik-i

1
2
3
4

var arrNtr = [...]string{"Natsuki", "Torari", "Klier"}
sliceNtr := arrNtr[0:3]
fmt.Println(sliceNtr)

Make函数构造切片

1
2
3
4


var sliceMrr = make([]int, 5, 10)
fmt.Println(sliceMrr)

元素数量是指里面会被初始化进去多少个元素,容量则是指底层数组的最大容量。容量值可省略,省略时容量=元素数量。

上例中输出值应为[0 0 0 0 0],因为初始化进去了五个元素,都是对应类型的默认值。

Map(映射)

  1. 声明Map并初始化

其中键值对数量可以省略。

1
2
3
4
5
6

var mapCity = make(map[string]string, 8)
fmt.Println(mapCity)
mapCity["Beijing"] = "001"
mapCity["Shanghai"] = "002"
fmt.Println(mapCity)
  1. 取出键值
1
fmt.Println(mapCity["Shanghai"])
  1. 判断键值是否存在
1
2
3
4


val, ok := mapCity["ShenYang"]
fmt.Println(ok, val)

Map 遍历

使用for...range...结构来遍历map:

1
2
3
4

for k, v := range mapCity {
fmt.Println(k, v)
}

如果不需要接收其中一个值可以这么写:

1
2
3
4
5
6
7

for k, _ := range mapCity {
fmt.Println(k, v)
}
for _, v := range mapCity {
fmt.Println(k, v)
}

获取切片容量

1
cap()

Map 排序

待完成。

指针

Go语言中指针只有两种操作:取地址(&)和根据地址取值(*)。

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func main() {
a := 666

b := &a

fmt.Println(b, *b)
}

在上例中,a的类型为int,则b(指针)的类型为*int

指针传值

可以通过指针传值修改变量值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import "fmt"

func main() {
var c int = 996
modify1(c)

fmt.Println(c)
modify2(&c)

fmt.Println(c)
}

func modify1(x int) {
x = 955
return
}

func modify2(y *int) {
*y = 1055
return
}

 上一篇

Linux Android Router debian openwrt