Go中的条件语句Switch示例详解

Go中的条件语句Switch示例详解

Switch简介 Go的switch的基本功能和C、Java类似: switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。 匹配项后面也不需要再加 break。 特点: switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case 重点介绍Go当中的Switch的两个特别点:** 表达式判断为true还需要执行后面的 case,可以使用 fallthrough type-switch...

2022-11-25 437 0
golang time常用方法详解

golang time常用方法详解

说明         在golang中,时间转换都会通过Time类型做一系列转换。主要包含,时间戳和时间字符串,时间字符串转换成另外的格式。总之所有的转换都是通过Time类型做中间转换。参考文档:https://golang.org/pkg/time/ 操作 1,获取当前时间 t1 := time.Now() // 返回的是时间Time类型 fmt.Println(t1, reflect.TypeOf(t1)) 2,获取指定时间 t4 := ti...

2022-11-25 440 0
关于golang利用channel和goroutine完成统计素数的思路

关于golang利用channel和goroutine完成统计素数的思路

1. 需求 要求统计1-200000的数字中,哪些是素数?这个问题在本章开篇就提出来了,可以使用goroutine和channel来完成 2.分析思路 传统的方法,就是使用一个循环,循环的判断各个数是不是素数【ok】 使用并发/并行的方式,将统计素数的任务分配给多个(x个)goroutine去完成,完成任务时间短 分析思路图:  代码实现: package main import ( "fmt" "time" ) // 需求: // 要求统计1-200000的数字...

2022-11-25 404 0
Go应该如何实现二级缓存

Go应该如何实现二级缓存

一、需求 实现二级缓存 程序运行起来后提示:“请输入命令:”,如果输入getall,查询并显示所有人员的信息 第一次时查询mysql并将结果缓存在redis,设置60秒的过期时间 以后的每次查询,如果redis有数据就从redis加载,没有则重复上一步的操作 二、实现连接Mysql并执行查询语句 先实现需求二,当输入命令getall时,查询并显示所有人员的信息。 package main ​ import ( "fmt" _"github.com/go-...

2022-11-25 444 0
Go中使用加密算法的方法

Go中使用加密算法的方法

哈希算法  md5 128bit,16字节 如:md5 (“hello world!”) = fc3ff98e8c6a0d3087d515c0473f8677 // 32位16进制数字 func Test(t *testing.T) { //方法一 str := "hello world!" has := md5.Sum([]byte(str)) md5str1 := fmt.Sprintf("%x", has) //将[]byte转成16进制 t.Log(md...

2022-11-25 430 0
Golang中实现简单的Http Middleware

Golang中实现简单的Http Middleware

本文主要针对Golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件的形式添加一些功能到管道中,一次请求和响应在管道中的执行过程如下 首先, 我定义了三个测试的中间件 Middleware1,2,3 如下 func Middleware1(next http.Handler) http.Handler { return http.HandlerFunc(func(...

2022-11-25 413 0
Go 协程超时控制的实现

Go 协程超时控制的实现

Go 协程超时控制 Select 阻塞方式 Context 方式 先说个场景: 假设业务中 A 服务需要调用 服务B,要求设置 5s 超时,那么如何优雅实现? Select 超时控制 考虑是否可以用 select + time.After 方式进行实现 这里主要利用的是通道在携程之间通信的特点,当程序调用成功后,会向通道中发送信号。没调用成功前,通道会阻塞。 select { case res := <-c2: fmt.Println(res) case <...

2022-11-25 432 0
Go语言运算符案例讲解

Go语言运算符案例讲解

算数运算符 算数运算符和C语言几乎一样 运算符 描述 实例 + 相加 A + B - 相减 A - B * 相乘 A * B / 相除 B / A % 求余 B % A ++ 自增 A++...

2022-11-25 419 0
Go语言指针使用分析与讲解

Go语言指针使用分析与讲解

普通指针 和C语言一样, 允许用一个变量来存放其它变量的地址, 这种专门用于存储其它变量地址的变量, 我们称之为指针变量 和C语言一样, Go语言中的指针无论是什么类型占用内存都一样(32位4个字节, 64位8个字节) package main import ( "fmt" "unsafe" ) func main() { var p1 *int; var p2 *float64; var p3 *bool; fmt.Println(unsafe.Si...

2022-11-25 406 0
Go语言异常处理案例解析

Go语言异常处理案例解析

异常处理 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常 golang中提供了两种处理异常的方式 一种是程序发生异常时, 将异常信息反馈给使用者 一种是程序发生异常时, 立刻退出终止程序继续运行 打印异常信息 Go语言中提供了两种创建异常信息的方式 方式一: 通过fmt包中的Errorf函数创建错误信息, 然后打印 package main import "fmt" func main() { //...

2022-11-25 392 0
golang中tar压缩和解压文件详情

golang中tar压缩和解压文件详情

查看官方文档,官方自带的演示: // 官方演示 package main import ( "archive/tar" "bytes" "fmt" "io" "log" "os" ) func main() { // 将若干文件写入压缩文档 // 这边源文件是直接写在代码里哈,然后也没有输出一个文档 // 后面会演示源文件进行压缩,然后输出一个tar.gz的压缩文档 var buf byte...

2022-11-25 443 0
聊聊Golang的语言结构和变量问题

聊聊Golang的语言结构和变量问题

一、语言结构和注意事项 package main // 声明 main 包,表明当前是一个可执行程序 import "fmt" // 导入内置的fmt包 func main(){ // main函数,是程序执行的入口 fmt.Println("Hello World!") // 在终端打印 Hello World! } 需要注意的是包裹代码的左大括号{ 在Golang中不能单独成为一行,例如下面这样: func main() { // 会报错 fmt....

2022-11-25 391 0
Go并发编程之sync.Once使用实例详解

Go并发编程之sync.Once使用实例详解

一.序 单从库名大概就能猜出其作用。sync.Once使用起来很简单, 下面是一个简单的使用案例 package main import ( "fmt" "sync" ) func main() { var ( once sync.Once wg sync.WaitGroup ) for i := 0; i < 10; i++ { wg.Add(1) // 这里要注意讲i显示的当参数传入内部的匿名函数 go func(i i...

2022-11-25 407 0
Go获取与设置环境变量的方法详解

Go获取与设置环境变量的方法详解

前言 今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过。希望这篇文章能够让你理解环境变量并掌握 Go 环境变量相关操作。 01 从安装 Go 说起 其实不止是安装 Go,其他语言一本也会有类似的问题。一般来说,安装完 Go 后,会建议将 go 可执行程序配置到 PATH 环境变量中。 比如我本地的 PATH 环境变量的值: $ echo $PATH /Users/xuxinhua/.go/bin:/usr/local/sbin:/usr/local/bin:/usr/bin...

2022-11-25 468 0
Go 互斥锁和读写互斥锁的实现

Go 互斥锁和读写互斥锁的实现

先来看这样一段代码,所存在的问题: var wg sync.WaitGroup var x int64 func main() { wg.Add(2) go f() go f() wg.Wait() fmt.Println(x) // 输出:12135 } func f() { for i:=0;i<10000;i++ { x = x+1 } wg.Done() } 这里为什么输出是 12135(不同的机器结果不一样),而不是20000。...

2022-11-25 367 0