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

3.函数、结构体、包

一、函数定义和调用

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

二、函数的参数

1.单个参数

func test(n int) {fmt.Println("传递进来的参数是", n)
}
func main() {test(10)
}

2.多个参数

func test(x, y int, s string) {fmt.Println(x)fmt.Println(y)fmt.Println(s)}
func main() {test(10, 20, "hello")
}

3.传递不定长参数(切片)

func test(x ...int) {fmt.Println(x)fmt.Println("x的类型为", reflect.TypeOf(x))
}
func main() {test(10, 20, 30, 40)
}

4.定义返回值

在形参括号的后边定义返回参数的类型

func test(x ...int) int {var sum intfor _, v := range x {sum += v}return sum
}
func main() {var sum = test(10, 20, 30, 40)fmt.Println("sum = ", sum)
}

5.函数变量的作用域

变量是先在函数内找,没有在在全局找。

三、匿名函数

var test2 = func() {fmt.Println("hello world")
}

四、高阶函数

1.高阶函数之函数作为参数

package mainimport ("fmt""time"
)func test(f func()) {var start = time.Now().Unix()f()var end = time.Now().Unix()t := end - startfmt.Printf("此程序使用%d秒的时间", t)
}func f1() {time.Sleep(time.Second * 1)
}func main() {test(f1)
}

2.高阶函数之函数作为返回值

这里不在写了,就是python中的装饰器概念。在go中,在一个函数内声明另外一个函数必须使用匿名函数

五、闭包

引用了一个外部的 非全局的自由变量的函数称为闭包函数。闭包主要解决的问题是 "全局变量污染"的问题

实例:
解释:i就是那个 外部的非全局的自由变量
conter的匿名函数就是闭包函数

func getCounter() func() {var i = 0counter := func() {i++fmt.Println(i)}return counter
}
func main() {counter := getCounter()counter()counter()counter()
}

六、结构体

go中结构体的概念和C中结构体概念一样。都是多个数据类型的集合

1.定义结构体

type 类型名 struct {字段1 字段1类型字段2 字段2类型…
}

例子:

type student struct {name stringage intgender stringclass string
}

2.实例化

2.1 先声明后赋值

type student struct {name   stringage    intgender stringclass  string
}var s1 student
s1.name = "zhangsan"
s1.age = 20
fmt.Println(s1)

2.2 声明并赋值

这里讲了两种方式

type student struct {name   stringage    intgender stringclass  string
}
var s = student{"zhangsan", 20, "boy", "1班"}
fmt.Println("s = ", s)
var s1 = student{name: "lisi", age: 21}
fmt.Println("s1 = ", s1)

3.结构体的方法接收器

(s stdent)就是和read方法绑定了
read是自定义方法名称

package mainimport "fmt"type student struct {name stringage  int
}func (s student) read() {fmt.Printf("这是%s实例的接收器", s.name)
}func main() {s1 := student{"zhangsan", 10}s1.read()}

4.匿名字段

//正常我们按照格式来这样定义一个结构体
type student struct {name stringage  int
}

4.1 普通匿名字段

匿名字段就是省略字段的名字,直接写类型,如下:
但是不建议这样做

type student struct {stringint
}func main() {var s1 = student{"zhangsan", 20}fmt.Println(s1.string, s1.int)
}

4.2 结构体嵌套的匿名字段

注意:s1是student结构体类型的实例,student中没有name字段,但是AA中有,所有s1可以直接s1.name这样使用

type AA struct {name string
}type student struct {stringintAA
}func main() {var s1 = student{"zhangsan", 20, AA{"lisi"}}fmt.Println(s1.string, s1.int, s1.name)
}

4.3 结构体的继承

结构体的继承就是面向对象中的继承,4.2当中的例子就是继承

七、包管理

go的包管理在
1.11之前使用的是go-path
1.11之后使用的是go-mod

1.包管理要求

1.go的包也是以目录为包,在目录下创建go文件,作为包文件
2.go文件中的函数的"首字母"必须大写。在go中规定 函数要想由外部导入和使用必须大写,首字母小写只能内部使用

2.制作一个包

这里直接使用go-mod模式管理包,不在使用go-path模式

test/
├── api
│   └── mysql.go
└── main.go

