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

Go语言24小时极速学习教程(一)基础语法

Go语言(也称为Golang)是一种由Google开发的编程语言,以其简洁、高效和并发支持而闻名。从本文开始,将带你快速完成Go语言的学习,如果你之前有过Java或者C语言的基础,学习它将很容易,本教程忽略环境搭建步骤,直奔主题。

1. 程序结构

  • 包声明:每个Go程序都从package声明开始,通常是package main
  • 导入包:使用import关键字导入其他包。
  • 函数:使用func关键字定义函数。
  • 主函数:程序的入口点是func main()
package main
import "fmt"
func main() {fmt.Println("Hello, World!")
}

2. 变量和常量

  • 变量声明:使用var关键字声明变量,可以指定类型或使用类型推断。
  • 短变量声明:在函数内部可以使用:=进行短变量声明。
  • 常量:使用const关键字声明常量。
var a int = 10
b := 20
const c = 30

3. 数据类型

  • 基本类型:整数int, 浮点float64, 布尔bool, 字符串string
  • 复合类型:数组array, 切片slice, 键值对映射表map, 结构体struct, 接口interface
  • 注意:类型都是写在变量名后面,这和很多其他强类型语言不同
var i int = 10
var f float64 = 3.14
var s string = "Hello"
var b bool = true

4. 控制结构

  • 条件语句if, else if, else
  • 循环语句for循环(Go中没有while循环)。
  • 选择语句switch
if a > b {fmt.Println("a更大")
} else if a < b {fmt.Println("b更大")
} else {fmt.Println("a和b相等")
}for i := 0; i < 5; i++ {fmt.Println(i)
}switch day {
case 1:fmt.Println("今天是星期一")
default:fmt.Println("今天不是星期一")
}

5. 函数

  • 函数定义:使用func关键字定义函数,可以有多个参数和返回值。
  • 多返回值:Go支持函数返回多个值,要划重点
  • 匿名函数:可以定义匿名函数并赋值给变量。
func add(x int, y int) int {return x + y
}func swap(x, y string) (string, string) {return y, x
}add := func(x, y int) int {return x + y
}

6. 错误处理

  • 错误类型:Go使用error类型来处理错误。
  • 错误返回:函数可以返回error作为最后一个返回值。
func divide(a, b int) (int, error) {if b == 0 {return 0, fmt.Errorf("除数不能为0")}return a / b, nil
}

7. 并发

  • 协程 Goroutine [ɡəʊruːˈtiːn]:使用go关键字启动一个并发执行的函数,相当于轻量级线程。
  • Channel:使用chan关键字创建通道,用于在Goroutine之间传递数据。
go func() {fmt.Println("这是并发运行的")
}()ch := make(chan int)
go func() {ch <- 42
}()
value := <-ch

8. 包和模块

  • :Go程序由包组成,包可以包含多个文件。
  • 模块:使用go mod管理依赖和版本。
import "fmt"
import "math"

9. 指针

  • 指针类型:使用*表示指针类型,使用&获取变量的地址。
var p *int
i := 42
p = &i
fmt.Println(*p) // 输出42

10. 结构体和方法

  • 结构体:使用typestruct关键字定义结构体。
  • 方法:可以为结构体定义方法。
  • 注意:和Java、C#的编写习惯不同,一个结构体的方法并不会把代码写在结构体的定义代码段上,而是类似于挂载的方式挂到结构体上。
type Person struct {Name stringAge  int
}func (p Person) SayHello() {fmt.Printf("你好,我的名字是 %s\n", p.Name)
}

11. 接口

  • 接口定义:使用interface关键字定义接口。
  • 接口实现:类型通过实现接口的方法来满足接口,并非像Java和C#那样显式的声明结构体与接口的依赖关系,所以和上一段的写法没什么本质的区别。
type Speaker interface {Speak() string
}type Dog struct {Name string
}func (d Dog) Speak() string {return "旺!"
}

12. 错误处理

  • 错误类型:Go使用error类型来处理错误。
  • 错误返回:函数可以返回error作为最后一个返回值。
