Go语言介绍以及如何在Go语言中操作MySQL数据库

人不走空

                                                                      

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

目录

      🌈个人主页:人不走空      

💖系列专栏:算法专题

⏰诗词歌赋:斯是陋室,惟吾德馨

一、Go语言介绍

二、Go语言特点

三、  Go语言应用场景

四、Go语言环境安装

五、Go语言实现Mysql数据库的增删概啥

安装操作数据库依赖Go-MySQL-Driver

代码实现

作者其他作品:


今天给大家介绍一下Go语言,以及实现MySQL数据库的操作示例,希望对大家能有所帮助!

图片

一、Go语言介绍

Go语言,也称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。以下是Go语言的一些主要特点:

二、Go语言特点

语法简洁:摒弃了一些复杂的编程概念和冗余的语法,容易学习

高效性能:采用的静态编译和垃圾回收机制,实现了高效的内存管理

并发支持:Go语言是为并发编程而设计的,原生支持goroutine和channel

强大的标准库:Go语言拥有丰富的标准库

社区活跃:Go语言的社区非常活跃,有着庞大的开发者群体

图片

三、  Go语言应用场景

图片

服务器端开发:适合构建高性能的服务器端应用程序。因为Go语言具有轻量级的协程(goroutine)和高效的并发编程机制。例如谷歌、Dropbox和Netflix等。

网络编程:适合构建Web服务器、微服务、网络爬虫、实时通信系统等。目前Go语言成为开发高负载网络应用的首选语言。

云计算:Go语言的轻量级和快速编译的特点使得它非常适合于构建云原生应用。例如Docker和Kubernetes等。

系统编程:适合成为开发操作系统、驱动程序和嵌入式系统。

工具开发:很多工具和框架都选择使用Go语言进行开发。例如,Docker、Etcd、InfluxDB和Prometheus等工具。

人工智能和大数据分析:Go语言的并发编程模型和内存管理机制使得它可以高效地处理大规模数据和复杂计算任务。

四、Go语言环境安装

安装Go语言环境,首先官网下载WindowsGo语言安装包

https://golang.google.cn/dl/

图片

安装之后,cmd运行命令检查环境是否安装成功。

图片

五、Go语言实现Mysql数据库的增删概啥

安装操作数据库依赖Go-MySQL-Driver

Go-MySQL-Driver是Go语言官方推荐的MySQL驱动, 是Go语言中使用MySQL的最佳选择

 

go get -u github.com/go-sql-driver/mysql

可能会报如下错误:

图片

原因

GO111MODULE 是 Go 1.11 引入的新版模块管理方式。

GO111MODULE 环境变量用于开启或关闭 Go 语言中的模块支持,它有 off、on、auto 三个可选值,默认为 auto

win10环境下需要执行如下命令:

 

go env -w GO111MODULE=auto
 

然后重新执行安装命令

 

go get -u github.com/go-sql-driver/mysql

如果下载的时候报错

 

connectex: A connection attempt failed because the connected party did not p

直接进入电脑的环境变量设置国内镜像地址

新建环境变量GOPROXY

值为

 

https://mirrors.aliyun.com/goproxy/

图片

点击确定后,重启命令行窗口,然后执行下载命令

图片

代码实现

 

package main

