go面试

编程入门 行业动态 更新时间:2024-10-21 09:33:37

go面试

go面试

题目如下

读取文件,文件格式如下(自行增加内容到10行以上):

书名:Docker容器与容器云;单价:48.88;出版社:人民邮电出版社;ID:91y81b4flc340134;作者:浙江大学SEL实验室
书名:华为人力资源管理;单价:26.7;出版社:古吴轩出版社;ID:91y81b4519340134;作者:黄志伟
书名:python基础教程;单价:63.3;出版社:人民邮电出版社;ID:91y8115419340134;作者:Magnas Lie

读取文件后,提供rest接口,可以让用户通过以下接口查询信息:
1、查询指定书名的书籍的相关信息;
2、查询指定出版社出版的所有书籍名称;
3、查询指定作者编写的所有书籍名称;

要求:
1、使用gin作为框架,提供http服务
2、所有接口的返回信息在body中以json形式呈现

考察点:
1、文件的读取操作
2、http服务和gin的使用
3、json序列化

代码

package mainimport ("bufio""encoding/json""fmt""io""os"//"net/http"//"fmt""github/gin-gonic/gin""net/http""strings"
)//定义一个书类
type bookInfo1 struct {Name stringPrice stringPress stringId stringAuthor string
}//定义一个全局变量用来储存书籍信息===数据库
var c = make([]bookInfo1,0,1000)//对文件进行基本的读取操作
func readFile() {file, err := os.Open("./book")if err != nil {fmt.Printf("open file err=%v", err)}//fmt.Printf()//函数退出时关闭句柄关闭文件,否则会产生内存泄漏defer file.Close()//创建一个 *Reader 带缓冲reader := bufio.NewReader(file)//循环读文件for {str, err := reader.ReadString('\n')if err == io.EOF {break}//转化为结构体c=append(c,toStruct(str))}fmt.Println("===================基本文件读取结束==========")
}//将读取的信息转化为bookInfo1类型
func toStruct(string2 string) bookInfo1{//首先分割掉分号a00 :=strings.Split(string2,";")   //a1 的类型是切片//fmt.Println(a00)//将切片转化成字符串s:=make(map[string]string)for _,v := range a00{a01 := strings.Split(string(v), ":")//fmt.Println(a01)s[a01[0]] = a01[1]}//结构体实例化b:=bookInfo1{Id: s["ID"],Name: s["书名"],Press: s["出版社"],Author: s["作者"],Price: s["单价"]}//test//fmt.Println(s)//fmt.Println(b)return b
}//定义一个json序列化函数func toJson(input bookInfo1 ) string  {b, err := json.MarshalIndent(input,"","   ")if err != nil {fmt.Println("json err:", err)}//fmt.Println(string(b))t := string(b)return t
}//通过书名进行查询
func byName(nameFind string) bookInfo1{var out bookInfo1//var t string    //定义返回结果for i:=0; i<len(c);i++{if c[i].Name == nameFind{out = c[i]    //将切片的查询结果赋值给out,实例化}}if out.Name == "" {    // 这个判断条件其实有一点点问题fmt.Println("找不到该书")}else{//t = toJson(out)}return out   //这里是假设了该书名的书只有一本
}type Struct1 struct {id intdata bookInfo1
}//以出版社为键进行查找
func pressAll(pressName string) []Struct1 {var out Struct1var out1 =make([]Struct1,0,50)//var tt press_All//var t  stringfor i:=0; i<len(c);i++{if c[i].Press == pressName{out.id = iout.data= c[i]    //将切片的查询结果赋值给out,实例化//fmt.Println(out)out1 = append(out1,out)}}if len(out1) == 0 {    // 这个判断条件其实有一点点问题fmt.Println("找不到该出版社")}//else{//var outJson = make([]string,0,50)//for _,v := range out1{////	outJson = append(outJson,toJson(v))    //将多条书籍结构体数据转化为json格式再存储到切片中//}//fmt.Println(outJson)//}return out1     //返回某出版社的书
}type Struct2 struct {id intdata string
}
//查询指定作者的书
func authorWork(authorName string) []Struct2{//fmt.Println(authorName)var out Struct2var out1 = make([]Struct2,0,50)//var tt string    //定义返回结果for i:=0; i<len(c);i++{//fmt.Println(c[i].Author)if strings.TrimSpace(c[i].Author) == authorName{     //这里注意有空格存在out.id = iout.data = c[i].Nameout1 = append(out1,out)}}//bytes, e := json.Marshal(out)//if e != nil {//	fmt.Println("序列化失败")//} else {//	tt = string(bytes)////	//fmt.Println(tt)//}return out1    //返回指定作者的所有书目
}func x1(c *gin.Context) {data := byName("python基础教程")fmt.Println(data)c.JSON(http.StatusOK,data)}func x2(c *gin.Context)  {data := pressAll("人民邮电出版社")//c.JSON(http.StatusOK,(data[1]).data)//fmt.Println(data[1])for i:=0;i<len(data);i++{c.JSON(http.StatusOK,data[i].data)}}func x3(c *gin.Context)  {data := authorWork("黄志伟")//fmt.Println(data[1])//c.String(200,data)for i:=0;i<len(data);i++{c.JSON(http.StatusOK, data[i].data)}}func main() {readFile()//fmt.Println(c)r:=gin.Default()    //返回默认的路由引擎//指定用户使用get请求r.GET("/byName",x1)r.GET("/byPress",x2)r.GET("/byAuthor",x3)r.Run(":9090")
}

最后可以在postman中进行查询操作

更多推荐

go面试

本文发布于:2024-02-06 23:47:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1751898.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!