func divide(a, b int) (int, error) {if b == 0 {return 0, fmt.Errorf("除数不能为0")}return a / b, nil
}

13. 标准库

  • fmt:格式化输入输出。
  • math:数学函数。
  • os:操作系统交互。
  • net/http:HTTP客户端和服务器。
fmt.Println("Hello, World!")

14. 注释

  • 单行注释:使用//
  • 多行注释:使用/* ... */
// 这是一个单行注释/*
这是一个
多行注释
*/

相关文章:

Go语言24小时极速学习教程(一)基础语法

Go语言&#xff08;也称为Golang&#xff09;是一种由Google开发的编程语言&#xff0c;以其简洁、高效和并发支持而闻名。从本文开始&#xff0c;将带你快速完成Go语言的学习&#xff0c;如果你之前有过Java或者C语言的基础&#xff0c;学习它将很容易&#xff0c;本教程忽略环…...

LLMs之Code:Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code&#xff1a;Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇论文介绍了Qwen2.5-Coder系列模型&#xff0c;这是一个针对代码生成的强大开源大型语言模型。 >> 背景痛点&#xff1a;现有代码大型语言模型的不足&#xff1a;虽然…...

pytest结合allure做接口自动化

这是一个采用pytest框架&#xff0c;结合allure完成接口自动化测试的项目&#xff0c;最后采用allure生成直观美观的测试报告&#xff0c;由于添加了allure的特性&#xff0c;使得测试报告覆盖的内容更全面和阅读起来更方便。 1. 使用pytest构建测试框架&#xff0c;首先配置好…...

TypeScript简介:TypeScript是JavaScript的一个超集

官方描述&#xff1a;TypeScript 是 JavaScript 的一个超集 GitHub官网&#xff1a;https://github.com/Microsoft/TypeScript TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript 是 JavaScript 的一个超集&#xff0c;支持 EC…...

【循环测试试题2】小X与三次方

题目描述 卡卡西要过 10 岁生日啦&#xff01;今年&#xff0c;她特别想要一份与众不同的礼物&#xff0c;那就是一条能在阳光下发出五光十色耀眼光芒的水晶项链。她把这个想法告诉了妈妈。妈妈对卡卡西神秘的一笑&#xff0c;透露道&#xff1a;“邻居芭比阿姨家有个后花园。…...

【Python · PyTorch】卷积神经网络(基础概念)

【Python PyTorch】卷积神经网络 CNN&#xff08;基础概念&#xff09; 0. 生物学相似性1. 概念1.1 定义1.2 优势1.2.1 权重共享1.2.2 局部连接1.2.3 层次结构 1.3 结构1.4 数据预处理1.4.1 标签编码① One-Hot编码 / 独热编码② Word Embedding / 词嵌入 1.4.2 归一化① Min-…...

深入描述dts和dtsi的区别

QA&#xff1a;dts和dtsi的区别 在嵌入式 Linux 系统中&#xff0c;DTS&#xff08;Device Tree Source&#xff09;和 DTSI&#xff08;Device Tree Source Include&#xff09;是描述硬件设备树的文件格式。它们本质上是同一种语法的文件&#xff0c;但在使用上有一定区别。…...

京准时钟:一种北斗卫星校时器的结构设计

京准时钟&#xff1a;一种北斗卫星校时器的结构设计 京准时钟&#xff1a;一种北斗卫星校时器的结构设计 1、有关时间的一些基本概念&#xff1a; 时间与频率之间互为倒数关系&#xff0c;两者密不可分&#xff0c;时间标准的基础是频率标准&#xff0c;由晶体振荡器决定时间…...

【WiFi】ubuntu20.4 WiFi6 无线抓包环境搭建及使用

环境说明 笔记本电脑&#xff0c;无线网卡AX200&#xff0c;安装ubuntu20.04 安装无线网卡工具aircrack-ng sudo apt-get install aircrack-ng 安装wireshark sudo add-apt-repository ppa:wireshark-dev/stable sudo apt update sudo apt -y install wireshark sudo apt -…...

《Java核心技术 卷I》用户界面AWT事件继承层次

