目录

1、函数介绍

2、多返回值和可变参数

3、defer语句

4、内置函数介绍

1、函数介绍

1.1定义:

有输⼊入、有输出,⽤用来执⾏行行⼀一个指定任务的代码块。

func functionname([parametername type]) [returntype] {
//function body
}
//其中参数列列表和返回值列列表是可选

  

1.2⽆无参数和返回值的函数

func functionname() {
//function body
}

  

1.3实现两个数相加

// 两数相加
// 三个整数相加简写:func add(a , b, c int) int{
func add(a int, b int) int {
sum := a + b
return sum
}

  

1.4如何连续的⼀一系列列参数的类型是一样,前⾯面的类型可以不不写如何连续的

// 多返回值
// func calc(a, b int) (int, int){
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
// sum := a + b
// sub := a - b
// return sum, sub
//第二中写法
return
}

  

1.5函数调用

// 多返回值
// func calc(a, b int) (int, int){
func calc(a, b int) (sum int, sub int) {
sum = a + b
sub = a - b
// sum := a + b
// sub := a - b
// return sum, sub
//第二中写法
return
} func main() {
sum, sub := calc(200 ,100)
fmt.Printf("%d %d", sum, sub)
}

  

2、多返回值和可变参数

2.1多返回值

func calc(a, b int) (int, int) {
  sum := a + b sub := a - b return sum, sub
}
func main() {
      sum, sub := add(2, 3)


  

2.2对返回值进⾏行行命名

func calc(a, b int) (sum int, sub int) {
sum = a + b sub = a - b return
}
func main() {
sum, sub := add(2, 3)

}

  

2.3对返回值进⾏行行命名

func calc(a, b int) (sum int, sub int) {
sum = a + b sub = a - b return
} func main() {
sum, sub := add(2, 3)

}

  

2.4_标识符

func calc(a, b int) (sum int, sub int) {
sum = a + b sub = a - b return
}
func main() {
sum, _ := add(2, 3)

}

  

2.5 可变参数

// 可变参数
func calc_v1(b ...int) int {
sum := 0
for i := 0; i < len(b); i++ {
sum = sum + b[i]
}
return sum
}
// 固定参数和可变参数
func calc_v2(a int, b ...int) int {
sum := a
for i := 0; i < len(b); i++ {
sum = sum + b[i]
}
return sum
}

  

3、defer语句

3.1 多个defer语句句,遵循栈的特性:先进后出

// defer返回执行
// defer作用资源释放
func testDefer1() {
defer fmt.Println("hello")
defer fmt.Println("hello v2")
defer fmt.Println("hello v3")
fmt.Println("aaaaaa")
fmt.Printf("bbbbbbbb")
} /*
结果:
defer,后进先出,压栈
aaaaaaa
bbbbbbb
hello v3
hello v2
hello
*/
func testDefer2() {
for i := 0; i < 5; i++ {
defer fmt.Printf("i=%d\n", i)
} fmt.Printf("running\n")
fmt.Printf("reutrn:\n")
} /*
runging
return
i=4
i=3
i=2
i=1
i=0
*/ // defer, 是预先定义的,只是return时返回结果
func testDefer3() {
var i int = 0
defer fmt.Printf("defer i=%d\n", i)
i = 1000
fmt.Println("i=%d\n", i)
} /*
1000
defer i = 0
*/

  

4、内置函数介绍

4.1. close:

主要⽤用来关闭channel

4.2. len:

用来求长度,比如string、array、slice、map、channel

4.3. new:

用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针4.4. make:⽤用来分配内存,主要⽤用来分配引⽤用类型,⽐比如chan、map、slice

4.5. append:

⽤用来追加元素到数组、slice中

4.6. panic和recover:

⽤用来做错误处理理

5、练习

package main

import "fmt"

func justify(n int) bool {
if n <= 1 {
return false
}
// 质数是除了他自己,不被任何数整除
for i := 2; i < n; i++ {
if n%i == 0 {
return false
}
} return true
} // 1-100的质数
func example1() {
for i := 2; i < 100; i++ {
if justify(i) == true {
fmt.Printf("[%d] is prinme\n", i)
}
}
} func is_shuixianhuashu(n int) bool {
first := n % 10
second := (n / 10) % 10
third := (n / 100) % 10 //fmt.Printf("first:%d second:%d third %d\n", n , first, second, third) sum := first*first*first + second*second*second + third*third*third
if sum == n {
return true
}
return false
} // 水仙花束 x^3 + y^3 + z^3 = xyz
func example2() {
for i := 2; i < 100; i++ {
if is_shuixianhuashu(i) == true {
fmt.Printf("[%d] is shuixianhuashu\n", i)
}
}
} // 统计字符串中,字符,数字,空格,其他字符的个数
func calc(str string) (charCount int, numCount int, spaceCount int, otherCount int) {
// 转为字符串utf-8
utfChars := []rune(str) for i := 0; i < len(utfChars); i++ {
if utfChars[i] >= 'a' && utfChars[i] <= 'z' || utfChars[i] >= 'A' && utfChars[i] <= 'z' {
charCount++
continue
} if utfChars[i] >= '0' && utfChars[i] <= 9 {
numCount++
continue
} if utfChars[i] >= ' ' {
numCount++
continue
} otherCount++
}
return
} func example3() {
var str string = " dfsafa d范德萨 3984234"
charCount, numCount, spCount, other := calc(str)
fmt.Printf("charCount:%d, numCount:%d, spCount:%d, other:%d", charCount, numCount, spCount, other) } func main() {
//example1()
//example2()
example3()
}

  

【原创】go语言学习(五)函数详解1的更多相关文章

  1. 【C语言】printf函数详解

    C语言printf函数详解 一.相关基础知识 请求printf()打印变量的指令取决于变量的类型,例如打印整数用%d符号,打印字符用%c符号,这些符号称为转换说明(conversion specifi ...

  2. c语言文件操作函数详解

    一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

  3. 【C语言】printf()函数详解

    printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上.在前面的例题中我们已多次使用过这 ...

  4. C语言可变参数函数详解示例

    先看代码 printf(“hello,world!”);其参数个数为1个. printf(“a=%d,b=%s,c=%c”,a,b,c);其参数个数为4个. 如何编写可变参数函数呢?我们首先来看看pr ...

  5. 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    本文转自: C语言itoa()函数和atoi()函数详解(整数转字符C实现) 介绍 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. int/float to ...

  6. C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即“内存”(memory)的意思.该函数的原型为: # ...

  7. 跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码

    跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码 第一步:插入QQ摄像头,安装好驱动(有的可能免驱动) 第二步:打开HDevelop,点击助手-打开新的Image Acquisitio ...

  8. Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

    不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...

  9. Linux C 语言之 Hello World 详解

    目录 Linux C 语言之 Hello World 详解 第一个 C 语言程序 程序运行原理 编译,链接 运行时 链接库 编译器优化 Hello World 打印原理 stdout, stdin 和 ...

  10. [转]C语言字节对齐问题详解

    C语言字节对齐问题详解 转载:https://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: typedef struct{ ch ...

随机推荐

  1. Linux追加磁盘扩展

    一:查看磁盘空间信息: fdisk -l 查看当前的系统的磁盘空间的情况: 二:增加分区: fdisk /dev/sda 键入n,增加一个分区,得到: 键入 p,主分区,并键入3(编号): 默认起始扇 ...

  2. php反转输出字符串(两种方法)

    //第一种方法 function fz($a){ echo strrev($a); } fz('adfjdlks'); echo '<br />';   //第二种方法 function ...

  3. 通过 Kubeadm 安装 K8S 与高可用,版本1.13.4

    环境介绍: CentOS: 7.6 Docker: 18.06.1-ce Kubernetes: 1.13.4 Kuberadm: 1.13.4 Kuberlet: 1.13.4 Kuberctl: ...

  4. Maven添加依赖后如何在IDEA中引用

    使用idea打开/创建maven项目,可以正常使用maven命令编译发布,但idea里智能提示.代码均找不到包,原因是idea并未引用依赖的包,这时需要添加idea引用即可 解决方法 在IDEA右侧的 ...

  5. Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)

    Off-By-One 漏洞 (基于栈) 原文地址:https://bbs.pediy.com/thread-216954.htm 什么是off by one? 将源字符串复制到目标缓冲区可能会导致of ...

  6. HibernateTemplate的queryForList(sql)用法

    转自:https://blog.csdn.net/huanghaijin/article/details/7763580 List<User> list  = jdbcTemplate.q ...

  7. MongoDB官方推荐的GUI工具-Compass的使用

    探索和操作MongoDB数据的最简单方法 用于MongoDB的GUI.可视化地查看数据.以秒为单位运行临时查询.使用完整的CRUD功能与数据交互.查看和优化查询性能.可在Linux.Mac或Windo ...

  8. Codeforces #496 (Div. 3) Polycarp and Div 3

    思路1: https://blog.csdn.net/qq_41730082/article/details/80984316 题目的意思是给你一串数字长度为(1-2e5),当然由于它的这一串数字是不 ...

  9. css完结篇

    1.如何让一个绝对定位的盒子居中 left:50%; margin-left:-宽度的一半; 2.固定定位 position:fixed; 1.脱标 参考点:浏览器左上角 作用:固定导航栏,返回顶部, ...

  10. HTTP/TCP/IP UDP Socket等区别联系

    1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...