定制开发小程序【Go语言刷题篇】Go完结篇|函数、结构体、接口、错误入门学习

Go从0到入门6-Go完结篇

前言

- 定制开发小程序本期是学习Golang的完结篇:函数、结构体、接口、定制开发小程序错误入门学习,定制开发小程序有不懂的地方可以评论进行讨论!

  • 定制开发小程序接下来我将继续更新Python刷题系列、数据库从0定制开发小程序到入门刷题系列等等。
  • 定制开发小程序本系列文章采用牛客的定制开发小程序核心代码模式进行案例代码提供,定制开发小程序帮助大家从0定制开发小程序到入门的学习过程中进定制开发小程序行配套的刷题~
  • 定制开发小程序推荐给大家一款刷题、定制开发小程序面试的神器,定制开发小程序我也是用这一款神器进行学习的!~链接如下:
  • 定制开发小程序该神器不仅网页界面十分美观,定制开发小程序而且操作起来极易上手入门!定制开发小程序非常适合新手进行系统性的学习!
  • 定制开发小程序小白新手可以通过该神定制开发小程序器进行日常的刷题、看大厂面经、学习计算机基础知识、与大牛面对面沟通~ 刷题的图片已经放在下面了~

Q1:函数-数字的阶乘

问题描述:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

相关知识:
1、递归,就是在运行的过程中调用自己。 一个函数调用自己,就叫做递归函数。构成递归需具备的条件:子问题须与原始问题为同样的事,且更为简单。不能无限制地调用本身,须有个出口,化简为非递归状况处理。

实例输入:2
实例输出:2

案例代码:

//import "fmt"/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param i int整型 数字 * @return int整型*/func factorial( i int ) int {	// write code here	if i == 0{		return 1	}	return i * factorial(i-1)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Q2:函数-绝对值

问题描述:定义一个函数,函数的功能是给出一个数,返回该数的绝对值。

相关知识:
1、函数的定义: 函数声明包含一个函数名,参数列表, 返回值列表和函数体。如果函数没有返回值,则返回列表可以省略。函数从第一条语句开始执行,直到执行return语句或者执行函数的最后一条语句。函数可以没有参数或接受多个参数。注意类型在变量名之后 。当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。函数可以返回任意数量的返回值。使用关键字 func 定义函数,左大括号依旧不能另起一行。

func function_name( [parameter list] ) [return_types] {   函数体}
  • 1
  • 2
  • 3

2、函数的调用:当创建函数时,你定义了函数需要做什么,通过调用该函数来执行指定任务。调用函数,向函数传递参数,并返回值
3、Go 函数可以返回多个值,"_"标识符,用来忽略函数的某个返回值Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用。返回值的名称应当具有一定的意义,可以作为文档使用。没有参数的 return 语句返回各个返回变量的当前值。

实例输入:-1
实例输出:1

案例代码:

//import "fmt"/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param x int整型  * @return int整型*/func absfunc(x int) int {	// write code here	if x < 0 {		return -x	}	return x}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Q3:函数-加减乘除

问题描述:定义一个函数,实现输入a,b两个数,返回两数的和,差,乘积,商,余数。然后依次存入切片中,最后返回。

相关知识:
1、Go中函数支持多个返回值,但函数有多个返回值时,如果其中某个或某几个返回值不想使用,可以通过下划线_来丢弃这些返回值。例如下面的f1函数两个返回值,调用该函数时,丢弃了第二个返回值b,只保留了第一个返回值a赋值给了变量a。

实例输入:2,2
实例输出:[4,0,4,1,0]

案例代码:

//import "fmt"/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param a int整型  * @param b int整型  * @return int整型一维数组*/func operate( a int ,  b int ) []int {	// write code here	var ans []int	ans = append(ans, a+b)	ans = append(ans, a-b)	ans = append(ans, a*b)	ans = append(ans, a/b)    ans = append(ans, a % b)	return ans}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Q4:结构体-学生信息1

问题描述:每个学生都有如下信息:姓名name,性别sex,年龄age,分数score,定义一个结构体Student,来表示小明的信息,小明的信息如下:姓名:小明,性别:true,年龄:23,分数:88

相关知识:
1、中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。
2、结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和一个类型。
3、结构体的目的就是把数据聚集在一起,以便能够更加便捷地操作这些数据。
4、结构体的定义:结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:
type 类型名 struct {
字段名 字段类型
字段名 字段类型

}
类型名:标识自定义结构体的名称,在同一个包内不能重复。
字段名:表示结构体字段名。结构体中的字段名必须唯一。
字段类型:表示结构体字段的具体类型。
5、访问结构体的成员:如果要访问结构体成员,需要使用点号 . 操作符。