AWT事件继承层次 EventObject类有一个子类AWTEvent&#xff0c;它是所有AWT事件类的父类。 Swing组件会生成更多其他事件对象&#xff0c;都直接拓展自EventObject而不是AWTEvent。 AWT将事件分为底层(low-level)事件和语义事件。 语义事件&#xff1a;表示用户的动作事件&…...

蓝牙 HFP 协议详解及 Android 实现

文章目录 前言一、什么是蓝牙 HFP 协议&#xff1f;HFP 的核心功能HFP 的核心功能HFP 在 Android 中的典型应用场景 二、HFP 协议的工作流程HFP 的连接流程 三、HFP 在 Android 的实现1. 检查蓝牙适配器状态2. 发现并检测支持 HFP 的设备3. 获取 BluetoothHeadset 服务4. 连接设…...

sqli-labs靶场17-20关(每日四关)持续更新!!!

Less-17 打开靶场&#xff0c;发现页面比之前多了一行字 翻译过来就是&#xff0c;密码重置&#xff0c;大家肯定会想到&#xff0c;自己平时在日常生活中怎么密码重置&#xff0c;肯定是输入自己的用户名&#xff0c;输入旧密码&#xff0c;输入新密码就可以了&#xff0c;但…...

动态规划-完全背包问题——518.零钱兑换II

1.题目解析 建议先看 322.零钱兑换可以 更加轻松的理解本题 题目来源 518.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 本题要求返回所有情况&#xff0c;所以dp值就代表所有的方法数&#xff0c;即 dp[i][j]&#xff1a;在[1,i]个硬币中选择不同面值的硬币&#xff0c…...

[模板总结] - 单向链表LinkedList操作

题目汇总 Leetcode 21, 82, 160, 206, 237, 268 Leetcode 21. 合并两个有序链表 归并排序的思路&#xff0c;创建一个哨兵节点从两个链表中按大小插入即可。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(…...

fastadmin多个表crud连表操作步骤

