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插件 结语 引言 无…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
