Go语言核心与案例
Go语言核心与案例
数据知道
IT技术博主,博主会持续更新专栏文章,欢迎关注和订阅文章博客,欢迎私信和博主交流技术。如有需要请站内私信或者联系VX名片(ID:data_know)
展开
-
有名的爬虫框架 colly 的特性及2个详细采集案例
前言:colly 是 Go 实现的比较有名的一款爬虫框架,而且 Go 在高并发和分布式场景的优势也正是爬虫技术所需要的。它的主要特点是轻量、快速,设计非常优雅,并且分布式的支持也非常简单,易于扩展。框架简介:基于colly框架及net/http进行封装,实现的一款可配置分布式爬虫架构。使用者只需要配置解析、并发数、入库topic、请求方式、请求url等参数即可,其他代码类似于scrapy,不需要单独编写。github地址:colly特性干净的API快速(单核>1k请求/秒)原创 2024-03-25 10:32:02 · 8148 阅读 · 0 评论 -
求第n个数的斐波那契数 (Golang经典编程案例)
斐波那契数:1,1,2,3,5,8,13,21…规律:当 n == 1 || n == 2,返回1当 n >= 2,返回前面两个数的和 f(n-1)+f(n-2)代码如下:package mainimport "fmt"func fbn(n int) int { if (n == 1 || n == 2) { return 1 } else { return...原创 2019-06-23 08:49:49 · 27614 阅读 · 0 评论 -
Go面试: 求出一个数组的和与平均值 (Golang经典编程案例)
案例 :求出一个数组的和与平均值,代码如下:package mainimport ( "fmt")func main() { var intArr = [...]int{3, -4, 9, 8, 12, 7} sum := 0 for _, val := range intArr { //累计求和 sum += val } //平均值保留到2位小数 fmt.Pr...原创 2019-06-26 13:47:17 · 32203 阅读 · 0 评论 -
Go语言 文件操作的 拷贝文件经典案例 (Golang经典编程案例)
案例:将图片,视频,音频拷贝到另外一个文件夹。本案例实现将一个图片拷贝到另外一个文件夹,代码如下:package mainimport ( "fmt" "os" "bufio" "io")//自己编写一个函数,接收两个文件路径func CopyFile(dstFileName string, srcFileName string)(written int64, err er...原创 2019-07-03 11:31:14 · 32064 阅读 · 0 评论 -
Go语言_数据结构_环形单向链表的应用---约瑟夫(Josephu)问题
环形单向链表的应用:分析思路:编写一个函数,PlayGame(first *Boy, startNo int, countNum int)最后我们使用一个算法,按照要求,在环形链表中留下最后一个人。代码实现如下:package mainimport ( "fmt")//小孩的结构体type Boy struct { No int // 编号 Next *Boy //...原创 2019-07-11 17:09:38 · 31838 阅读 · 0 评论 -
Go语言中 继承的理解和实现细节 (Golang经典编程案例)
继承:当多个结构体存在相同的字段和方法时,可以从这些结构体中抽象出结构体,在该结构体中定义这些相同的字段和方法。可以解决代码复用问题,让我们的编程更加靠近人类的思维。...原创 2019-06-30 23:22:40 · 32507 阅读 · 0 评论 -
Go语言中 经典的map排序方法及案例 (Golang经典编程案例)
注意:Golang中的map默认是无序的,每次遍历,得到的输出结果可能不一样。Golang中的map排序:将map的key放到切片中;对切片排序;遍历切片,然后来按key来输出map的值。案例:package mainimport ( "sort" "fmt")func main() { lockTest()}func lockTest() { map1 :...原创 2019-06-27 17:08:39 · 32272 阅读 · 1 评论 -
Go面试:用Go语言实现工厂模式 (Golang经典编程案例)
用Go语言实现工厂模式:golang中的struct没有构造函数,一般可以使用工厂模式来解决这个问题。这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。代码结构如下:分别有main.go和student.go两个文件。在student.go中:package model//定义一个结构体type student s...原创 2019-06-30 12:00:40 · 36479 阅读 · 1 评论 -
Go语言 gorutine和channel协同工作经典应用案例 (Golang经典编程案例)
案例1:思路分析:代码实现:package mainimport "fmt"func writeData(intChan chan int) { for i := 1; i <= 50; i++ { intChan <-i//放入数据 fmt.Println("writeData",i) } close(intChan)}func readData(...原创 2019-07-05 10:35:29 · 32214 阅读 · 0 评论 -
Go面试: 实现冒泡排序 (Golang经典编程案例)
冒泡排序:package mainimport ( "fmt")//冒泡排序:小的数往前面移,大的数往后面沉func BubbleSort(arr *[6]int) { fmt.Println("排序前,arr=", *arr) temp := 0 for i := 0; i < len(*arr); i++ { for j := 0; j < len(*arr...原创 2019-06-26 16:30:57 · 29952 阅读 · 0 评论 -
Go语言 统计一个文本文件中含有的英文,数字,空格及其它字符数量 (Golang经典编程案例)
package mainimport ( "fmt" "os" "bufio" "io")//定义一个结构体,用于保存统计结果type CharCount struct{ ChCount int //记录英文个数 NumCount int //记录数字个数 SpaceCount int //记录空格个数 OtherCount int //记录其它字符的个数}fun...原创 2019-07-03 14:36:13 · 33207 阅读 · 0 评论 -
Go面试:面向对象编程应用-景区门票案例(Golang经典编程案例)
面向对象编程应用步骤:声明(定义)结构体,确定结构体名;编写结构体字段;编写结构体方法。案例:一个景区根据游人的年龄收取不同价格的门票,比如年龄大于18,收费20元;8岁到18岁之间门票免费;年龄小于8岁或者大于80岁,就不能来玩了;编写Visitor结构体,根据年龄决定能够购买的门票价格并输出。从控制台接收姓名和年龄,来判断是否免费,如果结束控制台的接收,输入n即可。代码...原创 2019-06-30 09:04:23 · 31966 阅读 · 0 评论 -
用Go语言 轻松实现插入排序 (Golang经典编程案例)
插入排序,代码如下:package mainimport ( "fmt")func InsertSort(arr *[7]int) { //完成第一次,给第二个元素找到合适的位置并插入 for i := 1; i < len(arr); i++ { insertVal := arr[i] insertIndex := i - 1 // 下标 //从小到大 f...原创 2019-07-12 09:25:08 · 31953 阅读 · 0 评论 -
一个案例彻底弄懂Go语言中的map (Golang经典编程案例)
案例要求:判断某个用户名是否存在,若存在,则把密码改为”888888“,若不存在,就增加这个用户信息(信息包括昵称nickname 和 密码pwd);key表示用户名,是唯一的,不可以重复;使用map[string]map[string]string 的map类型;编写一个函数modifyUser(users map[string]map[string]string,name strin...原创 2019-06-27 18:48:56 · 32460 阅读 · 0 评论 -
Go面试: 求101-200之间的素数 (Golang经典编程案例)
案例:判断101-200之间有多少个素数,并输出所有素数。思路分析:判断素数的方法:用一个数分别去除2,如果能被整除,则表明此数不是素数,反之是素数。package mainimport "fmt"func main() { for i := 101; i <= 200; i++ { for j := 2; j <= i; j++ { if i != j &am...原创 2019-06-27 15:06:31 · 30352 阅读 · 0 评论 -
Go语言_数据结构_哈希_实现雇员管理系统(增删改查)
散列表(Hash table,也叫哈希表),是根据关键码值(key value)而直接进行访问的数据结构。谷歌面试题:使用hashtable实现雇员管理系统。要求:不使用数据库,尽量节省内存,速度越快越好;添加时,保证按雇员的id从低到高插入。思路分析:使用链表来实现哈希表,该链表不带表头(即:链表的第一个节点就存放雇员信息)代码实现增删改查(显示所有员工,按id查询)pa...原创 2019-07-12 11:29:39 · 31983 阅读 · 0 评论 -
用Go语言实现登录验证 (Golang经典编程案例)
用Go语言实现登录验证,有3次机会,如果用户名为 zhangsan ,密码为 123456 ,则提示登录成功,否则提示还有几次机会,次数用完,提示登录失败。代码如下:package mainimport "fmt"func main() { var name string var pwd string var loginChance = 3 for i := 1; i <=...原创 2019-06-21 16:34:08 · 37633 阅读 · 11 评论 -
Go语言_数据结构_二叉树的三种遍历方式(前序,中序,后序)
二叉树的三种遍历方式:代码实现:package mainimport ( "fmt")type Hero struct { No int Name string Left *Hero Right *Hero}//前序遍历[先输root结点,然后再输出左子树,然后再输出右子树]func PreOrder(node *Hero) { if node != nil {...原创 2019-07-12 13:42:46 · 32310 阅读 · 0 评论 -
用Go语言实现出票系统 根据淡旺季的月份和年龄,打印票价 (Golang经典编程案例)
出票系统:根据淡旺季的月份和年龄,打印票价。旺季:4月到10月:成人(18~60岁),票价:60元;儿童(小于18岁),票价:半价;老人(18~60岁),票价:1/3票价;淡季:其它月份成人:票价 40元其他:票价 20元用Go语言代码实现如下:package mainimport ( "fmt")func main() { //实现出票系统 根据淡旺季的月...原创 2019-06-21 10:57:44 · 28026 阅读 · 0 评论 -
Golang项目:客户信息管理系统(附源码) (Golang经典编程案例)
1.项目需求分析模拟实现基于文本界面的《客户关系管理软件》;该软件能够实现对客户对象的插入,修改和删除(用切片实现),并且能够打印客户信息明细表。2.项目的界面设计主界面:添加界面:修改界面:删除客户界面:客户列表界面:3.系统的程序框架图4.功能实现的代码首先,看一下项目结构:在costumer.go中,代码如下:package modelimpo...原创 2019-07-02 11:24:22 · 37616 阅读 · 1 评论 -
Go语言 闭包的最佳实践 (Golang经典编程案例)
闭包:一个函数和与其相关的引用环境组合的一个整体。最佳实践:编写一个程序,具体要求如下:编写一个函数 makeSuffix(suffix string) ,可以接收一个文件后缀名(比如.jpg),并返回一个闭包;调用闭包,可以传入一个文件名,如果该文件名没有指定的后缀(比如 .jpg),则返回 文件名.jpg,如果有 .jpg后缀,则返回源文件名;strings.HasSuffix,该函...原创 2019-06-25 19:29:48 · 28910 阅读 · 1 评论 -
Go面试题:将一个正整数分解质因数 (Golang经典编程案例)
案例:将一个正整数分解质因数。例如:输入90,打印出90=233*5。分析思路:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。如果n<或者>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。如果n不能被k整除,则用k+1作为k的值,重复执行...原创 2019-06-28 10:12:21 · 31813 阅读 · 2 评论 -
Go面试:打印出九九乘法表 (Golang经典编程案例)
用Go语言打印出九九乘法表,代码如下:package mainimport ( "fmt")func main() { //打印出九九乘法表 var num int = 9 for i := 1; i <=num; i++ {//i表示行数,即层数 for j :=1;j<=i;j++ { fmt.Printf("%v*%v=%v \t",j,i,i*j)...原创 2019-06-21 09:21:58 · 27507 阅读 · 0 评论 -
用Go语言 轻松计算1到20各个数的阶层 (Golang经典编程案例)
案例:计算1到20各个数的阶层,并且把各个数的阶层放到map中,最后显示出来,要求使用goroutine完成。代码如下:package mainimport ( "fmt")//1.map应该是全局的var( myMap = make(map[int]int, 10))//test函数就是计算 n!,把结果放到myMap中func test(n int){ res :...原创 2019-07-07 20:54:49 · 33208 阅读 · 2 评论 -
Go面试: 求出一个数组的最大值,并得到对应的下标 (Golang经典编程案例)
案例:求出一个数组的最大值,并得到对应的下标,代码如下:package mainimport ( "fmt")func main() { var intArr = [...]int{3,-4,93,8,12,29} maxVal := intArr[0] maxValIndex := 0 for i := 0; i < len(intArr); i++ { //从...原创 2019-06-26 11:21:40 · 34980 阅读 · 0 评论 -
用Go语言 遍历结构体的字段和调方法 (反射最佳实践) (Golang经典编程案例)
案例:使用反射来遍历结构体的字段,调用结构体的方法,并获取结构体标签的值。package mainimport ( "fmt" "reflect")//定义Monster结构体type Monster struct { Name string `json:"name"` Age int `json:"monster_age"` Score float32 `json:"成绩"...原创 2019-07-08 17:59:52 · 49882 阅读 · 1 评论 -
用Go语言 实现的数学相关案例汇总 (Golang经典编程案例)
用Go语言打印1~100之间 9的倍数的整数的个数及总和,代码如下:package mainimport "fmt"func main() { var count uint64 = 0 var sum uint64 = 0 var i uint64 = 1 fmt.Print("100以内9的倍数的整数有:") for ; i <= 100; i++ { if i ...原创 2019-06-21 14:26:12 · 27925 阅读 · 0 评论 -
Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)
入栈和出栈代码实现如下:package mainimport ( "fmt" "errors")//使用数组来模拟一个栈的使用type Stack struct { MaxTop int // 表示我们栈最大可以存放数个数 Top int // 表示栈顶, 因为栈顶固定,因此我们直接使用Top arr [5]int // 数组模拟栈}//入栈func (this *S...原创 2019-07-12 10:06:58 · 32916 阅读 · 0 评论 -
Go语言_数据结构_递归_迷宫问题(代码实现)
迷宫问题,代码如下:package mainimport ( "fmt")//编写一个函数,完成老鼠找路//myMap *[8][7]int:地图,保证是同一个地图,使用引用//i,j 表示对地图的哪个点进行测试func SetWay(myMap *[8][7]int, i int, j int) bool { //分析出什么情况下,就找到出路 //myMap[6][5] ...原创 2019-07-12 10:34:29 · 31997 阅读 · 0 评论 -
Go语言中 封装的理解和实现细节 (Golang经典编程案例)
封装:把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的方法,才能对字段进行操作。封装的好处:隐藏实现细节;可以对数据进行验证,保证数据安全合理。如何体现封装:对结构体中的属性进行封装;通过方法,包,实现封装。封装的实现步骤:将结构体、字段的首字母小写;给结构体所在的包提供一个工厂模式的函数,首字母大写,类似一个构造函数;提供一个...原创 2019-06-30 18:46:41 · 34478 阅读 · 0 评论 -
Go的反序列化:将json字符串 反序列化成对应数据(比如:结构体,map,切片) (Golang经典编程案例)
json反序列化是指,将json字符串 反序列化成对应数据(比如:结构体,map,切片)下面分别将struct,map,slice 反序列化成对应数据。案例1:将json字符串,反序列化成structpackage mainimport ( "encoding/json" "fmt")type Hero struct { Name string Age int Birth...原创 2019-07-04 11:06:56 · 35783 阅读 · 1 评论 -
Go语言_数据结构_环形单向链表的实现
完成对单向环形链表的添加节点,删除节点和显示。代码如下:package mainimport ( "fmt")//定义猫的结构体结点type CatNode struct { no int //猫猫的编号 name string next *CatNode}func InsertCatNode(head *CatNode, newCatNode *CatNode) {...原创 2019-07-11 16:41:15 · 31814 阅读 · 0 评论 -
Go面试: 实现随机生成6个数,并将其反转打印 (Golang经典编程案例)
案例:随机生成6个数,并将其反转打印 ,代码如下:package mainimport ( "fmt" "math/rand" "time")//随机生成6个数,并将其反转打印func main() { var intArr [6]int //len := len(intArr) rand.Seed(time.Now().UnixNano()) for i := 0; i...原创 2019-06-26 14:15:20 · 30155 阅读 · 0 评论 -
Go语言_数据结构_排序汇总(代码实现包括:冒泡排序,选择排序,插入排序,快速排序)
排序是将一组数据,以指定的顺序进行排列的过程,常见的排序:冒泡排序;选择排序;插入排序;快速排序。冒泡排序参考:https://blog.csdn.net/cui_yonghua/article/details/93750503选择排序代码如下:package mainimport ( "fmt")//编写函数selectSort 完成排序func SelectSort...原创 2019-07-11 17:33:54 · 31794 阅读 · 0 评论 -
Go语言 文件操作的 2个读文件案例 (Golang经典编程案例)
文件在程序中是以流的形式来操作的。原创 2019-07-02 23:14:14 · 31840 阅读 · 0 评论 -
Go语言_数据结构_双向链表的应用
单向链表的查找方向只能是一个方向,而双向链表可以向前或者向后查找;单向链表不能自我删除,需要靠辅助节点,而双向链表,可以自我删除。代码实现如下:package mainimport ( "fmt")//定义一个HeroNodetype HeroNode struct { no int name string nickname string pre *H...原创 2019-07-11 16:09:22 · 31855 阅读 · 0 评论 -
Go语言 如何高效率 统计200000以内的素数 (Golang经典编程案例)
案例:以最短的时间,统计200000以内的素数。思路:写一个for循环,判断各个数是不是素数;使用并发/并行的方式,将统计素数的任务分配给8个goroutine去完成。下面分别用两种方式统计:代码1:使用for循环package mainimport ( "time" "fmt")func main() { start := time.Now().Unix() ...原创 2019-07-05 15:24:45 · 32769 阅读 · 1 评论 -
Go的序列化:将数据(比如:结构体,map,切片,基本类型)序列化成json字符串 (Golang经典编程案例)
介绍:json序列化是指,将有 key-value 结构的数据类型(比如结构体,map,切片)序列化成json字符串的操作。下面分别演示结构体,map,切片,基本类型序列化成json字符串。案例1:结构体的序列化package mainimport ( "fmt" "encoding/json")//定义一个结构体type Hero struct{ Name string ...原创 2019-07-03 17:10:54 · 40273 阅读 · 1 评论 -
1个案例彻底弄懂 Go语言中的switch case语句 (Golang经典编程案例)
案例1:根据用户输入的月份,打印该月份所属的季节。package mainimport ( "fmt")func main() { //根据用户输入的月份,打印该月份所属的季节 var month byte fmt.Print("请输入月份:") fmt.Scanln(&month) switch month { case 3, 4, 5: fmt.Pri...原创 2019-06-21 11:32:23 · 39474 阅读 · 3 评论 -
Go语言_数据结构_稀疏数组与原始数组的相互转换
1. 基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。2. 稀疏数组处理方法:记录数组一共有几行几列,有多少不同的值;思想:把具有不同值得元素得行列 及值记录在一个小规模的数组中,从而缩小程序的规模。3. 应用实例:使用稀疏数组,来保留类似棋盘,地图等二维数组;使用稀疏数组存盘,并且可以重新恢复原来的二维数组。4. 代码实现:pa...原创 2019-07-11 14:13:12 · 31964 阅读 · 0 评论