mysql.go文件内容如下:
注意:函数首字母必须大写

package api   //这里的包名尽量和目录名称保持一致import "fmt"func Mysql_connect() {fmt.Println("正在连接mysql")
}

2.1 初始化包

在项目下初始化一个包:
格式如下:go mod init 自定义名称

PS E:\code\go\test> go mod init mysite结构如下:
test/
├── api
│   └── mysql.go
├── go.mod
└── main.go

创建完毕后会发现报错

gopls was not able to find modules in your workspace.
When outside of GOPATH, gopls needs to know which modules you are working on.

解决办法:

1.ctrl + ,进入设置选项
2.“扩展” --> “Go”–>“Alternate Tools”–>“在setting.json中设置”
加入

"gopls": {     "experimentalWorkspaceModule": true,
}

完整如下:

{"editor.fontFamily": "Consolas, monospace","explorer.confirmDelete": false,"workbench.colorTheme": "Default Light+","window.zoomLevel": 3,"go.alternateTools": {},"gopls": {     "experimentalWorkspaceModule": true,}
}

重启vscode就可以了

2.2 在main.go中导包

注意:在go中,go会以文件中的package 后边定义的名字为包名,而不是像python那样以文件名称为基准

package mainimport "mysite/api"func main() {//直接调用,vscode会自动导包的路径api.Mysql_connect()
}

将包名从mysql.go中的api改为newapi,编辑器会自动导入成这样.

package mainimport ("fmt"newapi "mysite/api"
)func main() {newapi.Mysql_connect()fmt.Println("hello")
}

3.使用第三方包

//在项目目录下载第三方包
go get 包路径

相关文章:

3.函数、结构体、包

一、函数定义和调用 package mainimport ("fmt" )func test() {fmt.Println("hello world") } func main() {test() }二、函数的参数 1.单个参数 func test(n int) {fmt.Println("传递进来的参数是", n) } func main() {test(10) }2.多个参数…...

科普丨关于 A/B 测试的十问十答

你想知道的,都在这里!本文是神策数据「十问十答」科普系列文章的第二期,围绕 A/B 测试展开。 1 Q:什么是 A/B 测试? A:A/B 测试作为互联网企业的核心增长手段之一,其价值已在实际应用中被多次验…...

尚融宝——整合OpenFeign与Sentinel实现兜底方法——验证手机号码是否注册功能

一、整合过程 在项目添加依赖&#xff1a;添加位置 <!--服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 在需要的服务中添加启动注…...

几种常见的激活函数

文章目录 常见的激活函数介绍Sigmoid函数ReLU函数LeakyReLU函数Tanh函数Softmax函数总结 常见的激活函数介绍 激活函数是神经网络中的重要组成部分&#xff0c;它决定了神经元的输出。在神经网络的前向传播中&#xff0c;输入数据被传递给神经元&#xff0c;经过加权和和激活函…...

MySQL-数据库,数据表的基本操作

数据库&#xff0c;数据表的基本操作 1 数据库的基本操作1.1 创建数据库1.2 删除数据库 2 数据表的基本操作2.1 创建数据表2.1.1 主键约束2.1.2 外键约束2.1.3 非空约束2.1.4 唯一性约束2.1.5 默认约束2.1.6 自增列 2.2 查看数据表结构2.2.1 查看表基本结构语句DESC2.2.2 查看表…...

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本&#xff1a;银河麒麟桌面操作系统V10 厂商名称&#xff1a; 广州荣士电子有限公司 认证产品&#xff1a;IC-14W网络IC卡读写器 测试日期&#xff1a; 2022-11-04 …...

面试常见问题

1.自我介绍 面试官您好&#xff0c;我叫**&#xff0c;在招聘网站上看到了公司的介绍和岗位要求&#xff0c;觉得非常有吸引力&#xff0c;结合自己的过往经历&#xff0c;也感觉自己能够胜任&#xff0c;所以很高兴能有这次面试机会。 参与工作已经5年了&#xff0c;18年毕业于…...

matlab数据归一化与反归一化处理

假如数据实际取值范围为 X i ∈ [ − π π ] , i 1 , 2 , 3 X_i \in [-\pi \ \ \pi], i1,2,3 Xi​∈[−π π],i1,2,3&#xff0c;变量服从正态分布 示例如下&#xff1a; %% 数据归一化处理及其概率密度函数 clear clc Mu [0 0 0]; % 均值 Sigma [1 1 1]; % 标准差 C…...

