![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang
凉心良意
凉心良意
展开
-
Go typeof、 Kind、Elem、Name用法
GO typeof 用法type Hello struct { Name string}func useTypeOf(val interface{}) { msgType := reflect.TypeOf(val) msgKind := msgType.Kind() msgID := msgType.Elem() msgIDname := msgType.Elem().Name() fmt.Println("Type is ", msgType) fmt.Println("原创 2022-03-21 20:27:25 · 1312 阅读 · 0 评论 -
Go channel 边写边读和一次性写一次性读(有无缓冲)
有缓冲 (边写边消费)当channel 容量 和 消费生产容量相同时,不会发生阻塞,我们看这里package mainimport ( "fmt" "time")func main() { c := make(chan int, 3) fmt.Println("len c is ", len(c), "cap c is ", cap(c)) go func() { defer fmt.Println("sub go is dnoe!") for i := 0; i <原创 2022-02-07 12:59:50 · 1172 阅读 · 0 评论 -
Golang 操作Redis建立连接池
文章导航目录流程如下:Code运行结果:流程如下:1、事先初始化一定数量的连接,放入到连接池;2、当Go需要操作Redis时,直接从Redis连接池取出连接即可;3、这样可以节省临时获取Redis连接的时间,从而提高效率;Code全部都在代码里了.package mainimport ( "fmt" "github.com/garyburd/redigo/redis")var pool *redis.Poolfunc init() { pool = &redis.P原创 2020-08-06 17:08:33 · 1032 阅读 · 0 评论 -
Golang连接redis 并向redis写入和读取数据
文章导航目录第一步—下载包:第二步—开启Redis服务端和客户端:第三步—建立连接:运行结果:第一步—下载包:在连接Redis之前,我们需要安装一个包,在你的 gopath 目录下输入下面这个命令go get github.com/garyburd/redigo/redis如果不知道自己的gopath,输入 sudo vim /etc/profile 可以查看下载好以后,你会发现自己的 src文件 中多了一个 github.com 文件,这就说明下载好了我的目录结构是这样的:第二步—开启R原创 2020-08-06 10:42:53 · 6361 阅读 · 4 评论 -
Golang | 在不关闭管道的情况下,防止阻塞的解决办法
文章导航目录前言:案例:结果:前言:在实际开发当中,我们有时候不好确定什么时候要关闭管道,也就不能随便的close掉,那么我们就是可以使用select 完美解决案例:我们创建两个可以发生死锁的管道,然后通过 select - return 关掉它package mainimport "fmt"func main() { intChan := make(chan int, 10) for i := 0; i < 10; i ++ { intChan<- 1 } s原创 2020-07-30 19:13:56 · 834 阅读 · 0 评论 -
Golang 发生死锁 协程配合管道解决
文章导航目录题目要求:思路分析:题目要求:1、开启一个writeData 协程,向管道中写入50个整数2、开启一个readData 协程,从管道intChan中读取writeData写入的数据3、注意:write 和read 操作的是同一个管道4、主线程需要等待writeData 和 readData协程都完成工作才能退出管道思路分析:...原创 2020-07-30 12:45:10 · 502 阅读 · 0 评论 -
Golang | 快速创建管道案例
All in code :package mainimport "fmt"func main() { // 演示管道的使用 // 演示一个可以存放3个int类型的管道 var intChan chan int intChan = make(chan int, 3) // 查看intChan是什么 fmt.Printf("intChan 的值是=%v , intChan 自己本身的地址是= %p \n", intChan, &intChan) // 向管道写入数据 in原创 2020-07-03 18:01:10 · 576 阅读 · 0 评论 -
Go实现协程,实例
Smile 我会两种语言,一种写给程序执行,一种说给你听 文章导航目录什么是协程?如何快速启动一个协程运行结果解释未开启协程流程图:小结什么是协程?Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。如何快速启动一个协程package mainimport ( "fmt" "strconv" "time")func test() { for i := 1; i <= 10; i ++...原创 2020-06-29 15:58:15 · 1124 阅读 · 0 评论 -
Go | 创建结构体的四种方式
Smile 我会两种语言,一种写给程序执行,一种说给你听。 package mainimport "fmt"type Person struct { Name string Age int}func main() { // 方式 1 : 直接声明 var p1 Person p1.Name = "Jack" p1.Age = 18 fmt.Println(p1) // 方式 2 : p2 := Person{"Ma...原创 2020-06-10 08:09:45 · 1330 阅读 · 0 评论 -
Golang | 独树一帜的面向对象的特点
Smile 一个程序就是一个世界,有很多的对象(变量) 文章目录Golang 语言“面向对象编程”的说明:结构体定义一个最简单的结构体CatGolang 语言“面向对象编程”的说明:Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的Golang中没有类(class),Go语言的结构体(struct)和其他编程语言的类(class)有同等地位,...原创 2020-06-09 14:04:40 · 266 阅读 · 0 评论 -
Golang | 实现二分查找
Go语言实现二分查找arr 是要查找的数组,在main()函数中BinaryFind()函数是实现的方法package mainimport "fmt"func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) { if leftIndex > rightIndex { fmt.Println("找不到") return } middleIndex := (leftIndex + r原创 2020-06-08 11:23:12 · 293 阅读 · 0 评论 -
Golang | for range 遍历数组 *小案例
func main(){ // 演示for-range 遍历数组 heroes := [...]string{"拉克丝", "凯特琳娜", "婆娑"} for i, v := range heroes { fmt.Printf("i=%v v=%v \n", i, v) // 或者 换一个方式 //fmt.Printf("heroes[%d]=%v \n", i, heroes[i]) }}第一种实现:i=0 v=拉克丝 i=1 v=凯特琳娜 i=2 v=婆娑原创 2020-06-06 17:32:54 · 1375 阅读 · 0 评论 -
Go init函数的 *作用 和 *细节 通俗易懂
作用:每一个源文件都可以包含一个init函数,该函数在main函数执行前,被Go运行框架调运,也就是说init会在main函数前被调用举例说明:package mainimport "fmt"func init (){ fmt.Println("init()....")}func main() { fmt.Println("main()....")}结果:init()....main()....通俗解释:init函数,通常可以在init函数中完成初始化工作in原创 2020-06-03 21:15:36 · 586 阅读 · 0 评论 -
Go 编写一个函数交换两个变量的值
问题: 编写swap 函数,交换两个变量的值代码:package mainimport "fmt"func swap(n1 *int, n2 *int){ t := *n1 *n1 = *n2 *n2 = t}func main() { a := 10 b := 20 swap(&a, &b) fmt.Printf("a=%v, b=%v", a, b)}输出:a=20, b=10详解:*int 根据地址交换值&a 和 &b原创 2020-06-03 20:29:51 · 532 阅读 · 0 评论 -
Go的指针及其内存布局 *通俗易懂
1、获取变量地址用&比如: var num int, 获取 num的地址: &num2、指针类型,指针变量存的是一个 地址,这个地址指向的空间才是值比如: var ptr *int = &num3、获取指针类型所指向的值,使用: *比如: var ptr *int, 使用 *ptr 获取ptr 指向的值举例说明:package mainimport "fmt"func main(){ // 基本数据类型在内存中的布局 var i int =原创 2020-05-23 16:20:32 · 583 阅读 · 0 评论 -
*简述 Golang String类型使用细节
1、字符串一旦赋值了,就不能修改了,在Go中字符串是不可变的2、字符串用双引号 “”会识别转译字符.eg:反引号3、字符串要想原生输出(输出一段代码),包括换行符和其他特殊符号,则需要 反引号 ` ,可以实现防止攻击字符串的拼接方式:var str = "hello" + "word"str += "haha"fmt.Println(str)运行结果:hello word haha当拼接一个很长的字符串时候, + 号 一定要放到每行的最后demo:var str = "hel.原创 2020-05-17 18:28:18 · 698 阅读 · 0 评论 -
*简述 什么叫细节啊, Golang字符类型满满的细节
1、字符常量是用单引号‘’括起来的单个字符.例如:var c1 byte = ‘a’var c2 byte = '中'var c3 byte = '9'2、 Go 中允许使用转译字符 '\' 来将其后的字符转化变为特殊字符型常量.例如:var c3 char = '\n'3、Go 语言的字符使用UTF-8 编码英文字母 1个 字节, 汉子 3个 字节4、在Go 中,字符的本质是一个整数,直接输时,是该字符对应的UTF-8编码的码值func main(){ var c1 b原创 2020-05-16 18:13:40 · 191 阅读 · 0 评论 -
*简述 Golang 查看变量占用字节大小
比如,查看一个变量 n2 占用的数据类型import ( "fmt" "unsafe")func main(){ var n2 int64 = 10 fmt.Printf("n2 的类型 %T n2占中的字节数是 %d", n2, unsafe.Sizeof(n2))}利用 unsafe.Sizeof(var_item) 可以返回 var_item 变量占用的字节数来源https://www.wangwanghub.com/...原创 2020-05-13 20:19:40 · 8008 阅读 · 0 评论 -
Golang 如何查看变量数据类型
使用 fmt.Printf() 格式化输出打印例子:import "fmt"func main(){ var n1 = 100 // Printf() 用于格式化输出 fmt.Printf("n1 的类型 %T", n1)}输出:来源https://www.wangwanghub.com/原创 2020-05-13 20:10:51 · 3785 阅读 · 0 评论 -
Go ”:=“的使用
All in the Code:package mainimport "fmt"func main(){ // 一次性声明多个变量 var n1, n2, n3 int fmt.Println("ni:", n1, "n2:", n2, "n3:", n3)// 一次性声明多个不同类型的变量 var n4, name, n5 = 100, "tom", 888 fmt.Println("n4:", n4, "name:", name, "n5:", n5)// 类型推倒 n7原创 2020-05-11 15:30:50 · 1290 阅读 · 0 评论 -
Go 特色之变量的使用
package mainimport "fmt"func main(){ // 第一种、使用变量类型,声明后若没有赋值则会使用默认值 // int 的默认值是0, var i int fmt.Println("i=", i) // 第二种、自行判断变量类型 var num = 10.11 fmt.Println("num=", num) // 第三种、 Go 特色: // 省略var, 注意,:= 左边不应该是已经声明过的, 否则会导致编译错误 // 下面的方式等价于原创 2020-05-11 15:03:01 · 136 阅读 · 0 评论