当前位置: 首页 > article >正文

【Go】1、Go语言基础

前言

        本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。


Go语言的特点

          Go语言由Google团队设计,以简洁、高效、并发友好为核心目标。

          具有以下优点:

  1. 语法简单、学习曲线平缓:语法关键字很少,且容易记忆。

  2. 丰富的标准库:大多数情况下不需要外部引入第三方库,直接使用内置标准库即可。

  3. 完善的工具链:包管理、代码格式化、测试、性能分析、文档生成、依赖管理等等,应有尽有。

  4. 静态链接:部署简单,跨平台性强,安全稳定。

  5. 高性能、高并发:接近c的性能,低内存开销。

        下文将介绍Go语言的基本语法,个人感觉更是Go语言现代化(甚至有点超现代化)的体现。


数据类型

        Go语言常用的数据类型:

类型分类

类型名称

关键字/定义

默认值(零值)

特点

布尔型

bool

bool

false

只能为 truefalse

整数型

有符号整数

int, int8, int16, int32, int64

0

根据平台不同,int 可能为 32 或 64 位

无符号整数

uint, uint8, uint16, uint32, uint64

0

无负数范围

浮点型

float32, float64

float32, float64

0.0

float64 精度更高

字符/字节型

byte(别名)

byte

0

uint8 的别名

rune(别名)

rune

0

int32 的别名

字符串型

string

string

""

不可变,UTF-8 编码

错误类型

error

error

nil

内置接口类型,表示错误状态


一、变量定义

        Go语言的变量定义方式有很多种:

1. var name type :用于显式定义变量。

var a, b int = 1, 2

2. name := val :用于隐式定义变量。

f := float32(e)

3. const name type = val : 用于常量定义

const s string = "constant"

二、选择结构

        选择结构分为 if ,switch-case。

1. if

if a == 1 {fmt.Println("真的")
}else {fmt.Println("假的")
}

2. switch-case