【杂凑算法篇】密码杂凑算法的安全强度

【杂凑算法篇】密码杂凑算法的安全强度 杂凑&#xff08;哈希&#xff09;算法安全强度—【蘇小沐】 文章目录 【杂凑算法篇】密码杂凑算法的安全强度&#xff08;一&#xff09;安全强度&#xff08;Security Strength)&#xff08;二&#xff09;杂凑算法的安全强度与对比总…...

【RobotFramework自动化测试】

robotframework介绍 RF是一个基于Python语言开发的&#xff0c;可扩展的&#xff0c;是以关键字驱动模式的自动化测试框架。RF最新的版本是2019 年7月份发布&#xff0c;7月份之前只支持python2.7&#xff0c;7月之后支持3.X的版本 robotframework的安装 安装python环境&…...

操作系统原理 —— 什么是中断?(四)

我们先来看看早期的计算机的工作流程&#xff1a; 如上图&#xff0c;在早期的计算机假设有三个程序需要执行&#xff0c;执行顺序是&#xff1a;先执行程序1&#xff0c;等待程序1结束之后&#xff0c;再开始执行程序2&#xff0c;以此类推&#xff0c;所以它们是串行执行的…...

SA168 3BSE003389R1

SA168 3BSE003389R1 远程终端控制系统&#xff08;RTU&#xff09;可连接到其他设备。RTU可将设备上的电气信号转换为数字的值&#xff0c;例如一个开关或阀开/关的状态&#xff0c;或是仪器量测到的压力、流量、电压或电流。也可以借由信号转换及传送信号来控制设备&#xff0…...

基于Java+Springboot+Vue+elememt美食论坛平台设计实现

基于JavaSpringbootVueelememt美食论坛平台设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…...

Go Etcd

基本操作 go get go.etcd.io/etcd/client/v3# 此处使用的 版本是&#xff1a; # go.etcd.io/etcd/client/v3 v3.5.8这里使用的是 "go.etcd.io/etcd/client/v3" 而不是 "go.etcd.io/etcd/clientv3" 我们不使用 etcd/clientv3&#xff0c;因为它与grpc 最新…...

01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS)

01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xff1a;OrCAD Capture CIS&#xff09; 硕士学电磁场去了&#xff0c;写点博客记录下学习过程。 参考的教程是B站的视频&#xff1a;allegro软件入门视频教程全集100讲 本科的时候就对Cadence有所耳闻&am…...

Redis数据结构与对象-链表和字典

1、链表 其实个人感觉redis的链表内容和其他的差不多。就是一个listNode结构&#xff0c;里面又指向前置节点和后置节点的指针。 然后redis链表可以保存各种不同类型的值。 链表被广泛用于实现redis的各种功能&#xff0c;比如列表键、发布与订阅、慢查询、监视器等。 2、字典…...

学系统集成项目管理工程师(中项)系列08a_合同管理(上)

1. 合同&#xff08;Contract&#xff09; 1.1. 契约 1.2. 广义概念 1.2.1. 以确定各种权利与义务为内容的协议&#xff0c;即只要是当事人之间达成的确定权利义务的协议均为合同&#xff0c;不管它涉及哪个法律部门及何种法律关系 1.2.2. 合同除应包括民法中的合同外&…...

【Linux 裸机篇(四)】I.MX6ULL C语言 LED 驱动

文章目录 一、汇编搭建 C 语言环境二、C 语言编写三、编写 Makefile四、链接脚本 一、汇编搭建 C 语言环境 实际工作中是很少用到汇编去写嵌入式驱动的&#xff0c;大部分情况下都是使用 C 语言去编写的。只是在开始部分用汇编来初始化一下 C 语言环境&#xff0c;比如初始化 D…...

我也曾经因安装库而抓狂,直到我遇到了

入门教程、案例源码、学习资料、读者群 请访问&#xff1a; python666.cn 大家好&#xff0c;欢迎来到 Crossin的编程教室 &#xff01; 几乎所有的 Python 学习者都遇到过“安装”方面的问题。这些安装问题包括 Python 自身环境的安装、第三方模块的安装、不同版本的切换&…...