import (

  "database/sql"
  "fmt"
  "log"

  _ "github.com/go-sql-driver/mysql"




/*
*获取mysql数据库版本
*/
func showMysqlVersion() {
db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2?charset=utf8")
if err != nil {
log.Fatal(err)
}
db.Ping()
defer db.Close()

var version string

errt2 := db.QueryRow("SELECT VERSION()").Scan(&version)

if errt2 != nil {
log.Fatal(errt2)
}

fmt.Println(version)

}
/*
*查询数据测试
*/
func queryTest() {
// 设置数据库连接信息
db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
if err != nil {
log.Fatal(err)
}
defer db.Close()

// 执行查询
rows, err := db.Query("SELECT id, name, age FROM t_user")
if err != nil {
log.Fatal(err)
}
defer rows.Close()

// 遍历查询结果
for rows.Next() {
var id int
var name string
var age int
if err := rows.Scan(&id, &name, &age); err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s, Age: %d\n", id, name, age)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}


/*
*插入数据测试
*/
func insertTest() {
db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
db.Ping()
defer db.Close()

if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}

_, err2 := db.Query("INSERT INTO t_user ( `name`, `address`, `age`) VALUES('小刘','广东',35)")
if err2 != nil {
log.Fatal(err2)
}

fmt.Println("数据插入成功")

}
/*
*数据更新测试
*/
func updateTest() {
db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
db.Ping()
defer db.Close()

if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}

_, err2 := db.Query("update t_user set name='小明2' where id=1 ")
if err2 != nil {
log.Fatal(err2)
}

fmt.Println("数据更新成功")

}

/*
*数据更新测试
*/
func delTest() {
db, err := sql.Open("mysql", "root:12345678@tcp(127.0.0.1:3306)/test2")
db.Ping()
defer db.Close()

if err != nil {
fmt.Println("connect DB error !")
log.Fatalln(err)
}

_, err2 := db.Query("delete from t_user where id=2 ")
if err2 != nil {
log.Fatal(err2)
}

fmt.Println("数据删除成功")

}

func main(){
delTest()
updateTest();
//insertTest()
queryTest()
showMysqlVersion()
}


 

运行效果如下图

图片


作者其他作品:

【Java】Spring循环依赖:原因与解决方法

OpenAI Sora来了,视频生成领域的GPT-4时代来了

[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读

【Java】深入理解Java中的static关键字

[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读

了解 Java 中的 AtomicInteger 类

算法题 — 整数转二进制,查找其中1的数量

深入理解MySQL事务特性:保证数据完整性与一致性

Java企业应用软件系统架构演变史

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/491885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

卷起来——高级数据分析师

要成为一名高级数据分析师,需要掌握一系列的技能,包括数据处理、统计分析、机器学习、数据可视化以及业务理解等,喜欢或者想往这方面发展的童鞋们,卷起来,点击以下链接中的链接,备注"分析"进群交…

Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!

文章目录 前言国际化翻译Api选择小牛测试 语言选择代码逻辑实体对象翻译帮助类导出模板读取文件翻译测试多语言测试 综合翻译文件准备测试代码测试结果 完整代码实体类翻译帮助类网络帮助类 最终效果翻译前翻译中翻译后 总结 前言 为了面向更大的市场,国际化是肯定…

TransformControls 是 Three.js 中的一个类,用于在网页中进行 3D 场景中物体的交互式操作。

demo案例 TransformControls 是 Three.js 中的一个类,用于在网页中进行 3D 场景中物体的交互式操作。让我们来详细讲解它的输入参数、输出、属性和方法: 输入参数: TransformControls 构造函数通常接受两个参数: camera&#…

gcc任意版本安装流程(linux)

一.更换镜像源 仅仅针对有需要换镜像需求的用户 sudo gedit /etc/apt/sources.list 用于在基于Debian的Linux发行版(如Ubuntu)上用来编辑软件源列表的命令。 我们更换阿里源: deb http://mirrors.aliyun.com/ubuntu/ focal main restricted…

Linux课程____shell脚本应用

一、认识shell 常用解释器 Bash , ksh , csh 登陆后默认使用shell,一般为/bin/bash,不同的指令,运行的环境也不同 二、 编写简单脚本并使用 # vim /frist.sh //编写脚本文件,简单内容 #!/bin/bash …

ethers.js:sign(签名)

Signers 在ethers中Signer是以太坊账户的抽象,可以用来签名消息和交易,如将签名的交易发送到以太坊网络以执行状态更改的操作。 npm install ethers5.4.0// 引入 import { ethers } from ethers签名 this.provider new ethers.providers.Web3Provider(…

SD卡备份和烧录ubuntu20.04镜像

设备及系统:nuc幻影峡谷工控机,ubuntu20.04 一、确定SD卡设备号的两种方法 方法1: 将有ubuntu镜像的SD卡插入读卡器,再将读卡器插入电脑主机,在 工具 中打开 磁盘,查看SD卡设备号,如下图所示…

centos 7 安装磐维(PanWeiDB)数据库(单机)

前置环境准备 文件系统环境要求 文件系统环境所要求的扇区必须为512bytes,查看方法如下: [rootdevops-core-highapp3-b-32 ~]#df -h /apps/ [rootdevops-core-highapp3-b-32 ~]#ll /dev/mapper/vg--docker-lvapp [rootdevops-core-highapp3-b-32 ~]#f…

AXI-Stream——草稿版

参考自哔站:FPGA IP之AXI4-Lite AXI4-Stream_哔哩哔哩_bilibili 信号 传输层级从小到大 包(----------transfer--transfer--------)------delay--------包(----------transfer--transfer--------) TKEEP和TSTRB共同决定了是哪种数据流

BEVFusion-ICRA-2023异常

异常: RuntimeError: /tmp/mmcv/mmcv/ops/csrc/pytorch/cuda/sparse_indice.cu 126 cuda execution failed with error 2 ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 2901726) of binary: 解决: …

Arco动态生成表头信息

文章目录 需求分析需求 a-table动态生成表头,需求如下,部分是动态生成的表头,部分是固定的表头信息,现需要在动态表头的表中拿到固定表中的字段信息,但表头是动态表中返给的 分析 用两个表进行接收不同的信息,一个存放固定的 视图<a-table ref="tableRef&quo…

vue3从精通到入门2:虚拟DOM的生成与真实DOM的转化

虚拟 DOM 实现是 Vue 框架的核心部分之一&#xff0c;它负责在真实 DOM 之上抽象出一个轻量级的、可复用的 JavaScript 对象树&#xff0c;用于高效地更新视图。 什么是虚拟DOM? 虚拟 DOM 是一个编程概念&#xff0c;它将真实的 DOM 树抽象为一个轻量级的 JavaScript 对象树…

Spring事务-两种开启事务管理的方式:基于注解的声明式事务管理、基于编程式的事务管理

Spring事务-两种开启事务管理的方式 1、前期准备2、基于注解的声明式事务管理3、基于编程式的事务管理4、声明式事务失效的情况 例子&#xff1a;假设有一个银行转账的业务&#xff0c;其中涉及到从一个账户转钱到另一个账户。在这个业务中&#xff0c;我们需要保证要么两个账户…

Spark—GraphX实战 OneID

OneID 前面我们学习了ID Mapping&#xff0c;包括ID Mapping 的背景介绍和业务场景&#xff0c;以及如何使用Spark 实现ID Mapping&#xff0c;这个过程中涉及到了很多东西&#xff0c;当然我们都通过文章的形式介绍给大家了&#xff0c;所以你再学习今天这一节之前&#xff0…

python项目子模块配置

创建模块子应用 1.在项目中新建一个apps的目录&#xff0c;用于存放所有子模块应用 2.在apps包下创建所需应用 注册模块子应用 1.在主模块里面寻找到配置文件 2.在配置文件中找到 INSTALLED_APPS&#xff0c;添加相应路径apps.users Tips: 由于每次添加都要输入前缀apps.会…

解决:WARN:Tue Mar 26 23:36:57 CST 2024 WARN: Establishing SSL connection

小码在学习Java的JDBC编程中&#xff0c;碰到了一条非常长的异常警告&#xff0c;idea的框都装不下了&#xff01;&#xff01; 一、异常信息 Tue Mar 26 23:36:57 CST 2024 WARN: Establishing SSL connection without servers identity verification is not recommended. Ac…

C++类和对象、面向对象编程 (OOP)

文章目录 一、封装1.抽象、封装2.类和对象(0)学习视频(1)类的构成(2)三种访问权限(3)struct和class的区别(4)私有的成员变量、共有的成员函数(5)类内可以直接访问私有成员&#xff0c;不需要经过对象 二、继承三、多态1.概念2.多态的满足条件3.多态的使用条件4.多态原理剖析5.纯…

设计模式-装饰者模式在Java中使用实例-打印发票装饰抬头和脚注

场景 设计模式-装饰者模式在Java中的使用示例&#xff1a; 设计模式-装饰者模式在Java中的使用示例_java装饰者模式例子-CSDN博客 上面装饰器的调用示例如下 AbstarctComputer computer;//要买1台电脑computer new BaseComputer();//加一个内存条computer new MemoryDecor…

备考ICA----Istio实验9---熔断Circuit Breaking 实验

备考ICA----Istio实验9—熔断Circuit Breaking 实验 1. 环境准备 创建httpbin环境 kubectl apply -f istio/samples/httpbin/httpbin.yaml kubectl get svc httpbin2. 创建测试用客户端 kubectl apply -f istio/samples/httpbin/sample-client/fortio-deploy.yaml3. 创建Ht…

YOLOv8融入低照度图像增强算法---传统算法篇

YOLOv8n原图检测YOLOv8n增强后检测召回率和置信度都有提升 前言 这篇博客讲讲低照度,大家都催我出一些内容,没想到这么多同学搞这个,恰好我也做过这方面的一些工作,那今天就来讲解一些方法,低照度的图像增强大体分“传统算法”和“深度学习算法”; 目前低照度的图像增…