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

  • 前言
  • Q1:函数-数字的阶乘
  • Q2:函数-绝对值
  • Q3:函数-加减乘除
  • Q4:结构体-学生信息1
  • Q5:结构体-学生信息2
  • Q6:接口-动物和老虎
  • Q7:错误-网络延迟
  • Q8:错误-体温异常
  • 后文:刷题神器

前言

- 本期是学习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 hereif i == 0{return 1}return i * factorial(i-1)
}

Q2:函数-绝对值

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

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

func function_name( [parameter list] ) [return_types] {函数体
}

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

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

案例代码:

//import "fmt"
/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可* @param x int整型 * @return int整型
*/
func absfunc(x int) int {// write code hereif x < 0 {return -x}return x
}

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 herevar ans []intans = 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
}

Q4:结构体-学生信息1

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

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

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

示例输入:无
示例输出:

小明
true
23
88

案例代码:

import "fmt"
type stu struct {name  stringsex   boolage   intscore 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)
}

Q5:结构体-学生信息2

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

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

示例输入:
示例输出:

小明
true
23
88
湖南省
长沙市

案例代码:

import ("fmt"
)
type address struct {city     stringprov***ring
}
type stu struct {name  stringsex   boolage   intscore intadd   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)
}

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

}

示例输入:无
示例输出:

sleep
eat

案例代码:

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()
}

Q7:错误-网络延迟

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

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

 type error interface {Error() string}

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

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

案例代码:

import "errors"
type error interface {Error() string
}
func Error() string {return "网络延迟"
}
func defineerr(ping int) string {// write code hereif ping > 100 {errors.New("网络延迟")return "网络延迟"}return ""
}

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 hereans = ""defer func() {err := recover()if err != nil {ans = "体温异常"}}()if t > 37.5 {panic("体温异常  弹出警告!")}return ans
}

后文:刷题神器

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

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

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

【Go语言刷题篇】Go完结篇函数、结构体、接口、错误入门学习相关推荐

  1. go语言----函数 结构体 接口 多态

    函数 Go语言 函数是反过来声明 变量类型和  函数返回值 一.一个返回值 package main import "fmt"func max(a int,b int) int { ...

  2. 【Go语言刷题篇】Go完结篇|函数、结构体、接口、错误入门学习

    Go从0到入门6-Go完结篇 前言 Q1:函数-数字的阶乘 Q2:函数-绝对值 Q3:函数-加减乘除 Q4:结构体-学生信息1 Q5:结构体-学生信息2 Q6:接口-动物和老虎 Q7:错误-网络延迟 ...

  3. CTFshow刷题日记-MISC-图片篇(上)基础操作和信息附加

    ctfshow 图片篇引语 大部分题目仅涉及单一知识点,但可能有多种解法: 找到flag并不困难,关键是了解每一题背后的原理: 藏在哪?为什么可以这样藏?请多考虑这两个问题: misc脑图-misc之 ...

  4. 详细介绍C语言指针(九千字完结篇)

    本文是指针的完结篇,介绍了函数指针和练习,函数指针数组和计算器的简易实现,认识函数指针数组指针,认识回调函数和qsort排序库函数以及回调函数的使用(模拟实现qsort库函数) 指针初阶篇->指 ...

  5. 东软mysql期末题库_东软大三上学期实训笔记-mysql篇Day5完结篇

    mysql篇Day5完结篇 知识点讲解: 1.视图:view (1) 虚拟表.和普通表一样使用 (2) 作用: ① 视图存储在数据库中的查询语句.主要作用:安全原因.可以使复杂的查询语句容易理解与使用 ...

  6. c语言刷题(牛客网)

    c语言刷题(牛客网100道基础题) 学习没有捷径,唯有重复多练,这是浩克为大家找的牛客网刷题资源,如果你正在学或者学完了都可以来检验一下自己能力. 浩克也会专门开个专栏来讲解c语言刷题,让大家对c语言 ...

  7. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  8. Nowcoder《C语言刷题笔记》BC1-BC15

    Nowcoder <C语言刷题笔记> BC1-BC15 文章目录 Nowcoder <C语言刷题笔记> BC1-BC15 0x00 写在前面 0x01 简单输出 BC1 Now ...

  9. java结构体构建学生 学号_易错题: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。...

    根据网考网考试中心的统计分析,以下试题在2015-12-7日计算机二级考试C语言习题练习中,答错率较高,为:93% [填空题] 程序通过定义学生结构体变量,存储了学生的学号.姓名和3门课的成绩.所有学 ...

  10. C语言_函数结构体的调用

    C语言_函数结构体的调用 #include<stdio.h> //定义存储函数的结构体 struct map{//定义无参数类型返回void的函数指针void (*p)(); }; /** ...

最新文章

  1. POJ 3463 Sightseeing(次短路问题)
  2. SDN和SD-WAN有本质区别—Vecloud微云
  3. html5判断多选框是否选择的函数,复选框(checkbox)、多选框
  4. python3x完全兼容python2x_李亚涛:一台电脑python2x与python3x如何都可以用?
  5. 感性精品高清PSD美手分层海报,一键替换,奢华品、首饰、护肤品推荐临摹应用
  6. 页面校验请求MmEwMD(转载)
  7. 传爱立信两大股东欲弹劾CEO卫翰思 股价应声反弹
  8. Cosos H5开发工具箱(上)
  9. Linux网络协议原理
  10. 如何在计算机上增加一个磁盘分区,电脑怎么添加硬盘分区
  11. AD7705和压力传感器的计算
  12. 硕士研究生阶段如何学习slam机器人?
  13. java short 写法_Java Short类shortValue()方法及示例
  14. 如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。 如 407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求大于1小于1000的所有阿姆斯特朗数。
  15. 拆解SSK SCRM330 USB3.0读卡器 GL3233 固件 0819
  16. luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
  17. android 实现磨砂效果_Android(Android5.0)下毛玻璃(磨砂)效果如何实现?
  18. Java 8 实战教学大纲
  19. html5标准555分吗,颜色表达中的555分色与Taper高级分色 | 色彩管理网
  20. 最新ThinkPHP内核全行业小程序运营管理系统源码 DIY布局 一键生成小程序

热门文章

  1. 计算机组装中如何看硬件型号,如何查看主板型号?(三种方法!)
  2. Android 时区中英文显示对照
  3. 云服务器的带宽是什么意思?怎么选择带宽大小?
  4. LAMP虚拟主机架设论坛
  5. pyinstaller打包有pandas和numpy库过程中遇到的bug及处理
  6. template < class T> ,map和vector用法——恶补c++
  7. 自定义Java注解处理器
  8. 唤醒手腕Python全栈工程师学习笔记(人工智能篇)
  9. 超级账本基金会执行董事Daniela Barbosa:开源区块链已成主流
  10. win10+黑苹果 单硬盘的双系统引导配置