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

Golang 语法入门

Golang 语法入门

Hello World

package mainimport "fmt"func main() {fmt.Println("hello world")
}

变量

package mainimport "fmt"// 全局变量
var ans = 123
var cnt intfunc main() {// 单个局部变量a := 114514// 多个局部变量b, c := 114, 514fmt.Println(a, b, c)fmt.Println(ans)fmt.Println(cnt)
}

常量

使用 const 关键字

package mainimport "fmt"func main() {const PI = 3.14fmt.Println(PI)
}

函数

多返回值

package mainimport "fmt"// 前面是入参,后面是返回值
func getUpDown(n float64) (x float64, y float64) {return n - 1, n + 1
}func main() {const PI = 3.14fmt.Println(getUpDown(PI))
}

init 和 import 函数

引用传参

Go 默认为值传递,传指针可以实现引用传递。

  • 函数中引用传递 *
  • 变量指向地址 &
func swap(x *int, y *int) {var temp inttemp = *x    /* 保存 x 地址上的值 */*x = *y      /* 将 y 值赋给 x */*y = temp    /* 将 temp 值赋给 y */
}func main() {// ...swap(&a, &b)
}

defer

defer 初识

return 后的调用,类似于 Java 的 finally。在 return 之后执行。

如果一个函数中有多个defer语句,它们会以栈顺序执行。

func Demo(){defer fmt.Println("1")defer fmt.Println("2")defer fmt.Println("3")defer fmt.Println("4")
}func main() {Demo()
}
4
3
2
1

recover 错误拦截

运行时panic异常一旦被引发就会导致程序崩溃。

recover 函数可以在当前的程序从运行时 panic 的状态中恢复并重新获得流程控制权。

recover只有在defer调用的函数中有效。

package mainimport "fmt"func Demo(i int) {// 必须放在最上面defer func() {err := recover()if err != nil {fmt.Println("err:", err)}}()var arr [10]intfmt.Println(arr[i])
}func main() {Demo(10)fmt.Println("正常运行")
}
err: runtime error: index out of range [10] with length 10
正常运行

slice 切片

slice 定义

Slice 的切片相当于动态数组

// 先定义再初始化
var arr []int
arr = make([]int, 3)// 定义同时初始化
arr2 := make([]int, 3)// 获取长度
len(arr)
// 获取容量
cap(arr)

append & copy

copy:拷贝切片

append:追加元素

对于追加不需要考虑容量限制,切片会自动扩容(原容量2倍)。

package mainimport "fmt"func main() {var arr []int// 需要赋值给自己(语法难崩...)arr = append(arr, 1, 2, 3)fmt.Println(arr)
}

Map 集合

吐槽:Map 叫集合、Slice 叫切片…终于知道为什么要说英文名了 😅🙏🏻

package mainimport "fmt"func main() {// key: string// value: intm := make(map[string]int, 10)m["apple"] = 1m["banana"] = 2// 字面量创建n := map[string]int{"apple":  1,"banana": 2,}// 遍历 Mapfor k, v := range m {fmt.Printf("key=%s, value=%d\n", k, v)}// 删除元组delete(n, "apple")
}

struct 结构体

结构体在函数入参中是值传递

