Go语言学习(二) 函数

news2024/11/29 0:48:16

文章目录

  • 函数
    • go函数基本语法
    • go不支持重载
    • go中支持可变参数

函数

go函数基本语法

在这里插入图片描述
先来看看go中函数的基本使用

package main

import "fmt"

/*
func 函数名(形参列表) (返回值类型列表) {
	执行语句..
	return + 返回值列表
}
*/
//自定义函数:功能:两个数相加:
func cal(num1 int, num2 int) int { //如果返回值类型就一个的话,那么()是可以省略不写的
	var sum int = 0
	sum += num1
	sum += num2
	return sum
}

func cal2(num1 int, num2 int) (int, int) { //如果返回值类型就一个的话,那么()是可以省略不写的
	var sum int = 0
	sum += num1
	sum += num2
	var res int = num1 - num2
	return sum, res
}

func main() {
	// var num1 int = 10
	// var num2 int = 20
	// //求和
	// var sum int = 0
	// sum += num1
	// sum += num2
	// fmt.Println(sum)
	sum := cal(10, 20)
	fmt.Println(sum)

	sum1, res1 := cal2(10, 20)
	fmt.Println(sum1)
	fmt.Println(res1)
	// var num3 int = 30
	// var num4 int = 50

	// var sum1 int = 0
	// sum1 += num3
	// sum1 += num4
	// fmt.Println(sum1)
}

再来看一个demo,思考为什么交换之后输出的值还是一样呢?

package main

import "fmt"

//自定义函数:功能:交换两个数
func exchangeNum (num1 int, num2 int) {
	var t int
	t = num1
	num1 = num2
	num2 = t
}

func main() {
	//调用函数:交换10和20
	var num1 int = 10
	var num2 int = 20
	fmt.Printf("交换前的两个数:num1 = %v, num2 = %v \n",num1, num2)
	exchangeNum(num1,num2)
	fmt.Printf("交换后的两个数:num1 = %v, num2 = %v \n",num1, num2)
}

相信大家也思考了一下,那接下来我们来看看这个程序的内存分析在这里插入图片描述

go不支持重载

在这里插入图片描述

go中支持可变参数

如果你希望函数带有可变数量的参数
在这里插入图片描述
我们有其他语言功底的话先把切片当作数组看待,程序执行结果在这里插入图片描述
基本数据类型和数组默认都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值
在这里插入图片描述
以值传递的方式的数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数以内指针的方式操作变量。从效果来看类似引用传递
在这里插入图片描述
在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用

package main

import "fmt"

//在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。
//通过该变量可以对函数调用
func test(num int) {
	fmt.Println(num)
}

//定义一个函数,把另一个函数作为参数
func test02(num1 int, num2 float32, testFunc func(int)) {
	fmt.Println("----test02")
}

type myFunc func(int)

func test03(num1 int, num2 float32, testFunc myFunc) {
	fmt.Println("----test03")
}

func main() {
	//函数也是一种数据结构,可以赋值给一个变量
	a := test //变量就是一个函数类型的变量
	fmt.Printf("a的类型是:%T,test函数的类型是:%T", a, test)
	//a的类型是:func(int),test函数的类型是:func(int)
	a(10) //等价于 test(10)

	//调用test02函数
	test02(10, 3.14, test)
	test02(10, 3.14, a)

	//自定义数据类型:(相当于起别名):给int类型起了别名叫myInt类型
	type myInt int

	var num1 myInt = 30
	fmt.Println("num1", num1)

	var num2 int = 30
	num2 = int(num1) //虽然是别名,但是在go中遍历识别的时候还是认为myInt和int不是一种数据类型
	fmt.Println("num2", num2)

	test03(10, 3.14, a)
}

为了简化数据类型定义,Go支持自定义数据类型 基本语法:Type 自定义数据类型名 数据类型

例如:type myInt int —> 这时myInt就等价int来使用了
例如:type mySum func(int, int) int ----> 这时mySum就等价于一个函数类型func(int, int) int