DDPG算法详解

DQN算法详解 一.概述 概括来说&#xff0c;RL要解决的问题是&#xff1a;让agent学习在一个环境中的如何行为动作(act)&#xff0c; 从而获得最大的奖励值总和(total reward)。 这个奖励值一般与agent定义的任务目标关联。 agent需要的主要学习内容&#xff1a;第一是行为策略…...

像素剧本圣殿部署指南:Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧

像素剧本圣殿部署指南&#xff1a;Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。它将先进的AI推理能力与独特的8-Bit…...

TD-ACC+实验系统入门指南:手把手教你搭建典型环节模拟电路

TD-ACC实验系统实战手册&#xff1a;从零构建典型环节电路的21个关键细节 第一次接触TD-ACC实验系统时&#xff0c;看着密密麻麻的接口和旋钮&#xff0c;我的手指悬在半空迟迟不敢落下——生怕一个错误的连接就会烧毁昂贵的运算放大器。这种忐忑直到成功捕捉到第一个完美方波信…...

Jenkins vs GitLab CI/CD:2026 企业级 CI/CD 工具深度选型评测

Jenkins vs GitLab CI/CD&#xff1a;2026 企业级 CI/CD 工具深度选型评测 作为在 CI/CD 领域摸爬滚打十余年的全栈老兵&#xff0c;我见证了从手工部署到云原生 DevOps 的完整演进。今天&#xff0c;我们将抛开宗教战争式的争论&#xff0c;用真实数据和生产环境案例&#xff…...

网络安全有哪些岗位,如何成为一位优秀的网络安全工程师?

网络安全是什么&#xff1f; 首先说一下什么是网络安全&#xff1f; 网络安全工程师工作内容具体有哪些&#xff1f; 网络安全是确保网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而受到破坏、更改、泄露&#xff0c;系统连续可靠正常地…...

避开这3个坑!Cortex-M3/M4使用DWT计数器时的常见错误与解决方法

Cortex-M3/M4开发实战&#xff1a;DWT计数器避坑指南与高阶应用技巧 在嵌入式系统开发中&#xff0c;精确的时间测量往往是性能优化和调试的关键。Cortex-M3/M4内核内置的DWT(Data Watchpoint and Trace)组件&#xff0c;特别是其CYCCNT计数器&#xff0c;为开发者提供了一个零…...

终极网盘下载加速方案:3分钟解锁八大平台极速下载

终极网盘下载加速方案&#xff1a;3分钟解锁八大平台极速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

新手零基础入门:用快马生成你的第一个dify对话应用

今天想和大家分享一个特别适合新手入门的实践&#xff1a;用InsCode(快马)平台快速搭建你的第一个dify对话应用。作为一个刚接触AI开发的小白&#xff0c;我发现这个平台真的能省去很多麻烦的配置步骤&#xff0c;特别适合想快速看到成果的新手。 为什么选择dify作为入门&…...

【已验证】STM32驱动OLED(SSD1306)显示字符

本文介绍如何使用STM32F103C8T6&#xff08;蓝板&#xff09;通过软件模拟IIC协议驱动0.96英寸OLED&#xff08;驱动芯片SSD1306&#xff09;&#xff0c;这个小屏幕相信每一个朋友在大学生活里都不会错过&#xff0c;也是很多课设毕设显示需求的首选&#xff0c;我一向喜欢直接…...

Tsunami Arduino硬件抽象库:高精度信号发生与频率测量

1. Tsunami信号发生器与频率计硬件抽象库概述Tsunami 是一款面向嵌入式测试与教学场景的多功能信号发生器与频率计硬件平台&#xff0c;其核心价值在于将高精度模拟信号生成、宽频带数字信号捕获与实时频率测量能力集成于紧凑的单板系统中。本库&#xff08;tsunami-arduino&am…...

Dramatron:AI驱动的剧本创作革命

Dramatron&#xff1a;AI驱动的剧本创作革命 【免费下载链接】dramatron Dramatron uses large language models to generate coherent scripts and screenplays. 项目地址: https://gitcode.com/gh_mirrors/dr/dramatron 价值定位&#xff1a;重新定义创意写作流程 在…...