a := 2
switch a {
case 1:fmt.Println(1)
case 2:fmt.Println(2)
default:fmt.Println("default")
}

    三、循环结构

            Go语言形式上只有for循环一种循环方式,但是可以改为类似于while的形式循环。

    for i := 1; i < 9; i++ {fmt.Print(i)
    }
    k := 1
    for k < 10 {k++fmt.Println(k)
    }

    四、数组

            Go语言的数组和C很类似,定长数组。

    for i := 1; i < 9; i++ {fmt.Print(i)
    }
    k := 1
    for k < 10 {k++fmt.Println(k)
    }

    五、切片

            Go语言的切片类似于C++的vector、Java中的List,是一种变长数组。

            并且支持类似Python中元组的操作语法。

    s := make([]string, 3)
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println(s[2])
    fmt.Println(len(s))
    s = append(s, "d")
    s = append(s, "e", "f")
    fmt.Println(s)
    c := make([]string, len(s))
    copy(c, s)
    fmt.Println(c)
    fmt.Println(s[2:5])
    fmt.Println(s[:4])
    fmt.Println(s[2:])
    good := []string{"g", "h", "o"}    
    fmt.Println(good)

    六、Map

            和各种语言的Map类似,用于存储键值对。

    mp := make(map[string]int)
    mp["one"] = 1
    mp["two"] = 2
    r, ok := mp["unknow"]
    fmt.Println(r, ok)

    七、range

            Go语言中的range类似于C++的auto,用于快速遍历。

    nums := []int{2, 3, 4}
    sum := 0
    for i, num := range nums {sum += numif num == 2 {fmt.Println("idx:", i, "num:", num)}
    }
    fmt.Println(sum)
    m := map[string]string{"a": "A", "b": "B"}
    for k, v := range m {fmt.Println(k, v)
    }
    for k := range m {fmt.Println(k)
    }

    八、函数

            Go语言的函数,个人认为是Go语言在语法上现代化的标志之一,支持多返回,非常方便。

    func add(a int, b int) (int, string) {return a + b, "ok"
    }

    九、指针

            Go语言的指针类似C的指针,个人非常喜欢指针,一直觉得Java把指针完全去除了也是一个问题。

            在语法上,*作为解引用、&作为引用。

    func add2(a *int) {*a += 2
    }

    十、结构体

            Go语言提供结构体用于类型封装,特殊的是,结构体方法在Go语言中需要写在外面。

    type user struct {name     stringpassword string
    }
    func (this user) checkPassword(password string) bool {return this.password == password
    }

    十一、错误处理

            Go语言为函数提供了一种新奇的try-catch方法。Go语言中,我们在某种方面来讲是在面向异常编程。我们需要通过 error 类型将函数中的错误返回,然后手动处理。

            Go语言提供了一个特殊变量 nil 用于判断是否捕捉到了异常。

    func checkError(password string) (bool, error) {return password == "123", errors.New("not Found")
    }
    v, err := checkError("456")
    if err != nil {fmt.Println(v, err)
    } else {fmt.Print(v)
    }

    十二、特殊函数

    1. json处理

    type userInfo struct {Name stringAge  int `json:"age"`
    }
    func solve14() {a := userInfo{Name: "wang", Age: 18}buf, err := json.Marshal(a)if err != nil {panic(err)}fmt.Println(buf)fmt.Println(string(buf))var b userInfoerr = json.Unmarshal(buf, &b)if err != nil {panic(err)}fmt.Println(b)
    }

    2. 时间处理

    fmt.Println(time.Now())
    fmt.Println(time.Now().Unix())
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC))

    3. 字符串转数字

    fmt.Println(strconv.ParseInt("111", 10, 64))
    fmt.Println(strconv.ParseFloat("111.11", 64)
    fmt.Println(strconv.ParseInt("0x1000", 0, 64
    fmt.Println(strconv.Atoi("111"))

    4. 获取线程信息

    fmt.Println(os.Args)
    fmt.Println(os.Getenv("PATH"))

            下篇将对学习的语法结合视频进行综合实践。

    相关文章:

    【Go】1、Go语言基础

    前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言的特点 Go语言由Google团队设计&#xff0c;以简洁、高效、并发友好为核心目标。 具有以下优点&#xff1a; 语法简单、学习曲线平缓&#xff1a;语法关键字很少&#xff0c;且…...

    RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性

    幂等性保障 幂等性&#xff08;Idempotency&#xff09; 是计算机科学和网络通信中的一个重要概念&#xff0c;指的是某个操作无论被执行多少次&#xff0c;所产生的效果与执行一次的效果相同。 应用程序的幂等性&#xff1a; 在应用程序中&#xff0c;幂等性就是指对一个系统…...

    java基础知识回顾1(可用于Java基础速通)考前,面试前均可用!

    目录 一、初识java 二、基础语法 1.字面量 2.变量 3.关键字 4.标识符 声明&#xff1a;本文章根据黑马程序员b站教学视频做的笔记&#xff0c;可对应课程听&#xff0c;课程链接如下: 02、Java入门&#xff1a;初识Java_哔哩哔哩_bilibili 一、初识java Java是美国 sun 公…...

    云原生CICD-Tekton入门到精通

    文章目录 一、Tekton介绍二、Tekton组件介绍三、执行流程四、安装Tekton管道五、安装Tekton Dashboard六、安装Tekton Cli七、运行单Task八、运行流水线九、在流水线中使用secret十、taskSpec、taskRef、pipelineRef、pipelineSpec使用pipelineRef与taskRef结合使用(推荐)pipel…...

    CMake跨平台编译生成:从理论到实战

    一、引言 在当今软件开发中&#xff0c;跨平台开发已成为常态。无论是需要在Windows、Linux、macOS等多操作系统上运行&#xff0c;还是在不同的硬件架构&#xff08;如x86、ARM等&#xff09;间部署&#xff0c;跨平台编译生成都是一个无法回避的关键问题。CMake&#xff0c;…...

    MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱

    在技术的江湖里&#xff0c;变革的浪潮总是一波接着一波。最近&#xff0c;模型上下文协议&#xff08;MCP&#xff09;的传输机制就搞出了大动静&#xff0c;决定和传统的服务器发送事件&#xff08;SSE&#xff09;说拜拜&#xff0c;转身拥抱 Streamable HTTP&#xff0c;这…...

    opencv 图像的平移和旋转

    warpAffine函数讲解,图片可自行下载&#xff0c;也可用自己的图片 原图im 平移im_shifted 旋转im_rotated # 图像仿射变换 # 步骤&#xff1a; 读取图像 -> 创建仿射变换矩阵 -> 仿射变换计算 # 平移变换矩阵&#xff1a;一种写法&#xff0c;直接写死 # 旋转变…...

    IDEA2025版本使用Big Data Tools连接Linux上Hadoop的HDFS

    目录 Windows的准备 1. 将与Linux上版本相同的hadoop压缩包解压到本地 ​编辑2.设置$HADOOP HOME环境变量指向:E:\hadoop-3.3.4 3.下载hadoop.dll和winutils.exe文件 4.将hadoop.dll和winutils.exe放入$HADOOP HOME/bin中 IDEA中操作 1.下载Big Data Tools插件 2.添加并连…...

    hysAnalyser特色的TS流编辑、剪辑和转存MP4功能说明

    摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具&#xff0c;融合了常规TS文件的剪辑&#xff0c;转存功能&#xff0c;可用于平常的视频开发和测试。 本文详细阐述了对MPEG-TS 流的节目ID&#xff0c;名称&#xff0c;PID&#xff0c;时间戳&#xff0c;流类型&#xff…...

    Day125 | 灵神 | 二叉树 | 二叉树中的第K大层和

    Day125 | 灵神 | 二叉树 | 二叉树中的第K大层和 2583.二叉树中的第K大层和 2583. 二叉树中的第 K 大层和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 把每层的结果都放到一个vector数组里面&#xff0c;然后排序这个vector数组&#xff0c;返回第K大的元素即…...

    Google机器学习实践指南(学习速率篇)

    &#x1f525;Google机器学习核心概念精讲&#xff08;学习速率&#xff09; Google机器学习实战(7)-5分钟掌握学习速率。 学习速率&#xff1a;模型训练的关键超参数 学习速率是指在训练模型时用于梯度下降的一个标量。在每次迭代期间&#xff0c;梯度下降法都会将学习速率…...

    JS实现直接下载PDF文件

    pdf文件通过a标签直接下载会打开页面&#xff0c;所以&#xff0c;请求该文件的blob文件流数据&#xff0c;再通过window.URL.createObjectURL转成链接&#xff0c;就可以直接下载了。 只需要替换url和文件名称就行&#xff0c;文件名的后缀记得要写上pdf&#xff0c;不然会变成…...

    使用KubeKey快速部署k8s v1.31.8集群

    实战环境涉及软件版本信息&#xff1a; 使用kubekey部署k8s 1. 操作系统基础配置 设置主机名、DNS解析、时钟同步、防火墙关闭、ssh免密登录等等系统基本设置 dnf install -y curl socat conntrack ebtables ipset ipvsadm 2. 安装部署 K8s 2.1 下载 KubeKey ###地址 https…...

    FreeSWITCH 纯内网配置

    纯内网&#xff0c;且同一个网段&#xff0c;Fs 可简化配置&#xff0c;要点是: 1. 不需要事先配置 directory&#xff0c;任意号码都可以注册&#xff0c;且无挑战 2. 呼叫无挑战 不需要考虑那么多安全问题 配置如下&#xff1a; 1. 全局变量 <X-PRE-PROCESS cmd"…...

    leetcode hot100:十四、解题思路大全:真·大全!

    因为某大厂的算法没有撕出来&#xff0c;怒而整理该贴。部分题目有python版本的AC代码。本贴耗时4天呜呜呜 1.哈希 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下…...

    kali的简化安装

    首先点击kali的官网 https://www.kali.org/get-kali/#kali-platforms 点击虚拟机版本 下载VMware版本的压缩包 解压后 点击 后缀名为 .vmx的文件 原始账号密码为 kali kali 这样安装 就不需要我们再去配置镜像 等等复杂操作了...

    交换机的连接方式堆叠和级联

    以下是交换机的堆叠和级联各自的优缺点总结&#xff0c;帮助快速对比选择&#xff1a; ​一、堆叠&#xff08;Stacking&#xff09;​ ​优点 ​高性能 堆叠链路带宽高&#xff08;如10G/40G/100G&#xff09;&#xff0c;成员间数据通过背板直连&#xff0c;无带宽瓶颈。支…...

    Vortex GPGPU的github流程跑通与功能模块波形探索(三)

    文章目录 前言一、./build/ci下的文件结构二、基于驱动进行仿真过程牵扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 额外牵扯到的ramulator2.3.1 ramulator简单介绍2.3.2 ramulator使用方法2.3.3 ramulator的输出2.3.4 ramulator的复现2.3.4.1 调试与验证&#xff08;第 4.1 节…...

    React深度解析:Hooks体系与Redux Toolkit现代状态管理实践

    前言 React作为当今最流行的前端框架之一&#xff0c;其生态体系不断演进&#xff0c;为开发者提供了更高效、更优雅的解决方案。本文将深入探讨React的两大核心主题&#xff1a;Hooks体系&#xff08;特别是useState和useEffect&#xff09;以及Redux Toolkit现代状态管理方案…...

    实用蓝牙耳机哪款好?先做好使用场景分析!

    市面上的蓝牙耳机款式繁多&#xff0c;618到来之际&#xff0c;消费者如何选择适合自己的蓝牙耳机&#xff1f;实用蓝牙耳机哪款好&#xff1f;关键在于做好使用场景分析&#xff01;今天&#xff0c;就带大家结合不同的使用场景&#xff0c;分享三款倍思音频的精品蓝牙耳机。 …...

    Rules and Monetization

    The system creates rules that allow them to monetize. The system doesn’t just enforce rules — it creates them strategically to monetize control. &#x1f527; How It Works: Invent a rule (e.g., “You need a permit to sell food.”)Claim it’s for safety …...

    防火墙NAT地址组NAT策略安全策略

    本文仅供学习交流&#xff0c;所涉及的知识技术产权归属华为技术有限公司所有&#xff01;&#xff01;&#xff01; 本文仅供学习交流&#xff0c;所涉及的知识技术产权归属华为技术有限公司所有&#xff01;&#xff01;&#xff01; 本文仅供学习交流&#xff0c;所涉及的…...

    python开发环境管理和包管理

    在 Python 开发中&#xff0c;环境管理 和 包管理 是两个非常重要的概念。它们帮助开发者&#xff1a; 这里写目录标题 一、什么是 Python 环境管理&#xff1f;二、什么是 Python 包管理&#xff1f;三、常见文件说明&#xff08;用于包管理和环境配置&#xff09;四、典型流程…...

    Windows 使用 WSL 安装 Ubuntu

    一&#xff0c;前言 Windows 上轻松跑 Linux 又不想用笨重的VMware 和VirtualBox &#xff0c;怎么办&#xff1f; 开源项目 Windows Subsystem for Linux (WSL)。它解决了许多开发者在 Windows 和 Linux 间切换的痛点&#xff0c;实现在 Windows 上无缝跑 Linux 工具和命令。…...

    .jsx文件和.tsx文件有什么区别

    .tsx 和 .jsx 是两种用于 React 开发的 JavaScript 文件扩展名&#xff0c;它们的主要区别在于对 TypeScript 的支持以及使用场景。以下是详细对比&#xff1a; 定义 .jsx&#xff1a;是 JavaScript XML 的缩写&#xff0c;用于在 JavaScript 中编写类似 XML 的 JSX 语法&…...

    第九天的尝试

    目录 一、每日一言 二、练习题 三、效果展示 四、下次题目 五、总结 一、每日一言 创造美好的代价是努力&#xff0c;失望以及毅力&#xff0c;首先是痛苦&#xff0c;然后才是欢乐。 时间是快的&#xff0c;看怎么利用&#xff0c;安排好一切事情&#xff0c;才能从容面对…...

    每日算法 -【Swift 算法】寻找字符串中最长回文子串(三种经典解法全解析)

    &#x1f9e9; 最长回文子串问题&#xff1a;三种经典解法全解析&#xff08;含代码注释&#xff09; 本文将系统讲解“最长回文子串”问题的三种常见解法&#xff1a;中心扩展法、动态规划、马拉车算法&#xff08;Manacher’s Algorithm&#xff09;&#xff0c;并进行对比与…...

    《Cesium全生态解析:从入门到精通的3D地理空间开发指南》

    在WebGL、GIS和三维可视化技术高速发展的今天&#xff0c;Cesium 已经从一个开源地图引擎成长为全球开发者构建数字地球的核心工具。从地球到火星&#xff0c;从网页到游戏引擎&#xff0c;Cesium以其跨平台、高精度和无限扩展性&#xff0c;重新定义了我们对空间数据的交互方式…...

    pytorch LSTM 结构详解

    最近项目用到了LSTM &#xff0c;但是对LSTM 的输入输出不是很理解&#xff0c;对此&#xff0c;我详细查找了lstm 的资料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…...

    流程自动化引擎:重塑企业数字神经回路

    在数字经济高速发展的今天&#xff0c;企业运营的核心逻辑正在经历一场静默的革命。流程自动化引擎作为这场变革的中枢神经系统&#xff0c;通过智能化的技术手段重构企业的业务逻辑与决策链路&#xff0c;将原本离散的“数字神经元”编织成高效协同的神经网络。这种技术不仅打…...