获得徽章 0
赞了这篇文章
赞了这篇文章
#青训营 x 字节后端训练营#
闭包引用
现在开始通过例子来说明由闭包引用产生的问题:
x := 1 f := func() { println(x) } x = 2 x = 3 f() // 3
因为闭包对外层词法域变量是引用的,所以这段代码会输出 3。
可以想象 f 中保存着 x 的地址,它使用 x 时会直接解引用,所以 x 的值改变了会导致 f 解引用得到的值也会改变。
闭包引用
现在开始通过例子来说明由闭包引用产生的问题:
x := 1 f := func() { println(x) } x = 2 x = 3 f() // 3
因为闭包对外层词法域变量是引用的,所以这段代码会输出 3。
可以想象 f 中保存着 x 的地址,它使用 x 时会直接解引用,所以 x 的值改变了会导致 f 解引用得到的值也会改变。
展开
评论
点赞
#青训营 x 字节后端训练营#
打卡第六天
软件架构本质是为了满足客户需求而需要的设计方案,它描述模块、组件以及它们之间的关系。wiki里还把软件架构和建筑物的架构作类比,但我认为它们之间是有很大的不同的。 软件拥有一个很大的特点,就是易变性,他所依赖的需求不稳定。所以要求架构师所创造的东西具有足够的灵活性,并且能够根据用户的需求进行演化。
打卡第六天
软件架构本质是为了满足客户需求而需要的设计方案,它描述模块、组件以及它们之间的关系。wiki里还把软件架构和建筑物的架构作类比,但我认为它们之间是有很大的不同的。 软件拥有一个很大的特点,就是易变性,他所依赖的需求不稳定。所以要求架构师所创造的东西具有足够的灵活性,并且能够根据用户的需求进行演化。
展开
评论
点赞
#青训营 x 字节后端训练营#
打卡第五话
微服务系列不是入门教程,需要有go项目经验。从框架选型开始,到go-micro构建微服务架构。go的框架选型不用纠结。在go的web框架中,飞狐推荐两个框架echo,gin
打卡第五话
微服务系列不是入门教程,需要有go项目经验。从框架选型开始,到go-micro构建微服务架构。go的框架选型不用纠结。在go的web框架中,飞狐推荐两个框架echo,gin
评论
点赞
#青训营 x 字节后端训练营#
打卡第四天,go语言与json
当 struct 中的字段没有值时, json.Marshal() 序列化的时候不会忽略这些字段,而是默认输出字段的类型零值(例如int和float类型零值是 0,string类型零值是"",对象类型零值是 nil)。
如果想要在序列化时忽略这些没有值的字段时,可以在对应字段添加omitempty tag。
打卡第四天,go语言与json
当 struct 中的字段没有值时, json.Marshal() 序列化的时候不会忽略这些字段,而是默认输出字段的类型零值(例如int和float类型零值是 0,string类型零值是"",对象类型零值是 nil)。
如果想要在序列化时忽略这些没有值的字段时,可以在对应字段添加omitempty tag。
展开
评论
点赞
#青训营 x 字节后端训练营#
打卡第三天
了解一下什么是函数变量。
在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量能做的事它也可以。
func square(x int) { println(x * x) }
直接调用:square(1)
把函数当成变量一样赋值:s := square;接着可以调用这个函数变量:s(1)。 注意:这里 square 后面没有圆括号,调用才有。
调用 nil 的函数变量会导致 panic。
函数变量的零值是 nil,这意味着它可以跟 nil 比较,但两个函数变量之间不能比较。
打卡第三天
了解一下什么是函数变量。
在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量能做的事它也可以。
func square(x int) { println(x * x) }
直接调用:square(1)
把函数当成变量一样赋值:s := square;接着可以调用这个函数变量:s(1)。 注意:这里 square 后面没有圆括号,调用才有。
调用 nil 的函数变量会导致 panic。
函数变量的零值是 nil,这意味着它可以跟 nil 比较,但两个函数变量之间不能比较。
展开
评论
点赞
#青训营 x 字节后端训练营#
打卡第二天 nil区别
Golang 惯用的,它鼓励开发人员显式的的将错误作为返回值来处理。现在我们来讨论下这个 nil,在其他语言中也有类似的定义,比如 C、C++、Java 等中的 null,Python 中的 None,但是 Goalng 中的 nil 与它们有着很多区别。
打卡第二天 nil区别
Golang 惯用的,它鼓励开发人员显式的的将错误作为返回值来处理。现在我们来讨论下这个 nil,在其他语言中也有类似的定义,比如 C、C++、Java 等中的 null,Python 中的 None,但是 Goalng 中的 nil 与它们有着很多区别。
展开
评论
点赞
#青训营 x 字节后端训练营#
Go语言学习 第一天
var一个变量不能不用,不用会报错
声明一个变量,例如int型,如果不赋予变量值则默认为0
而且输出(Println)“a=”,a时,不用=号多加空格,输出值时自带空格(好评)
printf的%T是取类型,%d是取整值,%g是取浮点数值,%s是取String内容。
短变量声明(:=)不能再函数外使用
常量的声明与变量类似,只不过是使用 const 关键字。
常量可以是字符、字符串、布尔值或数值。
常量不能用 := (短声明)语法声明。
一般int表示整形的宽度根据电脑的位数而定,32即32,64即64
一般有符号、无符号都是直接int、uint,除非特殊才int8、int16、int32.....
float只有32,64。 32只提供大约6个十进制数(也就是表示小数点后6位)的精度,64同理,大约提供15个十进制数。
数值类型零值为 0,
布尔类型零值为 false,
字符串零值为 ""(空字符串)。
Go语言学习 第一天
var一个变量不能不用,不用会报错
声明一个变量,例如int型,如果不赋予变量值则默认为0
而且输出(Println)“a=”,a时,不用=号多加空格,输出值时自带空格(好评)
printf的%T是取类型,%d是取整值,%g是取浮点数值,%s是取String内容。
短变量声明(:=)不能再函数外使用
常量的声明与变量类似,只不过是使用 const 关键字。
常量可以是字符、字符串、布尔值或数值。
常量不能用 := (短声明)语法声明。
一般int表示整形的宽度根据电脑的位数而定,32即32,64即64
一般有符号、无符号都是直接int、uint,除非特殊才int8、int16、int32.....
float只有32,64。 32只提供大约6个十进制数(也就是表示小数点后6位)的精度,64同理,大约提供15个十进制数。
数值类型零值为 0,
布尔类型零值为 false,
字符串零值为 ""(空字符串)。
展开
评论
点赞
赞了这篇文章
赞了这篇文章
#青训营笔记创作活动#
1月30日
今日学习
HTML5拖拽
实现原理
首先说下思路,我们需要知道鼠标的三个事件,分别是 mousedown,mousemove,mouseup ,当点击按下的时候,克隆一个绝对定位的元素,并标识下"拖拽中"的状态,接着在 mousemove 中就可以判断应该执行的具体方法,从而让元素随着鼠标移动起来。
在监听事件的 event 对象中,有几个参数是比较重要的:clientX,clientY 标识的鼠标当前横坐标和纵坐标,offsetX 和 offsetY 表示相对偏移量,可以在 mousedown 鼠标按下时记录初始坐标,在 mouseup 鼠标抬起时判断是否在目标区域中,如果是则用鼠标获取到的当前的偏移量 - 初始坐标得到元素实际在目标区域中的位置。
1月30日
今日学习
HTML5拖拽
实现原理
首先说下思路,我们需要知道鼠标的三个事件,分别是 mousedown,mousemove,mouseup ,当点击按下的时候,克隆一个绝对定位的元素,并标识下"拖拽中"的状态,接着在 mousemove 中就可以判断应该执行的具体方法,从而让元素随着鼠标移动起来。
在监听事件的 event 对象中,有几个参数是比较重要的:clientX,clientY 标识的鼠标当前横坐标和纵坐标,offsetX 和 offsetY 表示相对偏移量,可以在 mousedown 鼠标按下时记录初始坐标,在 mouseup 鼠标抬起时判断是否在目标区域中,如果是则用鼠标获取到的当前的偏移量 - 初始坐标得到元素实际在目标区域中的位置。
展开
评论
点赞