package mainimport "fmt"type Book struct {title stringprice float64
}func increasePrice(book *Book) {book.price *= 1.2
}func main() {var book Bookbook.title = "《Golang 从入门到字节》"book.price = 100fmt.Println(book)// 结构体是值传递!!!increasePrice(&book)fmt.Println(book)}
{《Golang 从入门到字节》 100}
{《Golang 从入门到字节》 120}

面向对象

封装

Golang 不是面向对象编程的语言,使用结构体作为对象。

首字母大写表示 public,首字母小写表示 private。

package mainimport "fmt"type Student struct {name  stringage   intscore int
}func (s *Student) GetName() string {return s.name
}func (s *Student) SetName(name string) {s.name = name
}func (s *Student) Show() {fmt.Println(*s)
}func main() {student := Student{name:  "wmh",age:   22,score: 100,}fmt.Println(student.GetName())student.SetName("yixuan")student.Show()
}

继承

😅 这语法要吐了

package mainimport "fmt"type Student struct {name  stringage   intscore int
}func (s *Student) GetName() string {return s.name
}func (s *Student) SetName(name string) {s.name = name
}func (s *Student) Show() {fmt.Println(*s)
}// 继承 Student
type CollageStudent struct {Studentclass string
}// 重写子类方法
func (s *CollageStudent) Show() {fmt.Println(*s)
}func main() {var stu CollageStudentstu.age = 22stu.class = "软件工程"stu.name = "wmh"fmt.Println(stu.GetName())stu.SetName("yixuan")stu.Show()
}

多态

多态三要素

使用 interface 接口实现多态

  • 定义接口
  • 子类实现了父类的全部接口方法
  • 接口指针指向子类的具体数据变量
package mainimport "fmt"// 接口
type Person interface {talk()
}type Student struct {name string
}func (stu *Student) talk() {fmt.Println(stu.name + ": student talk")
}type Teacher struct {name string
}func (tea *Teacher) talk() {fmt.Println(tea.name + ": teacher talk")
}func main() {var p1, p2 Personp1 = &Student{"wmh"}p1.talk()p2 = &Teacher{"yx"}p2.talk()
}
wmh: student talk
yx: teacher talk
空接口

可以使用 interface{}引用任意类型数据(类似于 Java 的 Object,或者 TS 的 any)

package mainimport "fmt"func myPrint(arg interface{}) {fmt.Println("------")fmt.Println(arg)fmt.Println("------")
}func main() {n := 114514str := "wahaha"myPrint(n)myPrint(str)
}

反射

类型断言

将空接口类型(类比 Object)判断并转换成具体子类

func main() {var x interface{} = 114514n, ok := x.(int)fmt.Println(n, ok)// 114514 truevar y interface{} = "114514"m, ok := y.(int)fmt.Println(m, ok)// 0 false
}

相关文章:

Golang 语法入门

Golang 语法入门 Hello World package mainimport "fmt"func main() {fmt.Println("hello world") }变量 package mainimport "fmt"// 全局变量 var ans 123 var cnt intfunc main() {// 单个局部变量a : 114514// 多个局部变量b, c : 114, …...

Filebeat+Kafka+ELK

架构: 部署: #配置nginx,部署filebeat systemctl stop firewalld setenforce 0 systemctl restart nginx#解压filebeat tar -xf filebeat-6.7.2-linux-x86_64.tar.gz mv filebeat-6.7.2-linux-x86_64 filebeat#日志收集 cd firebeat vim fil…...

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时,对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力,还能帮助用户快速识别和区分不同类别的数据,增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…...

家里浮毛粉尘到处飞?宠物空气净化器出动帮你解决

由于家里收养的十几只流浪猫咪夏季掉毛非常严重,整个房子弥漫着猫毛,而且这十几只里面有七八只还是长毛的品种,掉落的毛发都因为太长而直接掉落成毛团,而短毛的那几只也在掉毛,这十几只掉下的浮毛,家里已经…...

计算机网络ISO七层网络模型及TCP

思维导图(通俗理解) 首先,先用最通俗的话来描述ISO七层模型,思维导图结构如下: ISO七层网络模型概念 应用层(Application Layer):应用层是OSI模型的最高层,直接与用户交…...

机器学习知识点全面总结

一、机器学习基础概念 1、什么是机器学习 机器学习是一种人工智能技术,通过对数据的学习和分析,让计算机系统自动提高其性能。简而言之,机器学习是一种从数据中学习规律和模式的方法,通过数据来预测、分类或者决策。 机器学习的本…...

【研发日记】嵌入式处理器技能解锁(三)——TI C2000 DSP的C28x内核

文章目录 前言 背景介绍 C28x内核 浮点单元(FPU) 快速整数除法单元(FINTDIV) 三角数学单元(TMU) VCRC单元 CPU总线 指令流水线 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解…...

LeetCode.27.移除元素

题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以…...

redis面试(十二)可重入锁总结

可重入锁总结 从实现原理以及源码的层面,真正剖析和了解到了redis分布式锁的企业级的实现,这个分布式锁实现的还是非常漂亮的,麻雀虽小,五脏俱全,分布式的可重入锁,总结一下流程 (1&#xff0…...

软件测试知识点3

063、一份测试计划应该包括哪些内容? 背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。 065、如何定位测试用例的作用? 组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认 066、什么…...

WPF Treeview开启虚拟化后如何找到TreeViewItem

用VirtualizingStackPanel的BringIndexIntoViewPublic方法就好&#xff0c;没必要像微软给的例子那样还要继承一个VirtualizingStackPanel /// <summary> /// Recursively search for an item in this subtree. /// </summary> /// <param name"container…...

给python初学者的一些建议

写在开篇 关于Python&#xff0c;可以这么说&#xff0c;这几年借着数据科学、机器学习与人工智能的东风&#xff0c;Python 老树开新花&#xff0c;在风口浪尖上居高不下。 Python 之所以这么受大家的青睐&#xff0c;是因为它语言简洁&#xff0c;上手容易&#xff0c;让非…...

【Python学习手册(第四版)】学习笔记17-作用域

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文介绍Python作用域&#xff0c;介绍了变量名解析的LEGB原则&#xff0c;以及内置作用域&#xff0c;全局作用域global语句&#xff0c;嵌套作用域及nonlocal语…...

大语言模型(LLM)文本预处理实战

大语言模型&#xff08;LLM&#xff09;文本预处理实战 文章目录 大语言模型&#xff08;LLM&#xff09;文本预处理实战2.1 理解词嵌入2.2 文本分词2.3 将 token 转换为 token ID2.4 添加特殊上下文 token2.5 字节对编码 (BytePair Encoding, BPE)2.6 使用滑动窗口进行数据采样…...

宠物健康新守护:智能听诊器的家庭应用

宠物已成为我们情感的寄托和生活的一部分&#xff0c;为宠物的健康守护带来了科技的温度。 科技与关怀结合 这款智能听诊器&#xff0c;以其科技感和关怀精神&#xff0c;为宠物的健康监测提供了全新的视角。 家庭友好设计&#xff1a;考虑到家庭使用环境&#xff0c;智能听…...

六、go函数

函数在任何语言中并不难理解&#xff0c;但是不论是有几年开发经验的人&#xff0c;真正想要写好一个函数并不是那么容易的 1、go语言中函数结构 func main() {fmt.Println(isEven(2)) } func isEven(x int) bool {return x%2 0 }&#xff08;这里我写了一个简单的判断是否是…...

高原型垂直起降高速无人机技术详解

1. 技术概述 高原型垂直起降高速无人机&#xff08;High-Altitude Vertical Take-off and Landing High-Speed Unmanned Aerial Vehicle, HAVTHS UAV&#xff09;是针对高原复杂环境设计的一种先进无人机系统。它结合了垂直起降的灵活性与高速飞行的能力&#xff0c;能够克服高…...

Selenium + Python 自动化测试10(unittest概念)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上几篇我们讨论了元素的定位方法、操作方法以及一些特殊元素的操作。 在实际的测试项目组中每个模块会写多条案例&#xff0c;如第一条用例那里我们的登录。登录的话就可以有多…...

大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用

文章目录 引言ADetailer插件介绍插件安装常用模型控制提示词参数配置参数详解 实践建议 示例插件的对比&#xff1a;1. ADetailer插件2. Photoshop插件&#xff08;如Nik Collection&#xff09;3. GIMP插件&#xff08;如GMIC&#xff09;4. Affinity Photo插件 结语 引言 无…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...