
获得徽章 0
- 记录一个sql查询id案例:
in查询和FIND_IN_SET函数
查询id在给定id集合的数据并维持给定id集合的顺序。
// QueryAndOrderByIDs 按照指定id查询并维护顺序
func QueryAndOrderByIDs(ids []int)(users []User, err error){
// 动态填充id
strIDs := make([]string, 0, len(ids))
for _, id := range ids {
strIDs = append(strIDs, fmt.Sprintf("%d", id))
}
query, args, err := sqlx.In("SELECT name, age FROM user WHERE id IN (?) ORDER BY FIND_IN_SET(id, ?)", ids, strings.Join(strIDs, ","))
if err != nil {
return
}
// sqlx.In 返回带 `?` bindvar的查询语句, 我们使用Rebind()重新绑定它
query = DB.Rebind(query)
err = DB.Select(&users, query, args...)
return
}展开评论点赞 - go进程、线程、协程有什么区别?
进程是操作系统用于资源调度的基本单位,运行一个程序时会创建一个或者多个进行。线程是操作系统进行调度的基本单位,线程本身不拥有系统资源,多个线程共享隶属进程的资源。协程是更轻量级的线程,是线程内部调度的基本单位,是处于用户态的,协程本身不拥有cpu的调度资源,一般是通过一个调度器去使用线程的资源从而实现调度的。展开评论点赞 - 解答: go里面如何实现set?
Go中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。
Go提供了map类型,但是我们知道,map类型的key是不能重复的,因此,我们可以利用这一点,来实现一个set。那value呢?value我们可以用一个常量来代替,比如一个空结构体,实际上空结构体不占任何内存,使用空结构体,能够帮我们节省内存空间,提高性能
代码实现参考:blog.csdn.net
展开评论点赞 - 1、数组和切片的区别
**相同点:**
1)只能存储一组相同类型的数据结构
2)都是通过下标来访问,并且有容量长度,长度通过 len 获取,容量通过 cap 获取
**区别:**
1)数组是定长,访问和复制不能超过数组定义的长度,否则就会下标越界,切片长度和容量可以自动扩容
2)数组是值类型,切片是引用类型,每个切片都引用了一个底层数组,切片本身不能存储任何数据,都是这底层数组存储数据,所以修改切片的时候修改的是底层数组中的数据。切片一旦扩容,指向一个新的底层数组,内存地址也就随之改变
**简洁的回答:**
1)定义方式不一样 2)初始化方式不一样,数组需要指定大小,大小不改变 3)在函数传递中,数组切片都是值传递。
**数组的定义**
var a1 [3]int
var a2 [...]int{1,2,3}
**切片的定义**
var a1 []int
var a2 :=make([]int,3,5)
**数组的初始化**
a1 := [...]int{1,2,3}
a2 := [5]int{1,2,3}
**切片的初始化**
b:= make([]int,3,5)展开评论点赞 - #挑战每日一条沸点# #静下心来好好学习#
无人问津也好 技不如人也罢 你都要试着安静下来 去做自己该做的事 而不是让内心的烦躁 焦虑 毁掉你本就不多的热情和定力。
今日知识小结
defer有以下特性:
1、延迟调用:defer可以注册延迟调用,这些调用直到return前才被执行。
2、资源清理:defer可以用来释放资源,比如关闭文件、解锁等。
3、可以多次使用:defer可以多次使用,每次注册的延迟调用都会按照注册的顺序依次执行。
4、可以与goroutine一起使用:defer也可以与goroutine一起使用,当defer注册在一个goroutine中时,它会在goroutine退出时执行 。
应用场景
1、并发同步控制:在并发编程中,可以使用defer来确保某个函数在所有子协程都退出后再执行。
2、锁场景:在锁场景下,可以使用defer来确保锁释放,防止死锁等问题。展开评论点赞 - #每天一个知识点#
go接口,具有什么特性,应用场景是怎样的?
特性:实现接口需要提供一组方法签名,这些方法签名必须与接口中定义的方法签名完全相同。如果一个对象实现了某个接口,那么这个对象就必须提供该接口中所有方法的实现 。
场景:它被广泛应用于各种领域,比如网络编程、并发编程、测试等。比如:
1、网络编程中,接口可以用于定义各种网络协议的通信方式。
2、并发编程中,接口可以用于定义各种并发模式的接口。
3、测试中,接口可以用于定义各种测试框架的接口。展开赞过评论1 - #新人报道# 挑战每日一条沸点##碳水使我快乐##]
1、go的基础语法与C语言有着类似之处,从语法的本质上就是像简化版的C语言;
2、go语言的库包还有很多不是很了解,希望在后面的学习中多多接触和练习应用;
3、go的基础课程对于没有基础的同学来说,确实是有难度的,但是对于学习过其他语言的同学应该是没有问题的。
大家加油呀,一起打卡学习了~展开评论点赞