当前位置: 首页 > 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插件 结语 引言 无…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;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 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...