golang
文章平均质量分 52
Rookie2Master
CSDN is like shit and is no longer used
展开
-
Golang:JSON和int64、interface的那些事儿
先来看一下 : JSON number的那些事golang 数据类型和json类型对照关系表:bool, for JSON booleansfloat64, for JSON numbersstring, for JSON strings[]interface{}, for JSON arraysmap[string]interface{}, for JSON objectsnil for JSON nulljson中没有int64类型的,反序列化的时候,如果直接用json.Unmars原创 2021-06-09 10:16:34 · 3996 阅读 · 0 评论 -
Golang高并发处理模型
原文链接:https://mp.weixin.qq.com/s/ZqfN8UlWRpoGhznGH-L1mw介绍偶然间看到一篇写于15年的文章,说实话,标题确实吸引了我。关于这篇文章,我就不直接翻译了,原文地址我放在文章最后了。项目的需求就是很简单,客户端发送请求,服务端接收请求处理数据(原文是把资源上传至 Amazon S3 资源中)。本质上就是这样,我稍微改动了原文的业务代码,但是并不影响核心模块。在第一版中,每收到一个 Request,开启一个 G 进行处理,很常规的操作。初版pack原创 2021-06-04 09:55:00 · 431 阅读 · 0 评论 -
gorm更新时传入结构体struct时零值被忽略
转载自:传送门原创 2021-05-06 10:55:50 · 703 阅读 · 0 评论 -
记一次goer新手的using unaddressable value错误
go测试的时候,报错;go test 报错panic: reflect: reflect.Value.Set using unaddressable value [recovered]。解决办法:一般出现 using unaddressable value 错误,表示传递的指针值不对,比如需要传递指针地址的,但是传了值。当时就就预感应该是db在find的时候传了非指针,验证之后果然是。所以,总结就是:gorm里面更新的时候,可以不传指针(如果要用到返回的主键,还是要传指针的),但是查询的时候一定要传,原创 2021-04-30 17:16:38 · 5190 阅读 · 1 评论 -
golang:var、new、make区别及使用
先整明白go里面的几大变量“类型”(不严谨,只是个人在使用的时候常用到的结构的一个划分)(1) 值类型: int32, string, struct 这种(2) 引用类型:主要是map, slice,chan 这三个引用(make创建内存的)(3)指针类型:那就多了, *int64, *struct…(1)对于值类型的变量,我们通过var 声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。如下,我们声明一个int类型变量i,输出为0。var i intfmt.Println(原创 2021-04-18 21:30:38 · 5313 阅读 · 3 评论 -
golang json包变量不加tag
json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?(1)如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。(2)如果变量首字母大写,则为public。(3)不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。(4)加了tag,从struct转json的时候,json的字段名就是tag里的字段名,原字段名已经没用。举例package mainimport ( "encoding/json" "f原创 2021-04-18 20:15:24 · 612 阅读 · 0 评论 -
golang翻转含有中文、数字、英文字母的字符串
翻转含有中文、数字、英文字母的字符串“你好abc啊哈哈”package mainimport"fmt"func main() { src := "你好abc啊哈哈" dst := reverse([]rune(src)) fmt.Printf("%v\n", string(dst))}func reverse(s []rune) []rune { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] =原创 2021-04-18 20:11:09 · 337 阅读 · 0 评论 -
golang中 struct{} 和 struct
golang中 struct{} 和 struct使用 new 函数时,声明变量和分配内存并不需要放在一起,可以先声明一个变量,然后再通过 new 函数为之分配内存,比如下面的写法:var nick *Personnick = new (Person)new 函数的特点是只能把内存初始化为零值并返回其指针,如果要通过字面量初始化该内存就需要使用混合字面量语法:&T{…}比如下面的写法:nick := &Person{ Name: "nick", Age:原创 2021-04-15 21:52:18 · 407 阅读 · 0 评论 -
Golang为什么Response.Body需要被关闭&&内存泄漏数量
转载链接:https://www.jianshu.com/p/407fada3cc9dBody io.ReadCloserThe http Client and Transport guarantee that Body is always non-nil, even on responses without a body or responses with a zero-length body. It is the caller's responsibility to close Body. T原创 2021-04-05 21:28:51 · 2317 阅读 · 0 评论 -
golang break跳出 for-switch 和 for-select 代码块
没有指定标签的 break 只会跳出 switch/select 语句;若不能使用 return 语句跳出的话,可为 break 跳出标签指定的代码块:// break 配合 label:loop 跳出指定代码块func main() {loop: for { switch { case true: fmt.Println("breaking out...") //如果这里只用break的话会死循环,一直打印br原创 2021-04-05 09:35:30 · 1076 阅读 · 0 评论 -
golang defer使用的坑
func deferTest(count int) { if count == 0 { fmt.Println("count == 0") return } defer fmt.Println("defer") fmt.Println("end")}在main函数调用:deferTest(0) // 输出 "count==0",没有输出"defer"! 因为没有执行到defer这一句!deferTest(0) // 输出 "end\n defer"所以,并不是defer语句一原创 2021-04-04 22:10:24 · 268 阅读 · 0 评论 -
Go channel 使用
ps:select就是为了监听多个cahnnel的!!!go channel原创 2021-04-04 21:42:47 · 105 阅读 · 0 评论 -
Golang 切片append
在用Golang切片的时候,case1.比如声明:nums := make([]int, 0)这里给nums append的时候,需要使用 nums = append(nums, 1);case2.如果是:nums := make([]int, 10) 进行声明定义,第一次 可以直接 append(nums, 1) 是没问题的, nums会push进去1;但是之后的append(nums, 变量) ,nums就不一定真的append进去来。如果用 nums = append(nums,原创 2021-03-31 18:34:36 · 589 阅读 · 0 评论 -
Go循环内多协程引用循环变量问题
在golang的循环里面,多协程并发引用循环变量!package main import ( "fmt" "time") func Process1(tasks []string) { for _, task := range tasks { // 启动协程并发处理任务 go func() { fmt.Printf("Worker start process task: %s\n", task) }() }} func Process2(tasks []string转载 2021-03-31 14:50:08 · 1280 阅读 · 0 评论 -
Go单例模式理解
对于被Go语言天生支持并发的特性吸引来的跨语言学习者来说,我觉着掌握Go语言的语法并不是最难的,最难的是突破既有的思维定势,真正理解并发和使用并发来解决实际问题。Go语言太容易实现并发了,以至于它在很多地方被不正确的使用了。常见的错误有一些错误是很常见的,比如不考虑并发安全的单例模式。就像下面的示例代码:package singletontype singleton struct {}var instance *singletonfunc GetInstance() *singleton原创 2021-02-20 09:55:51 · 219 阅读 · 0 评论 -
理解Golang中的interface和interface{}
理解Golang中的interface和interface{}转载 2021-02-15 22:11:56 · 175 阅读 · 1 评论 -
golang值引用和指针引用,结构体拷贝
结构体拷贝先声明一个狗狗的结构体type Dog struct { name string age int8}// 重写String接口func (Dog *Dog) String() string { return fmt.Sprintf("this dog's name: %s, it's age: %d",Dog.name,Dog.age)}1.普通声明及值拷贝可以看到输出的时候并没有用到重写的String方法(毕竟不是指针)func main() { d1 := D原创 2021-02-15 17:32:46 · 3594 阅读 · 0 评论 -
go指针和函数传参
关于参数传递其实go的参数传递,核心就是一句话:go里所有参数传递都是值传递,既把参数复制一份放到函数里去用。PS: 传的指针也是值拷贝!(具体总结继续往下看)go的函数传参,不管参数是什么类型,都会复制一份,然后新的参数在函数内部被使用。不像其他语言,有的时候传参只是传递一个原来参数的引用,在函数内部操作变量,其实还是操作的原变量。go内不会直接的操作原变量。关于指针相比于C里的指针,go内部的指针一个被简化过的指针,指针可以取值获取其变量;变量可以取地址获取一个指针类型的值。 但是不可以对原创 2021-02-14 10:19:22 · 1860 阅读 · 0 评论