示例输入:无
示例输出:

小明true2388
  • 1
  • 2
  • 3
  • 4

案例代码:

import "fmt"type stu struct {	name  string	sex   bool	age   int	score int}func main() {	a := stu{		name:  "小明",		age:   23,		sex:   true,		score: 88,	}	fmt.Println(a.name)	fmt.Println(a.sex)	fmt.Println(a.age)	fmt.Println(a.score)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

Q5:结构体-学生信息2

问题描述:每个学生都有如下信息:姓名name,性别sex,年龄age,分数score,地址信息address,其中address地址信息又包含城市city,省份province等信息, 定义一个结构体Student,来表示小明的信息,小明的信息如下:姓名:小明,性别:true,年龄:23,分数:88,province:湖南省,city:长沙市。
依次输出打印小明信息

相关知识:
1、一个结构体中可以嵌套包含另一个结构体或结构体指针。

示例输入:
示例输出:

小明true2388湖南省长沙市
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

案例代码:

import (	"fmt")type address struct {	city     string	prov***ring}type stu struct {	name  string	sex   bool	age   int	score int	add   address}func main() {	a := stu{		name:  "小明",		age:   23,		sex:   true,		score: 88,		add: address{			city:     "长沙市",			province: "湖南省",		},	}	fmt.Println(a.name)	fmt.Println(a.sex)	fmt.Println(a.age)	fmt.Println(a.score)	fmt.Println(a.add.province)	fmt.Println(a.add.city)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

Q6:接口-动物和老虎

问题描述:定义一个动物接口,该接口有 sleep,eat 方法,定义老虎实现动物接口,老虎的sleep方法输出"tiger sleep",eat方法输出"tiger eat",最后依次调用老虎的sleep,eat方法。

相关知识:
1、 在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则), 只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。
2、接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。面向接口编程
3、接口是一个或多个方法签名的集合。
4、任何类型的方法集中只要拥有该接口’对应的全部方法’签名。就表示它 “实现” 了该接口,无须在该类型上显式声明实现了哪个接口。这称为Structural Typing。所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还可以有其他方法。
5、接口只有方法声明,没有实现,没有数据字段。接口可以匿名嵌入其他接口,或嵌入到结构中。
6、type 接口类型名 interface{
方法名1( 参数列表1 ) 返回值列表1
方法名2( 参数列表2 ) 返回值列表2

}

示例输入:无
示例输出:

sleepeat
  • 1
  • 2

案例代码:

import "fmt"type animal interface {	sleep()	eat()}type tiger struct {}func (t tiger) sleep() {	fmt.Println("sleep")}func (t tiger) eat() {	fmt.Println("eat")}func main() {	var t animal = tiger{}	t.sleep()	t.eat()}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

Q7:错误-网络延迟

问题描述:实现erro接口,自定义一个错误,该错误抛出"网络延迟"错误。输入网络的延迟数,如果延迟数大于100则认为网络延迟,并返回

相关知识:
1、 错误:Go 语言通过内置的错误接口提供了非常简单的错误处理机制。

 type error interface {        Error() string        }
  • 1
  • 2
  • 3

2、实现 error 接口类型来生成错误信息,函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息

示例输入:150
示例输出:“网络延迟”

案例代码:

import "errors"type error interface {	Error() string}func Error() string {	return "网络延迟"}func defineerr(ping int) string {	// write code here	if ping > 100 {		errors.New("网络延迟")		return "网络延迟"	}	return ""}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Q8:错误-体温异常

问题描述:实现一个函数,该函数的功能是 给定一个float类型变量表示某个人的体温,如果有人体温大于37.5,抛出"体温异常",并输出。

相关知识:
1、Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。

示例输入:38.000000
示例输出:“体温异常”

案例代码:

//import "fmt"/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @param t double浮点型 体温 * @return string字符串*/func temperature(t float64) (ans string) {	// write code here	ans = ""	defer func() {		err := recover()		if err != nil {			ans = "体温异常"		}	}()	if t > 37.5 {		panic("体温异常  弹出警告!")	}	return ans}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

后文:刷题神器

点击链接进行跳转注册,开始你的保姆级刷题之路吧!

另外这里不仅仅可以刷题,你想要的这里都会有,十分适合小白和初学者入门学习~
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、数据结构篇(300题):都是非常经典的链表、树、堆、栈、队列、动态规划等
3、语言篇(500题):C/C++、java、python入门算法练习
4、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
5、大厂笔试真题:字节跳动、美团、百度、腾讯…掌握经验不在惧怕面试!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发