Golang
go
bob62856
这个作者很懒,什么都没留下…
展开
-
golang取反
首先明确一个概念,由于在计算机中二进制都是以其补码形式存放在内存中的。所以要知道 ^9 就是对 9 的补码取反,也就是说无论是整数还是负数对其取反都是对其补码取反。原创 2023-09-22 23:51:41 · 236 阅读 · 0 评论 -
golang优先级坑
但结果却是不同的,在golang中&的优先级^和|高,如下。看如下代码,我本以为a1, a2是相同的。原创 2023-09-22 23:43:41 · 413 阅读 · 0 评论 -
golang append坑
可以看出b改变之后,在a中也发生了改变。原创 2023-09-03 22:23:54 · 341 阅读 · 0 评论 -
golang中map赋值
众所周知,golang中map是一个指针,既然是一个指针,那么参数传递、赋值应该都是指针传递,而下面的例子也印证了我的想法。原创 2023-08-31 17:49:53 · 821 阅读 · 0 评论 -
golang fmt %p
对一个指针来说,%p打印的不是指针的地址,而是指针的内容,如下:原创 2023-08-31 16:49:51 · 120 阅读 · 0 评论 -
golang中逗号
写golang的时候总是疑惑什么时候需要加逗号,在此总结一下。需要加逗号,但是注意最后一个entry不用加。也需要加逗号,最后一个不加。原创 2023-08-31 07:56:40 · 414 阅读 · 0 评论 -
golang slice参数传递
这样就可以解释了,由于值传递,所以有第4点,slice已经发生了copy;但是由于len和capacity是值传递,所以都是0, 那么append操作会新申请内存并返回,所以有第5点,slice的地址发生了变化;但是2的结果有所不同,因为&slice其实是slice变量的地址,而不是其中array的地址。搞清楚上面两个问题后,我们再来看将slice作为参数传递给函数,看如下代码,参考。我们知道初始化slice有几种方式,注意以下代码,参考。,并且2和3初始化了底层的array指针的地址,并且。原创 2023-07-15 19:40:41 · 733 阅读 · 0 评论 -
golang for range循环坑
这是符合预期的,a一直在变化,for循环中len(a)也一直在变化。可以看出不用for range,是不会存在这种问题的。可见range a中的a还是原数组。原创 2023-07-12 10:24:20 · 425 阅读 · 2 评论 -
golang grpc ssl
golang grpc ssl原创 2023-02-24 15:31:00 · 418 阅读 · 0 评论 -
golang :=用法注意
golang := 用法注意原创 2023-02-23 11:25:57 · 118 阅读 · 0 评论 -
Golang中对一个变量同时读写到底需不需要保证原子性?
Golang Concurrent R/W原创 2022-11-07 00:11:37 · 926 阅读 · 0 评论 -
Golang闭包陷阱
golang闭包陷阱本质原理其实是range陷阱:Golang for range陷阱ep 1func main() { var values = []int{1, 2, 3, 4, 5} for _, value := range values { go func() { fmt.Print(value, " ") }() } time.Sleep(time.Second)}输出:5 5 5 5 5 在ep 1中,values其实是一个固定变量,每次循环绑定数组元素的原创 2021-08-18 09:16:47 · 446 阅读 · 1 评论 -
Golang for range陷阱
ep 1func main() { a := []int{1, 2, 3} var t []*int for _, s := range a { t = append(t, &s) } fmt.Println(t)}ep 1输出结果[0xc00007e020 0xc00007e020 0xc00007e020]注:在for _, s := range a 循环中,s的地址是不变的,整个过程类似var s inta := []int{1, 2, 3}for i :=原创 2021-08-18 08:56:35 · 307 阅读 · 0 评论 -
Golang init函数执行顺序
import --> const --> var --> init()如果一个包导入了其他包,则首先初始化导入的包。然后初始化当前包的常量。接下来初始化当前包的变量。最后,调用当前包的 init() 函数。一个包可以有多个 init 函数 (在单个文件中或分布在多个文件中),并且按照它们呈现给编译器的顺序被调用。一个包将只初始化一次,即使它是从多个包导入的。原文链接:https://learnku.com/go/t/47135...转载 2021-07-25 16:19:38 · 2367 阅读 · 0 评论 -
Golang sync.Map原理
原生map的“先天不足”对于已经初始化了的原生map,我们可以尽情地对其进行并发读:package mainimport ( "fmt" "math/rand" "sync")func main() { var wg sync.WaitGroup var m = make(map[int]int, 100) for i := 0; i < 100; i++ { m[i] = i } wg.Add(10)转载 2021-06-01 17:15:03 · 932 阅读 · 0 评论 -
Golang for循环使用多个变量
由于Go没有逗号表达式,而++和–是语句而不是表达式,如果想在for中执行多个变量,需要使用平行赋值for i, j := 1, 10; i < j; i,j=i+1,j+1 { //死循环 fmt.Println(i)}而不能写成for i, j := 1, 10; i < j; i++,j++ { fmt.Println(i)}for的condition在每执行一次循环体时便会执行一次,因此在实际开发过程中需要注意不要让condition中计算简单而不是复杂转载 2021-05-29 06:45:09 · 2288 阅读 · 0 评论 -
Golang slice原理
数组slice类型是建立在Go数组类型之上的抽象,因此要了解slice我们必须首先了解数组。数组类型定义了长度和元素类型。例如,[4]int 类型表示一个由四个整数组成的数组。数组的大小是固定的,长度是数组类型的一部分( [4]int 和 [5]int 是完全不同的类型)。数组可以以常规的索引方式访问,表达式 s[n] 访问数组 s 的第 n 个元素。var a [4]inta[0] = 1i := a[0]// i == 1数组不需要显式的初始化;数组中的零值可以直接使用,数组元素会自动初翻译 2021-05-28 18:34:52 · 554 阅读 · 0 评论 -
Golang 数组传参
概念介绍数组与切片数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。切片是对数组一个连续片段的引用,所以切片是一个引用类型。按值传递和按引用传递Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。Go语言中,在函数调用时,引用类型(s转载 2021-05-28 15:57:19 · 1424 阅读 · 0 评论 -
Golang 判断key是否在map中
if _, ok := map[key]; ok { //存在}原文链接:https://blog.csdn.net/xielingyun/article/details/49996247转载 2021-05-26 21:09:00 · 891 阅读 · 0 评论 -
Golang unsafe.Pointer指针
相较于 C 而言,Go 语言在设计时为了使用安全给指针在类型和运算上增加了限制,这让Go程序员既可以享受指针带来的便利,又避免了指针的危险性。除了常规的指针外,Go 语言在 unsafe 包里其实还通过 unsafe.Pointer 提供了通用指针,通过这个通用指针以及 unsafe 包的其他几个功能又让使用者能够绕过 Go 语言的类型系统直接操作内存进行例如:指针类型转换,读写结构体私有成员这样操作。正是因为功能强大同时伴随着操作不慎读写了错误的内存地址即会造成的严重后果所以 Go 语言的设计着才会把这些转载 2021-05-21 21:46:29 · 2813 阅读 · 0 评论 -
理解 Go defer
defer 的作用和执行时机go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return 之后,比如func a() int { defer b() return 0}b 的执行是发生在 return 0 之后,注意 defer 的语法,关键字 defer 之后是函数的调用。defer 的重要用途一:清理释放资源由于 defer 的延迟特性,defer 常用在函数调用结束之后清理相关的资源,比如f, _ := os.Open(filename)defer f转载 2021-05-13 00:42:48 · 69 阅读 · 0 评论 -
go context包的WithTimeout和WithCancel的使用
1、WaitGroup它是一种控制并发的方式,它的这种方式是控制多个goroutine同时完成。func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2*time.Second) fmt.Println("1号完成") wg.Done() }() go func() { time.Sleep(2*time.Second转载 2021-05-13 00:18:35 · 535 阅读 · 0 评论 -
ginkgo测试介绍
1. 安装Ginkgogo get github.com/onsi/ginkgo/ginkgo go get github.com/onsi/gomega/… 附加的库,配合使用,下一篇会详细讲解 配置环境变量,加到$GOPATH/bin或$PATH2. 准备创建一个测试文件夹如example,进入文件夹,执行命令ginkgo bootstrap生成模版文件,文件名是example_suite_test.go,里面有入口函数 执行ginkgo generate example,example可以不写,转载 2021-03-21 10:58:57 · 1065 阅读 · 0 评论 -
Centos下源码安装golang
下载源码标准官网:https://golang.org/ 【需要墙】镜像官网:https://golang.google.cn/dl/ 【国内推荐】wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz卸载之前go版本rm -rf /usr/local/go解压go包tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local配置环境变量vim ~/.bashrce..原创 2021-03-04 11:18:23 · 307 阅读 · 1 评论 -
Go语言中奇怪的if语句
常见的 if 语句大约是这个样子的(C++):Event event = getEvent();if (event == EventA) { processA(event);} else { processB(event);}这样有一个问题:变量 event 定义在了 if 语句的外面,也就是说,在 if 语句之后,也可以继续使用 event 变量;而如果后续的操作中不需要 event 变量了,它实际上就造成了命名空间的污染。这并不是一个严重的问题,多数情况下不会造成任何问题,而如果一定转载 2021-02-07 15:41:21 · 275 阅读 · 0 评论 -
Go安装版本更新
1、首先有种方法,使用apt-get 安装,教程如下:go的版本更新2、或者用源码包的方法,教程如下:go安装教程原创 2018-08-19 10:53:34 · 7696 阅读 · 0 评论 -
Go安装web框架revel
搭建ctf题遇到一个go语言的题,整了好久搭建好了revel框架,做一个记录:有一篇不错的文章:Go语言Web框架Revel初体验,然后博文里用第三方工具下载了revel,(因为被墙,不然也不用整这么久)。...转载 2017-08-25 21:37:15 · 1044 阅读 · 0 评论