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࿰…...

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

WPF Treeview开启虚拟化后如何找到TreeViewItem
用VirtualizingStackPanel的BringIndexIntoViewPublic方法就好,没必要像微软给的例子那样还要继承一个VirtualizingStackPanel /// <summary> /// Recursively search for an item in this subtree. /// </summary> /// <param name"container…...

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

【Python学习手册(第四版)】学习笔记17-作用域
个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文介绍Python作用域,介绍了变量名解析的LEGB原则,以及内置作用域,全局作用域global语句,嵌套作用域及nonlocal语…...

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

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

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

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

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

大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用
文章目录 引言ADetailer插件介绍插件安装常用模型控制提示词参数配置参数详解 实践建议 示例插件的对比:1. ADetailer插件2. Photoshop插件(如Nik Collection)3. GIMP插件(如GMIC)4. Affinity Photo插件 结语 引言 无…...

【Pytorch】topk函数
topk 是 PyTorch 中的一个函数,用于从张量中选取最大(或最小)的 k 个元素及其对应的索引。其定义如下: values, indices torch.topk(input, k, dimNone, largestTrue, sortedTrue, *, outNone)参数说明 input (Tensor): 输入张…...

使用mybatis注解和xml映射执行javaWeb中增删改查等操作
Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…...

SpringBoot3 响应式编程
Spring Boot 3 中的响应式编程是一个重要的特性,它允许开发者构建非阻塞、异步和基于事件的应用程序,这对于处理高并发和实时数据流的应用场景尤为重要。以下是对Spring Boot 3响应式编程的详细解析: 一、响应式编程概述 响应式编程是一种编…...

【C++ 面试 - 基础题】每日 3 题(二)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

Modelica建模,Modelica语言的学习,技术调研工作
Modelica建模,Modelica语言的学习,技术调研工作 参考资料: 苏州同元软控信息技术有限公司 - 同元 Modelica 再探冷却 modelica学习-CSDN博客 1、 Modelica简介 Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规…...

Oracle数据字典之——v$lock 和v$locked_object
v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁的情况,其主要字段说明如下: 11g如下: 字段名称类型说明ADDRRAW(8)锁定状态对象的地址KADDRRAW(8)锁的地址SIDNUMBER会话(SESSION)标识;TYPE…...

solidity 以太坊(Ether) 单位(很基础)
一个字面常数可以带一个后缀 wei, gwei 或 ether 来指定一个以太坊的数量, 其中没有后缀的以太数字被认为单位是wei。 在以太坊和许多其他基于以太坊的区块链系统中,以太币(Ether)是网络中的主要加密货币。 以太可以被…...

关于elementUI 分页 table 使用 toggleRowSelection
我出现问题的前提 在table表格第一页全选 ,第二页全选 回到第一页 点击按钮 取消 第一页,第二页我不要的勾选 初始实现 this.selectedPeraonal是表格 selection-change方法返回的值 handleSelectionChange(val) {this.selectedPeraonal val || []…...

K8s部署RocketMQ
准备工作 我是win电脑,本地安装了Podman,并使用Kind创建了一个K8s本地环境,并在 win 电脑上安装了 Helm。 部署RocketMQ 1. add rocketmq helm repo 2. deploy rocketmq cluster 3. verify the rocketmq cluster 4. Create Topic by api a…...

Linux服务管理-Nginx配置
静态解析主要解析html、css动态解析需要解析php 动态资源通过轮询分配到后端的Apache服务器处理 apache是同步阻塞,nginx是异步非阻塞...