1、crud命令 php think crud -t xq_user_credential -u 1 -c credential -i voucher_type,nickname,user_id,voucher_url,status,time --forcetrue2、修改控制器controller文件 <?phpnamespace app\admin\controller;use app\common\controller\Backend;/*** 凭证信息…...

山西省网络建设与运维第十八届职业院校技能大赛(样题)

集团计划把部分业务由原有的 X86 架构服务器 上迁移到 ARM 架构服务器上&#xff0c;同时根据目前的部分业务需求进行了部分 调整和优化。 一、 X86 架构计算机安装与管理 1、PC1系统为 ubuntu-desktop-amd64 系统&#xff0c;登录用户为 xiao&#xff0c;密码为 Key-1122。在对…...

服务端高并发分布式结构进阶之路

序言 在技术求知的旅途中&#xff0c;鉴于多数读者缺乏在中大型系统实践中的亲身体验&#xff0c;难以从宏观角度把握某些概念&#xff0c;因此&#xff0c;本文特选取“电子商务应用”作为实例&#xff0c;详细阐述从百级至千万级并发场景下服务端架构的逐步演变历程。同时&am…...

分布式微服务项目,同一个controller不同方法间的转发导致cookie丢失,报错null pointer异常

源码&#xff1a; /***添加商品进入购物车*/ GetMapping("/addToCart") public String addToCart(RequestParam("num") Integer num, RequestParam("skuId") Long skuId, RedirectAttributes redirectAttributes) {System.out.println("nu…...

STM32 ADC --- 任意单通道采样

STM32 ADC — 单通道采样 文章目录 STM32 ADC --- 单通道采样cubeMX配置代码修改&#xff1a;应用 使用cubeMX生成HAL工程 需求&#xff1a;有多个通道需要进行ADC采样&#xff0c;实现每次采样只采样一个通道&#xff0c;且可以随时采样不同通道的功能。 cubeMX配置 这里我们…...

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提&#xff1a; VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息&#xff0c;然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明&#xff1a; 1.保存文件&#xff1a;按 Ctrl O&#xff0c;然后按 Enter 来保存文件。 2.退出编辑器&#xf…...

蓝桥杯每日真题 - 第7天

题目&#xff1a;&#xff08;爬山&#xff09; 题目描述&#xff08;X届 C&C B组X题&#xff09; 解题思路&#xff1a; 前缀和构造&#xff1a;为了高效地计算子数组的和&#xff0c;我们可以先构造前缀和数组 a&#xff0c;其中 a[i] 表示从第 1 个元素到第 i 个元素的…...

【Git】Git Clone 指定自定义文件夹名称:详尽指南

目录 引言一、git clone 基本语法二、默认行为&#xff1a;没有指定文件夹名称时三、如何指定自定义文件夹名称四、高级使用技巧&#xff1a;动态文件夹名称4.1 基于日期命名文件夹4.2 基于版本标签&#xff08;Tag&#xff09;动态命名文件夹4.1 基于日期命名文件夹4.2 基于版…...

终端快捷键学习笔记

以下是优化润色后的内容&#xff1a; 终端快捷键学习笔记 前言 终端&#xff08;Terminal&#xff09;是开发者、系统管理员以及技术人员常用的重要工具&#xff0c;它为我们提供了直接与操作系统交互的方式。不同操作系统中的终端使用体验存在差异&#xff0c;尤其在 Linux、…...

Go语言24小时极速学习教程(四)MySQL数据库的增删改查

通过前几篇想必你已经知道该如何使用Go语言写一些简单的程序了&#xff0c;那么从这一篇开始&#xff0c;我们开始探究如何用go语言能够写真正的企业级应用。第一步我们实现先能让程序对数据库进行增删改查&#xff0c;这里以MySQL为例。 1. 导入必要的包 首先需要导入databa…...

04 - Clickhouse-21.7.3.14-2单机版安装

目录 一、准备工作 1、确定防火墙处于关闭状态 2、CentOS 取消打开文件数限制 3、安装依赖 4、CentOS取消SELINUX 二、单机安装 2.1、下载安装 2.2、安装这4个rpm包 2.3、修改配置文件 2.4、启动服务 2.5、关闭开机自启 2.6、使用Client连接server 一、准备工作 1…...

多项式回归

以多元线性回归和特征工程的思想来想出一种称为多项式回归的新算法&#xff0c;它可以让您拟合曲线&#xff0c;非线性函数&#xff0c;您的数据。假设你有一个住房看起来像这样的数据集&#xff0c;其中特征x是以平方英尺为单位的大小。它看起来不像一条直线非常适合这个数据集…...

vscode报错:Connecting with SSH time-out.

当我们在vscode上远程连接&#xff08;Remote_SSH&#xff09;Linux时&#xff0c;如果直接点关闭vscode,下次远程登陆后&#xff0c;就会弹出以下界面&#xff0c; 点击重新加载window就会弹出以下报错&#xff1a; 这是因为我们没有正常关闭remote-ssh, 导致linux上有多个vsc…...

python可视化将多张图整合到一起(画布)

这周有点事忙着&#xff0c;没时间重温刚结束的Mathurcup数学建模&#xff0c;这两天也是再看了下&#xff0c;论文还是赶紧挺烂的&#xff0c;但比国赛又有进步&#xff08;说起国赛又不得不抱怨了&#xff0c;基本其余省份都发了&#xff0c;但江西......哎&#xff09;。哎&…...

C函数如何返回参数lua使用

返回基本数据类型 数字类型&#xff08;整数和浮点数&#xff09; 在C函数中&#xff0c;可以使用lua_pushnumber函数将一个数字&#xff08;整数或浮点数&#xff09;压入Lua栈。当C函数返回后&#xff0c;Lua会从栈顶获取这个数字作为返回值。例如&#xff0c;以下是一个简单…...

pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告

conftest.py文件简介 conftest.py文件用于定义共享设置、夹具和钩子函数。 可以跨.py文件调用&#xff0c;有多个.py文件调用时&#xff0c;可让conftest.py只调用了一次fixture&#xff0c;或调用多次fixture&#xff1b; conftest.py与运行的用例要在同一个pakage下&#xf…...