首页
关于
README
Search
1
如何配置终端现代化Neovim
633 阅读
2
mdk3工具使用
467 阅读
3
关于C语言
466 阅读
4
Windows11pro 下载体验
449 阅读
5
关于Docker容器--0×01
376 阅读
默认分类
网络技术
渗透测试
编程语言
C语言
Python
Linux
搞机技巧
Termux
golang
数学
Search
标签搜索
printf
mach
sin cos tan
Toanle
累计撰写
40
篇文章
累计收到
1
条评论
首页
栏目
默认分类
网络技术
渗透测试
编程语言
C语言
Python
Linux
搞机技巧
Termux
golang
数学
页面
关于
README
搜索到
3
篇与
golang
的结果
2023-08-02
关于GOlang泛型
首先,我们先了解什么泛型。在维基百科上解释如下:泛型程序设计(英文:generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。Go 1.18版本增加了对泛型的支持,泛型也是自 Go 语言开源以来所做的最大改变。我们来看下在1.18版本以前,我们怎么实现一个反转切片的函数func reverse(s []int) []int { l := len(s) r := make([]int, l) for i, e := range s { r[l-i-1] = e } return r } fmt.Println(reverse([]int{1, 2, 3, 4})) // [4 3 2 1]可是这个函数只能接收[]int类型的参数,如果我们想支持[]float64类型的参数,我们就需要再定义一个reverseFloat64Slice函数。func reverseFloat64Slice(s []float64) []float64 { l := len(s) r := make([]float64, l) for i, e := range s { r[l-i-1] = e } return r }可以看出,每实现一个数据类型,都需要写相应函数,一遍一遍地编写相同的功能是低效的,实际上这个反转切片的函数并不需要知道切片中元素的类型,但为了适用不同的类型我们把一段代码重复了很多遍。Go1.18之前我们可以尝试使用反射去解决上述问题,但是使用反射在运行期间获取变量类型会降低代码的执行效率并且失去编译期的类型检查,同时大量的反射代码也会让程序变得晦涩难懂。类似这样的场景就非常适合使用泛型。从Go1.18开始,使用泛型就能够编写出适用所有元素类型的“普适版”reverse函数。package main import "fmt" func reverseWithGenerics[T any](s []T) []T { l := len(s) r := make([]T, l) for i, e := range s { r[l-i-1] = e } return r } func main() { fmt.Println(reverseWithGenerics([]any{1, 2, 3, 4, "23s1", 212, 111.1})) // [4 3 2 1] } //输出结果:[111.1 212 23s1 4 3 2 1]泛型为Go语言添加了三个新的重要特性:函数和类型的类型参数。将接口类型定义为类型集,包括没有方法的类型。类型推断,它允许在调用函数时在许多情况下省略类型参数。类型参数类型形参和类型实参我们之前已经知道函数定义时可以指定形参,函数调用时需要传入实参。现在,Go语言中的函数和类型支持添加类型参数。类型参数列表看起来像普通的参数列表,只不过它使用方括号([])而不是圆括号(())。借助泛型,我们可以声明一个适用于一组类型的min函数func min[T int | float64](a, b T) T { if a <= b { return a } return b }
2023年08月02日
33 阅读
0 评论
0 点赞
2023-01-31
在golang编程中使用指针
在后端开发中,我们可能对指针不太陌生,在C与C++语言编程中,掌握指针是是入门必备技术一点。所以指针的重要性不言而语,结下来我们一起看来学习一下如何在Golang语言中使用指针吧。首先,我们先知道&与*的区别//int a =100 //这里表示我们定义一个变量a var b *int //这里表示我们定义一个变量b,存储的是int的指针 b = &a // a 指向 b 的地址 *&b=120 fmt.Println(b)//120 我们可以修改b的数字来间接修改A的数值。下面为例:add()函数接收的是一个为sint结构体的指针我们在main函数中,把dome的指针地址传给add,这样udome的内存地址指向了domes的内存地址,我们可以修改指向的地址改变数据。
2023年01月31日
76 阅读
0 评论
0 点赞
2021-06-26
在golang编程中如何使用数据库
首先我们得先导入需要的包import ( "database/sql" _ "github.com/go-sql-driver/mysql" )导入后,我们要连接数据库用func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/youdb") if err != nil { log.Fatal(err) } defer db.Close() }user:数据库用户名 password:数据库用户的密码 youdb 这样我们就连上了数据库,现在我们可以用db.ping测试连接成功与否。err = db.Ping() if err != nil { // 这里可以添加错误处理办法 }现在我们进入数据库里 选择我们所需要的数据库里,然后创建一个数据表;mysql -u root -p use qb.qq 现在我们创建一个数据表: CREATE TABLE `doctor_tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT '' COMMENT '姓名', `age` int(11) DEFAULT '0' COMMENT '年龄', `sex` int(11) DEFAULT '0' COMMENT '性别', `addTime` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='医生表';//我们通过CRATE TABLE创建一个名为docker_tb的数据表 //创建一个为id名 数据类型为int //创建一个name名字,数据类型为varchar,使用UTF8字符规则 //创建一个addtime 数据类型为dadetime用于计算创建数据时间通过PRIMARY KEY设置主健,我们通过主健来查找该组数据 ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='医生表';这段解释为我们使用InnoDB 数据类型,CHARSET设置为:utf8 注释为医生表;现在我们对这个数据表进行增,删,改,查;
2021年06月26日
193 阅读
0 评论
0 点赞