* @return int整型 */ func absfunc(x int) int { // write code here if 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 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 }
## 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 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) }
## 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 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) }
## 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 here if 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 here ans = "" defer func() { err := recover() if err != nil { ans = "体温异常" } }() if t > 37.5 { panic("体温异常 弹出警告!")
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!