DLang、Rust 以及 Golang 对比数据库操作方式

我们使用 DLang / Rust / Golang 在服务端开发的时候对数据库操作是家常便饭,而对于所谓的系统级编译型语言来说操作数据库可能没那么方便,不像 PHP 和 JAVA 那样,对于比较新的三个编译型语言我们来看看效果,刚好这三个语言的语法差异比较大。

一、数据插入 - INSERT

1.1 : DLang 插入数据

1import std.stdio; 2 3import hunt.database; 4 5void main() 6{ 7 auto db = new Database("mysql://root:123456@localhost:3306/test?charset=utf8mb4"); 8 9 int result = db.execute(`INSERT INTO user(username) VALUES("test")`); 10 11 // 打印插入数量 12 writeln(result); 13 14 db.close(); 15}

1.2 : Rust 插入数据

1extern crate postgres; 2 3use postgres::{Connection, SslMode}; 4 5fn main() { 6 let conn = Connection::connect("postgres://postgres@localhost", SslMode::None).unwrap(); 7 8 conn.execute("INSERT INTO user (username) VALUES (\"test\")", &[]).unwrap(); 9}

1.3 : Golang 插入数据

1import ( 2 "database/sql" 3 "fmt" 4 _ "github.com/lib/pq" 5 "time" 6 "log" 7) 8 9func main() { 10 db, err := sql.Open("postgres", "user=portgres password=123456 dbname=test sslmode=disable") 11 12 if err != nil { 13 log.Fatal(err) 14 return nil 15 } 16 17 stmt := db.Prepare("INSERT INTO user (username) VALUES (\"test\")") 18 19 stmt.Exec() 20 21 stmt.Close() 22} 23

二、数据查询 - SELECT

2.1 : DLang 查询数据

1import std.stdio; 2 3import hunt.database; 4 5void main() 6{ 7 auto db = new Database("mysql://root:123456@localhost:3306/test?charset=utf8mb4"); 8 9 foreach(row; db.query("SELECT * FROM user LIMIT 10")) 10 { 11 writeln(row["username"]); 12 } 13 14 db.close(); 15}

2.2 : Rust 查询数据

1extern crate postgres; 2 3use postgres::{Connection, SslMode}; 4 5fn main() { 6 let conn = Connection::connect("postgres://postgres@localhost", SslMode::None).unwrap(); 7 8 for row in &conn.query("SELECT * FROM user", &[]).unwrap(); 9 println!("Found person {}", row.get(0)); 10 } 11}

2.3 : Golang 查询数据

1import ( 2 "database/sql" 3 "fmt" 4 _ "github.com/lib/pq" 5 "time" 6 "log" 7) 8 9type User struct { 10 UserName string 11} 12 13func main() { 14 db, err := sql.Open("postgres", "user=portgres password=123456 dbname=test sslmode=disable") 15 16 if err != nil { 17 log.Fatal(err) 18 return nil 19 } 20 21 user := User{} 22 23 stmt := db.Query("SELECT * FROM user") 24 25 for rows.Next() { 26 rows.Scan(&user.UserName) 27 fmt.Println(user.UserName) 28 } 29 30 stmt.Close() 31} 32

三、总结

对于操作数据库来说静态类型语言的确不是很容易操作,类似 C++ 这么多年还没有相对容易使用的数据库操作的 library,但无论 Dlang / Rust 和 Golang 都能比较全面的操作数据库。

这三个语言的语法还有比较大的差异,DLang 语法可读性比较好(的确简单的像PHP一样方便了),Rust 相对来说操作符会多一些,而 golang 在执行 SELECT 之后需要创建对象绑定,不支持字段作为 key 的操作形式?(可能是我功课没做好)

在包引入方面 Dlang 最简单,Rust 相对来说颗粒度控制的更细,而 Golang 相对繁琐一些,需要几个包同时引入才可以操作数据库;相对 Rust 和 Golang 来说 Dlang 可以更方便的切换不同数据库而不需要修改业务逻辑代码。

总而言之系统级语言在服务端的应用日益增多,更多有意思的对比还需要大家一起来挖掘,不要沉浸在单一的脚本语言如 PHP、虚拟机语言 JAVA 和 C#,多多学习,现在语言的学习成本已经非常低,我们应该在不同的应用场景使用更适合的开发语言。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )