首页 > 其他分享 >狂神说Go语言笔记—Go函数详解

狂神说Go语言笔记—Go函数详解

时间:2022-11-15 14:57:21浏览次数:42  
标签:函数 int fmt Println 详解 func Go 狂神 main

什么是函数

  • 函数是基本的代码块,用于执行一个任务
  • Go语言最少有个main()函数
  • 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务
  • 函数声明告诉了编译器函数的名称,返回类型和参数
package main

import "fmt"

// func定义  一个add的函数  (定义两个变量 int型)   返回值类型为int
//
func add(a, b int) int {
   c := a + b
   //设置返回值为c
   return c
}

func main() {
   //调用函数 add的方法  打印输出
   fmt.Println(add(1, 2))
}

函数的声明

Go语言函数定义格式如下:

  • 无参无返回值函数
  • 有一个参数的函数
  • 有两个参数的函数
  • 有一个返回值的函数
    • 有多个返回值的函数
package main

import "fmt"

func main() {
   //函数的调用  - 无参无返回值函数
   printfinfo()

   //- 有一个参数的函数
   msg := "didididi"
   myprint(msg)

   // - 有一个参数的函数
   num := add2(1, 2)
   fmt.Println(num)

   //- 有多个返回值的函数
   a := "狂神说"
   b := "学相伴"
   fmt.Println(add3(a, b))
}

// - 无参无返回值函数
func printfinfo() {
   fmt.Println("hello,学相伴")
}

// - 有一个参数的函数
func myprint(str string) {
   fmt.Println(str)
}

// - 有两个参数的函数
// - 有一个返回值的函数
func add2(a, b int) int {
   c := a + b
   //设置返回值为c
   return c
}

// - 有多个返回值的函数
func add3(x, y string) (string, string) {

   //设置返回值为c
   return y, x
    /*
    输出结果:
    hello,学相伴
	didididi
	3
	学相伴 狂神说

    */
}
package main

func main() {
   //实际参数:调用函数时,传给形参实际数据叫做实际参数-num1,num2
   max(1, 2)
}

// 形式参数:定义函数时,用来接收外部传入数据的参数-num1,num2
func max(num1, num2 int) {

}

可变参数

概念:一个函数的参数类型确定,但个数不确定,就可以使用可变参数

package main

import "fmt"

func main() {
   getSum(1, 2, 4, 5, 100)
}

// 定义一个求和函数getsum方法  定义一个可变参数num
func getSum(num ...int) {
   sum := 0
   for i := 0; i < len(num); i++ {
      //遍历输出每一个传递的值
      fmt.Println(num[i])

      //sum=sum+num[i]
      sum += num[i]
   }
   fmt.Printf("求和函数:sum=%d", sum)
}
/*
输出结果:
1
2
4
5
100
求和函数:sum=112

*/

注意事项:

  • 如果一个函数的参数时可变参数,同时还有其他的参数,可变参数要放在列表的最后
  • 一个函数的参数列表最多只能有一个可变参数

参数传递

按照数据的存储特点来分:

  • 值类型的数据:操作的是数据本身、int .string、bool、float64、array...
  • 引用类型的数据:操作的是数据的地址slice、map、 chan....

值传递

package main

import "fmt"

func main() {
   // 定义一个数组 [个数] 类型 {}
   arr := [4]int{1, 2, 3, 4}
   fmt.Println(arr)
   update(arr)
   fmt.Println("调用修改后的数据", arr)
}
func update(arr2 [4]int) {
   fmt.Println("arr接受的数据", arr2)
   arr2[0] = 100
   fmt.Println("arr修改后的数据", arr2)
}
/*
输出结果:
[1 2 3 4]
arr接受的数据 [1 2 3 4]
arr修改后的数据 [100 2 3 4]
调用修改后的数据 [1 2 3 4]

*/

引用传递

package main

import "fmt"

func main() {
   // 切片 可以扩容的数组
   s1 := []int{1, 2, 3, 4}
   fmt.Println("默认的数据", s1)
    //传入的是引用类型的数据,地址
   update2(s1)
   fmt.Println("调用后的数据", s1)
}

func update2(s2 []int) {
   fmt.Println("传递后的数据", s2)
   s2[0] = 100
   fmt.Println("修改后的数据", s2)
}

函数中变量的作用域

作用域:变量可以使用的范围

局部变量:函数内部定义的变量,叫做局部变量

全部变量:函数外部定义的变量,叫做全局变量

package main

import "fmt"

// 全局变量  整个类都可以使用
var num int = 30

func main() {
   // 局部变量 temp 只能在temp方法中使用
   temp := 100

   if b := 1; b < 10 {
      temp := 30
      fmt.Println("局部变量b:", b)
      fmt.Println("局部变量temp:", temp)
   }
   fmt.Println(temp)

   // 调用f1,f2方法
   f1()
   f2()
}
func f1() {
   fmt.Println(num)
}
func f2() {
   fmt.Println(num)
}

标签:函数,int,fmt,Println,详解,func,Go,狂神,main
From: https://www.cnblogs.com/DuPengBG/p/16892392.html

相关文章

  • JAVA系列之类加载机制详解
    类的加载机制?双亲委派机制?什么是类加载器?自定义类加载器有哪些应用场景?通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的......
  • TypeError: request() got an unexpected keyword argument 'header'
    代码如下:importrequestsurl="http://****.**.****.com/passportSeparate/login"header={"Content-Type":"application/json;charset=UTF-8"}req_data={......
  • 索引详解
    关于索引需要理解的几个点为什么要用索引?创建索引有哪些缺点?数据库索引的原理,为什么要用B+树,为什么不用二叉树?为什么推荐使用整型自增主键而不是选择UUID......
  • go 组合取代继承
    Go不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。通过嵌套结构体进行......
  • PyMongo的安装(windows环境)
    PyMongo的安装(windows环境)❤第一步:下载PyMongo下载地址:https://github.com/mongodb/mongo-python-driver/archive/refs/tags/3.13.0.zip❤第二步:安装解压安装包......
  • python django
    1、安装django2、查django版本python-mdjango--version3、创建django项目cdC:\Curtis\Python\Project4、django-adminstartprojectMySiteMySite是创建的djang......
  • google网页翻译无法使用
    复制以下脚本到本地txt文件中,更改后缀为.bat以管理员身份执行bat脚本即可@setlocalenabledelayedexpansion@echooffset"source_domain=google.cn"set"target_dom......
  • 详解React的Transition工作原理原理
    Transition使用姿势Transition是react18引入的新概念,用来区分紧急和非紧急的更新。紧急的更新,指的是一些直接的用户交互,如输入、点击等;非紧急的更新,指的是UI界面......
  • 经常被问到的react-router实现原理详解
    在单页面应用如日中天发展的过程中,备受关注的少了前端路由。而且还经常会被xxx面试官问到,什么是前端路由,它的原理的是什么,它是怎么实现,跳转不刷新页面的...一大堆为什么,......
  • DNS大全(114DNS 、阿里DNS、百度DNS 、360 DNS、Google DNS)
    DNS是什么: DNS是域名系统,DomainNameSystem的缩写,是一个服务。 DNS就是把域名解析为IP地址,提供我们上网,我们能够上网最终是找到IP地址。比如,http://xxxx.com是域......