支持对函数返回值命名

//传统写法要求:返回值和返回值的类型对应,顺序不能差
func test04(num1 int, num2 int) (int, int) {
	result01 := num1 + num2
	result02 := num1 - num2
	return result01, result02
}

//升级写法:对函数返回值命名,里面顺序就无所谓了,顺序不用对应
func test05(num1 int, num2 int) (sum int, sub int) {
	sum = num1 + num2
	sub = num1 - num2
	return
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验三:多种影响因素下购房方案的比较

根据呼文军[1]等建立的购房决策数学模型式(1)[1],通过对影响购房的多个因素进行科学地分析、比较,从若干备选购房方案中做出最佳的选择。 QP*WT (1) 在文章的“实例分析”中,假设…

Kubeadm搭建kubernetes(k8s)集群

目录 一、集群介绍 1、集群搭建方法 二、集群部署 环境配置 所有节点,关闭防火墙规则,关闭selinux,关闭swap交换 node02(192.168.137.30) node01(192.168.137.20) ​编辑 master&#…

单链表经典例题

LeetCode题解移除链表元素反转链表合并两个有序链表移除链表元素 题目描述: ➡️挑战链接⬅️、 分析: 该题是要求我们删除指定元素,那么我们就定义一个cur指针去遍历整个链表就好了,每当我们遇到cur->valval;等于特定值的时…

【PTA-训练day3】L2-014 列车调度 + L1-009 N个数求和

目录 L2-014 列车调度 - 二分贪心 1、java版 - 运行超时 2、c版 L1-010 比较大小 - 10 L1-015 跟奥巴马一起画方块 - 15 L1-009 N个数求和 - 20 java 欧几里得求最大公约数gcd L2-014 列车调度 - 二分贪心 PTA | 程序设计类实验辅助教学平台 如果当前序号比火车队列末…

最流行的 6 款 Python 解释器

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 Python 是最流行的编程语言…

双向长短期记忆网络(BiLSTM)详解

双向长短期记忆网络(BiLSTM)详解 一、前言 在学习BiLSTM之前,首先需要对RNN和LSTM有一定的了解,可以参考本人的博客:详细讲解RNNLSTMTree_LSTM(Tree-Long Short Term Memory)基于树状长短期记忆…

22、短信登录(隐藏用户的敏感信息)

短信登录(隐藏用户的敏感信息) 我们返回给前端的信息太多了 问题:为什么我们这里全返回了呢? 我们这里是直接从userHoler里获取用户后就直接返回。 所以我们冲userHoler里取出来的信息就是完整的。 2、userHoler从哪里来&#x…

RSA与AES加密

目录 一、非对称加密和RSA 1.非对称秘钥 2.RSA加密的核心 3.Python中实现RSA加密解密 二、HTTPS通信过程 三、对称加密和AES 1.AES简介 2.Python中实现AES加解密 一、非对称加密和RSA 1.非对称秘钥 https://blog.csdn.net/gao131360144/article/details/79966094HTTPS&…

北理工嵩天Python语言程序设计笔记(6 函数和代码复用)

前言 本文是对《北理工 嵩天/黄天宇/礼欣 Python语言程序设计》的学习笔记,供自己查阅使用。 文章目录 北理工嵩天Python语言程序设计笔记(目录)北理工嵩天Python语言程序设计笔记(2 Python基本语法元素)北理工嵩天…

3GPP R17空闲态省电特性

Paging Early Indication 为了进一步降低空闲态UE监听PDCCH的功耗,R17提出Paging Early Indication(PEI)方案。方案的主要思想是在PO(Paging Occasion)之前插入一个PEI-O(PEI Occasion),UE在解调到PEI信息之后,再确定是否需要解调PO信息。其中…

FPGA帧差算法实现图像识别跟踪,Verilog代码讲解全网最细,提供两套工程源码

之前我写过一篇关于FPGA帧差算法实现图像识别跟踪的文章,可以参考一下FPGA帧差算法实现图像识别跟踪 但那篇文章讲得不够细,这里讲得细一点: 运动目标检测原理:先将RGB图像转为灰度图只取亮度分量y,如果一个物体是运动…

【C++】如何修改set的值

问题&#xff1a;尝试通过begin方法得到的迭代器去修改值&#xff0c;发现会报错。 set<string> st{"hello", "world", "good"}; set<string>::iterator it st.begin(); *it "test"; 原因&#xff1a;我们可以在源码里…

三层交换机(三层配置基础命令)

作者介绍&#xff1a; ♥️作者&#xff1a;小刘在C站 ♥️每天分享课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放。 目录 一.什么是三层交换机 二.为什么使用三层交换机 三.层交换机的原理 1.传统的mls 2.快速转…

文件的基本操作

文章目录创建文件删除文件打开文件关闭文件读文件写文件这些基本功能都是操作系统提供给应用程序的系统调用创建文件 提供的参数 所需的外存空间大小文件的存放路径文件名&#xff08;操作系统会有对应的默认名&#xff09; 操作系统做的工作 在外存中找文件所需的空间——空闲…

Python趣味算法入门 - 百钱百鸡

问题描述 中国古代数学家张邱建在他的《算经》中提出了一个著名的“百钱百鸡问题”&#xff1a;一只公鸡值五钱&#xff0c;一只母鸡值三钱&#xff0c;三只小鸡值一钱&#xff0c;现在要用百钱买百鸡&#xff0c;请问公鸡、母鸡、小鸡各多少只&#xff1f; 分析 这也是经典问…

所见即所得即MySQL函数

✨✨hello&#xff0c;愿意点进来的小伙伴们&#xff0c;你们好呐&#xff01; &#x1f43b;&#x1f43b;系列专栏&#xff1a;【MySQL初阶】 &#x1f432;&#x1f432;本篇内容&#xff1a;MySQL函数的详解 &#x1f42f;&#x1f42f;作者简介:一名现大二的三非编程小白&…

【Spring】核心部分之IOC:通过列举代码例子,从底层刨析,深入源码,轻轻松松理解Spring的核心IOC,IOC有这一篇足以

IOC一&#xff0c;概念和原理1.概念&#xff1a;控制反转2.原理&#xff1a;&#xff08;xml解析&#xff0c;工厂模式&#xff0c;反射&#xff09;3.IOC接口&#xff1a;两个主要容器实现类&#xff08;加载xml配置文件&#xff09;二&#xff0c;操作Bean管理1.基于 xml 配置…

React - 实现瀑布流加载

React - 实现瀑布流加载一. 瀑布流实现1.1 处理重复请求问题一. 瀑布流实现 先来看下原本的效果&#xff0c;一次性加载完所有的信息然后展示&#xff1a; 其次&#xff0c;我们需要去监听这个滚轮的滚动事件&#xff0c;那么React页面就可以添加一个监听器&#xff1a; use…

SpringSecurity Oauth2实战 - 04 自定义AuthProvider实现登录认证

文章目录1. 搭建资源服务器1. Token存储配置类 TokenStoreAutoConfiguration2. 资源服务器配置类 ResourceServerAutoConfiguration3. 在META-INF/spring.factories文件下添加配置类2. 搭建授权服务器1. 密码加密配置类 PasswordEncodeConfig2. RestTemplateConfig3. 授权服务器…

k3s 离线部署指南

文章目录1. 简介2. Docker 手动部署镜像方式2.1 安装docker2.2 导入镜像2.3 安装 k3s2.4 查看3. Containerd 手动部署镜像方式3.1 导入镜像到 containerd 镜像列表3.2 授予可执行权限3.3 安装 K3s4. Containerd 私有镜像仓库方式4.1 配置 K3s 镜像仓库4.2 授予可执行权限4.3…