Xenolies

Welcome to Xenolies Blog !

Golang派生类型

Golang派生类型 (指针类型(Pointer) 数组类型 (Arrayllist) 结构化类型 (Struct) 通道类型 (Channel ) 函数类型(Func) 切片类型 (Slice) 接口类型(Interface) Map 类型 指针 Pointer 声明指针 1 var Name *Type Name :指针名 Type: 指针类型 注意: 指针需要指向的是一个具体的地址 声明地址需要在要声明的变量前面加 & 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package main import "fmt" func main() { var a int = 10 fmt.Println(a) var b *int b = &a //指针b 指向 a 的地址 *b = 100 //将 b 指向的内存地址赋为 100 fmt.

Golang 操作数据库

数据库连接和驱动 安装数据库驱动包 1 go get -u github.com/go-sql-driver/mysql 导入数据驱动 1 2 3 4 5 import ( "database/sql" _ "github.com/go-sql-driver/mysql" //引用包内部分函数 ) sql.DB 结构体 sql.DB结构是sql/database包封装的一个数据库操作对象,包含了操作数据库的基本方法。 DSN DSN全称为Data Source Name,表示数据库连来源,用于定义如何连接数据库,不同数据库的DSN格式是不同的,这取决于数据库驱动的实现, 下面是 go-sql-driver/sql 的DSN格式: 1 2 //[用户名[:密码]@][协议(数据库服务器地址)]]/数据库名称?参数列表 [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN] 连接数据库 在 sql/database包中.使用 sql.Open来连接数据库,值得注意的是 sql.Open 这样连接不会验证密码和账户是否正确,数据库是否存在,只会校验 DSN 格式. 1 2 3 4 5 6 7 8 9 drever := "mysql" //root为数据库用户名,后面为密码,tcp代表tcp协议,test处填写自己的数据库名称 DSN := "root:123123@tcp(127.0.0.1:3306)/godatabase?charset=utf8" db, err := sql.Open(drever, DSN) if err != nil { //不会校验用户名密码是否正确,只校验数据源格式 fmt.Printf("sql.Open err: %v", err) //dsn格式不正确时报错 return } 验证账号密码以及要连接的数据库是否正确 使用 sql.

Golang并发编程

Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。 goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。 并行和并发 并行:在同一时刻,有多条指令在多个CPU处理器上同时执行 2个队伍,2个窗口,要求硬件支持 并发:在同一时刻,只能有一条指令执行,但多个进程指令被快速地轮换执行 2个队伍,1个窗口,要求提升软件能力 Go语言并发优势 go从语言层面就支持了并发 简化了并发程序的编写 Goroutine Goroutine 是go并发设计的核心 Goroutine 就是协程,它比线程更小,十几个Goroutine 在底层可能就是五六个线程 go语言内部实现了Goroutine e的内存共享,执行Goroutine 只需极少的栈内存(大概是4~5KB) 使用Goroutine 1 go 函数名( 参数列表 ) 使用如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package main import ( "fmt" "time") func running() { var times int // 构建一个无限循环 for { times++ fmt.

Golang网络编程

协议 协议可以理解为规则,是数据传输和解释的规则,是通信双方都要遵守的规则。 协议存在的意义是为了让双方更好的沟通。 在双方之间被遵守的协议成为原始协议。 当此协议被更多的人采用后,不断的完善,最终形成一个稳定的、完整的文件传输协议,被广泛应用于各种文件传输过程中。该协议就成为了一个标准协议。 网络应用模型 C/S模型 : 需要在服务器端和客户端都安装部署,才能完成数据通信。性能好,因为可以提前把数据缓存到客户端本地,提高用户体验,限制也少,可采用的协议相对灵活。 B/S模型:只需要在服务器端安装部署,客户端只需要一个浏览器即可。优势是移植性非常好,不收平台限制,只需一个浏览器就可以打开。缺点是无法想C/S那样提前缓存大量数据在本地,网络受限时,应用的体验感非常差,而且浏览器采用的协议是标准http协议通信,没有C/S灵活 . 标准库net包基本使用 TCP编程 net库是Golang原生自带标准库,无需第三方包来支持网络功能。 服务器端基本代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package main import ( "fmt" "net" ) func main() { listener, err := net.Listen("tcp", "10.205.6.142:8088") if err != nil { fmt.Printf("net.Listen error: %v", err) return } fmt.

Golang Gin框架入门

Gin 是 Go语言写的一个 web 框架,它具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json。 框架介绍 Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍。如果你需要极好的性能,使用 Gin 吧。 Golang Gin 文档:文档 | Gin Web Framework (gin-gonic.com) 环境配置 下载Gin包 首先下载安装 gin 包: go get -u github.com/gin-gonic/gin 需要注意的是Gin框架需要Golang 1.13以上版本 有的时候会碰到因为GitHub被墙导致无法获取的情况, 这时候需要改一下Go module 的模块代理,改成国内代理的网站,可以点击下面网址来更改模块代理 七牛云 - Goproxy.cn 测试搭建 创建main.go,输入如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import ( "github.

Hexo折腾笔记-git分别配置Github和Gitee

介于Github Page访问实在蛋疼,就在Gitee上实名认证整了个Gitee Page, 本想着一台电脑同时可以使用Gitee和Github,对此颇为兴奋,结果在我Hexo d推送的时候,却遇到了个令人费解的问题.推送的时候遇到了无法推送的问题. 并且显示Please tell me who you are.可是我平时在github上Clone和提交代码,只在Gitee上搭建博客,而我就像用一个Git完成我的需求, 所以我就开始折腾的一下子. 首先参考这篇文章,建立一下基本配置 清除git的全局设置 建议在 git bash 中完成 如果是之前没设置过的,就不用清除了。 可以通过git config --global --list来查看是否设置过。 git config --global --unset user.name "你的名字" git config --global --unset user.email "你的邮箱" 生成新的 SSH keys Github ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱" Gitee 值得注意的是,一定要把github的邮箱和gitee的邮箱区别开来,即使用不同的邮箱,否则会冲突. ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "邮箱" 然后回车就行. 完成以后在~/.ssh / 下就可以看到生成的文件. 识别 SSH 新的私钥 默认只读取 id_rsa,为了让 SSH 识别新的私钥,需要将新的私钥加入到 SSH agent 中 1 2 3 ssh-agent bash ssh-add ~/.
0%