Golang 知识点总结
Golang 知识点总结
目录 [−]
各种类型复制的时候的花费
本节标题也可以叫做“各种类型的值的大小” (the sizes of values of all kinds of types),底层可被不同的值共享的数据的大小未被计算。
下面的表格中一个 word在32bit操作系统中代表4个字节,在64bit操作系统中代表8个字节,内容基于官方的Go 1.7的编译器。
Type
Cost Of Value Copying (Value Size)
bool
1 byte
int8, uint8, byte
1 byte
int16, uint16
2 bytes
int32, uint32, rune
4 bytes
int64, uint64
8 bytes
int, uint, uintptr
1 word
string
2 words
pointer
1 word
slice
3 words
map
1 word
channel
1 word
function
1 word
interface
2 words
struct
the sum of sizes of all fields
array
(element value size) * (array length)
可使用内建函数的类型 (len、cap、close、delete、make)
len
cap
close
delete
make
string
Yes
array (and array pointer)
Yes
Yes
slice
Yes
Yes
Yes
map
Yes
Yes
Yes
channel
Yes
Yes
Yes
Yes
上面的所有类型都可以使用 range遍历。
可以用作len函数参数的类型也叫做容器类型。
内建容器类型的值比较
假定容器的值可寻址(addressable)。
Type
长度可变
元素可更新
元素可寻址
查找会更改容器的长度
底层元素可以共享
string
No
No
No
No
Yes
array
No
Yes
Yes
No
No
slice
No
Yes
Yes
No
Yes
map
Yes
Yes
No
No
Yes
channel
Yes
No
No
Yes
Yes
组合类型T{...}的值比较
Type (T)
T{}是类型T的零值?
struct
Yes
array
Yes
slice
No (零值是 nil)
map
No (零值是 nil)
零值是nil的类型
Type (T)
Size Of T(nil)
pointer
1 word
slice
3 words
map
1 word
channel
1 word
function
1 word
interface
2 words
这些类型的零值的大小和上面类型的大小保持一致。
编译时被执行的函数
如果函数在编译时被执行,那么它的返回值是常量。
Function
返回值
编译时便计算?
unsafe.Sizeof
uintptr
Yes, 总是
unsafe.Alignof
unsafe.Offsetof
len
int
有时候是
Go 规范中讲到:
- 如果s是字符串常量,则
len(s)是常量.
- 如果s是数组或者是数组指针,则
len(s)是常量.
cap
real
float64
(默认类型)
有时候是
imag
complex
complex128
(默认类型)
有时候是
不能被寻址的值
下面的值不能被寻址(addresses):
- bytes in strings:字符串中的字节
- map elements:map中的元素
- dynamic values of interface values (exposed by type assertions):接口的动态值
- constant values:常量
- literal values:字面值
- package level functions:包级别的函数
- methods (used as function values):方法
- intermediate values:中间值
- function callings
- explicit value conversions
- all sorts of operations, except pointer dereference operations, but including:
- channel receive operations
- sub-string operations
- sub-slice operations
- addition, subtraction, multiplication, and division, etc.
注意, &T{}相当于tmp := T{}; (&tmp)的语法糖,所以&T{}可合法不意味着T{}可寻址。
下面的值可以寻址:
- variables
- fields of addressable structs
- elements of addressable arrays
- elements of any slices (whether the slices are addressable or not)
- pointer dereference operations
不支持比较的类型
下面的类型不支持直接比较:
- map
- slice
- function
- struct types containing incomparable fields
- array types with incomparable elements
这些不能直接比较的类型不能用做map的key值。
注意:尽管map、slice、function类型不支持直接比较,但是它们的值却可以和nil直接比较。如果两个接口的动态类型不能比较,运行时比较这两个接口会panic,除非其中一个的动态值是untyped nil。
可命名的源代码元素
下面的源代码元素可以命名,名称必须是 Identifier
可以使用 _ 做名称?
package
No
import
Yes
type
Yes
variable
Yes
constant
Yes
function
Yes
label
Yes
命名的源代码元素可以使用 ()分组声明
下面的类型可以使用()分组生命
- import
- type
- variable
- constant
函数和标签(label)不能使用()分组声明。
可以在函数内外声明的源代码元素
下面的类型可以声明在函数内,也可以声明在函数外:
- type
- variable
- constant
import必须在其它元素的声明的前面(package语句的后面)。
函数在其它函数的外面声明。(译者注:函数变量/匿名函数可以在函数内声明)
标签(label)必须声明在函数内。
可以返回一个可选bool返回值的表达式
下面的表达式可以返回一个可选的bool值:
可选的bool返回值的意义
忽略可选值会影响程序的行为?
map element access
map中是否包含要
No
channel value receive
在channel关闭前收到的值是否已发出
No
type assertion
接口的动态类型是否符合asserted type
Yes
(当可选值被忽略时,如果类型不match则会抛出panic)|
使用channel机制永远阻塞当前goroutine的方法
下面的方法都可以永远阻塞当前的goroutine:
1、receive from a channel which no values will be sent to
1
2
3
<-make(chan struct{})
// or
<-make(<-chan struct{})
2、send value to a channel which no ones will receive values from
1
2
3
make(chan struct{}) <- struct{}{}
// or
make(chan<- struct{}) <- struct{}{}
3、receive value from a nil channel
1
<-chan struct{}(nil)
4、send value to a nil channel
1
chan struct{}(nil) <- struct{}{}
5、use a bare select block
1
select{}
连接字符串的几种方法
下面几种方法都可以连接字符串(译者注:不考虑性能):
1、使用+连接字符串。如果连接的字符串少于6个,官方的编译器会对此优化,所以通常使用+简便而有效。
2、使用strings包中的strings.Join连接字符串。
3、使用fmt包中的fmt.Sprintf, fmt.Sprint 和 fmt.Sprintln连接字符串。这三个方法可以将任意的类型连接成字符串。fmt.Sprintln会在字符串之间加空格,在字符串尾部加新的换行符。如果两个值中的至少一个不是字符串,fmt.Sprint会在它们之间加空格。
4、包bytes的Buffer类型(或者内建函数copy)可以用来构建 byte slice, byte slice可以方便地转换成字符串。
Golang 知识点总结的更多相关文章
- Golang知识点整理
1. Golang 1.1 golang知识点大纲 1.2 指针 1.3 Golang使用validator进行数据校验及自定义翻译器 1.4 Golang GC(垃圾回收机制) 2.框架 2.1 G ...
- golang 特殊知识点
golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...
- golang 小知识点记录
获取url中的参数及输出到页面的几种方式 func SayHello(w http.ResponseWriter, req *http.Request) { req.Method //获取url的方法 ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- golang一些知识点
2.冒泡排序(二维数组使用): func main() { i := 1 MYLABEL: for { i++ if i > 3 { break MYLABEL } } fmt.Println( ...
- 来自朝鲜的问候 golang入坑系列
鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...
- Golang的CSP很酷?其实.NET也可以轻松完成
说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...
- golang使用通道模仿实现valatile语义
golang团队在sync中提供了很多的原子操作函数,将原子操作转向由单独一个包提供,而不是像Java那样提供各种累,确实上手得更加简单.但是golang原生提供的并发操作没有Java来得丰富 ...
- golang 中 string 转换 []byte 的一道笔试题
背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...
随机推荐
- [ Java学习基础 ] Java的对象容器 -- 集合
当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...
- xml与object 之间的ORM
xml映射为object对象,同时object对象,以xml来表示: public class Tools { private static XmlNodeList SelectNodes(strin ...
- for循环嵌套讲解:
1.for循环嵌套讲解: class ForForDemo { public static void main(String[] args) { //大圈套小圈思想: ...
- Java——面向对象 this关键字
this,当成员变量和局部变量名字重名时,可以用关键字来区分. this 代表当前对象,就是所在函数所属的对象的引用. 即哪个调用了this所在的函数,this就代表哪个函数. 应用:1,构造方法间的 ...
- Spring Boot开发MongoDB应用实践
本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...
- 关于在IJ中使用maven projects 的Lifecycle中打包package报expected START_TAG or END_TAG not TEXT
报错指定到maven本地仓库下的settings.xml某一行,如下列JDK配置: <profiles> <profile> <id>jdk-1.8</ ...
- iphone连接电脑itunes之后 C盘突然小很多被占了很多空间
很有可能是你的iTunes开启了自动备份,把iphone上的数据都备份到了电脑上,而默认目录就是在C盘.我们可以找到并删除它,换C盘一个清白. 我的路径参考如下: C:\Users\scc\AppDa ...
- ElasticSearch Index 速度优化 (官方翻译)
使用Bulk请求进行Index Bulk请求将产生比单文档index请求有更好的性能.至于Bulk请求中文档数量的大小,建议使用单一节点单一分片进行测试,先试试看100个,然后200个,然后400这样 ...
- RabbitMQ windows安装(一 )
RabbitMQ 简单介绍: 是可以实现应用程序的解耦和异步,也可用作消息缓冲和消息分发的消息队列(MQ): 安装: 1.安装RabbitMQ前先安装Erlang语言开发包,下载地址:http://w ...
- SpringMVC+GSON 对象序列化--日期格式的处理
Gson异常强大因此使用它代替了Jackson作为SpringMVC消息转换器. 在自己的项目中,发现对象在序列化后,日期格式出现了问题. 先看问题 在员工表中有一列是生日,字段类型为Date,也就是 ...
各种类型复制的时候的花费
本节标题也可以叫做“各种类型的值的大小” (the sizes of values of all kinds of types),底层可被不同的值共享的数据的大小未被计算。
下面的表格中一个 word在32bit操作系统中代表4个字节,在64bit操作系统中代表8个字节,内容基于官方的Go 1.7的编译器。
Type
Cost Of Value Copying (Value Size)
bool
1 byte
int8, uint8, byte
1 byte
int16, uint16
2 bytes
int32, uint32, rune
4 bytes
int64, uint64
8 bytes
int, uint, uintptr
1 word
string
2 words
pointer
1 word
slice
3 words
map
1 word
channel
1 word
function
1 word
interface
2 words
struct
the sum of sizes of all fields
array
(element value size) * (array length)
本节标题也可以叫做“各种类型的值的大小” (the sizes of values of all kinds of types),底层可被不同的值共享的数据的大小未被计算。
下面的表格中一个 word在32bit操作系统中代表4个字节,在64bit操作系统中代表8个字节,内容基于官方的Go 1.7的编译器。
| Type | Cost Of Value Copying (Value Size) |
|---|---|
| bool | 1 byte |
| int8, uint8, byte | 1 byte |
| int16, uint16 | 2 bytes |
| int32, uint32, rune | 4 bytes |
| int64, uint64 | 8 bytes |
| int, uint, uintptr | 1 word |
| string | 2 words |
| pointer | 1 word |
| slice | 3 words |
| map | 1 word |
| channel | 1 word |
| function | 1 word |
| interface | 2 words |
| struct | the sum of sizes of all fields |
| array | (element value size) * (array length) |
可使用内建函数的类型 (len、cap、close、delete、make)
len
cap
close
delete
make
string
Yes
array (and array pointer)
Yes
Yes
slice
Yes
Yes
Yes
map
Yes
Yes
Yes
channel
Yes
Yes
Yes
Yes
上面的所有类型都可以使用 range遍历。
可以用作len函数参数的类型也叫做容器类型。
| len | cap | close | delete | make | |
|---|---|---|---|---|---|
| string | Yes | ||||
| array (and array pointer) | Yes | Yes | |||
| slice | Yes | Yes | Yes | ||
| map | Yes | Yes | Yes | ||
| channel | Yes | Yes | Yes | Yes |
上面的所有类型都可以使用 range遍历。
可以用作len函数参数的类型也叫做容器类型。
内建容器类型的值比较
假定容器的值可寻址(addressable)。
Type
长度可变
元素可更新
元素可寻址
查找会更改容器的长度
底层元素可以共享
string
No
No
No
No
Yes
array
No
Yes
Yes
No
No
slice
No
Yes
Yes
No
Yes
map
Yes
Yes
No
No
Yes
channel
Yes
No
No
Yes
Yes
假定容器的值可寻址(addressable)。
| Type | 长度可变 | 元素可更新 | 元素可寻址 | 查找会更改容器的长度 | 底层元素可以共享 |
|---|---|---|---|---|---|
| string | No | No | No | No | Yes |
| array | No | Yes | Yes | No | No |
| slice | No | Yes | Yes | No | Yes |
| map | Yes | Yes | No | No | Yes |
| channel | Yes | No | No | Yes | Yes |
组合类型T{...}的值比较
Type (T)
T{}是类型T的零值?
struct
Yes
array
Yes
slice
No (零值是 nil)
map
No (零值是 nil)
Type (T) |
T{}是类型T的零值? |
|---|---|
| struct | Yes |
| array | Yes |
| slice | No (零值是 nil) |
| map | No (零值是 nil) |
零值是nil的类型
Type (T)
Size Of T(nil)
pointer
1 word
slice
3 words
map
1 word
channel
1 word
function
1 word
interface
2 words
这些类型的零值的大小和上面类型的大小保持一致。
| Type (T) | Size Of T(nil) |
|---|---|
| pointer | 1 word |
| slice | 3 words |
| map | 1 word |
| channel | 1 word |
| function | 1 word |
| interface | 2 words |
这些类型的零值的大小和上面类型的大小保持一致。
编译时被执行的函数
如果函数在编译时被执行,那么它的返回值是常量。
Function
返回值
编译时便计算?
unsafe.Sizeof
uintptr
Yes, 总是
unsafe.Alignof
unsafe.Offsetof
len
int
有时候是
Go 规范中讲到:
- 如果s是字符串常量,则
len(s)是常量.
- 如果s是数组或者是数组指针,则
len(s)是常量.
cap
real
float64
(默认类型)
有时候是
imag
complex
complex128
(默认类型)
有时候是
如果函数在编译时被执行,那么它的返回值是常量。
| Function | 返回值 | 编译时便计算? |
|---|---|---|
| unsafe.Sizeof | uintptr |
Yes, 总是 |
| unsafe.Alignof | ||
| unsafe.Offsetof | ||
| len | int |
有时候是 Go 规范中讲到:
|
| cap | ||
| real | float64(默认类型) |
有时候是 |
| imag | ||
| complex | complex128(默认类型) |
有时候是 |
不能被寻址的值
下面的值不能被寻址(addresses):
- bytes in strings:字符串中的字节
- map elements:map中的元素
- dynamic values of interface values (exposed by type assertions):接口的动态值
- constant values:常量
- literal values:字面值
- package level functions:包级别的函数
- methods (used as function values):方法
- intermediate values:中间值
- function callings
- explicit value conversions
- all sorts of operations, except pointer dereference operations, but including:
- channel receive operations
- sub-string operations
- sub-slice operations
- addition, subtraction, multiplication, and division, etc.
注意, &T{}相当于tmp := T{}; (&tmp)的语法糖,所以&T{}可合法不意味着T{}可寻址。
下面的值可以寻址:
- variables
- fields of addressable structs
- elements of addressable arrays
- elements of any slices (whether the slices are addressable or not)
- pointer dereference operations
下面的值不能被寻址(addresses):
- bytes in strings:字符串中的字节
- map elements:map中的元素
- dynamic values of interface values (exposed by type assertions):接口的动态值
- constant values:常量
- literal values:字面值
- package level functions:包级别的函数
- methods (used as function values):方法
- intermediate values:中间值
- function callings
- explicit value conversions
- all sorts of operations, except pointer dereference operations, but including:
- channel receive operations
- sub-string operations
- sub-slice operations
- addition, subtraction, multiplication, and division, etc.
注意, &T{}相当于tmp := T{}; (&tmp)的语法糖,所以&T{}可合法不意味着T{}可寻址。
下面的值可以寻址:
- variables
- fields of addressable structs
- elements of addressable arrays
- elements of any slices (whether the slices are addressable or not)
- pointer dereference operations
不支持比较的类型
下面的类型不支持直接比较:
- map
- slice
- function
- struct types containing incomparable fields
- array types with incomparable elements
这些不能直接比较的类型不能用做map的key值。
注意:尽管map、slice、function类型不支持直接比较,但是它们的值却可以和nil直接比较。如果两个接口的动态类型不能比较,运行时比较这两个接口会panic,除非其中一个的动态值是untyped nil。
下面的类型不支持直接比较:
- map
- slice
- function
- struct types containing incomparable fields
- array types with incomparable elements
这些不能直接比较的类型不能用做map的key值。
注意:尽管map、slice、function类型不支持直接比较,但是它们的值却可以和nil直接比较。如果两个接口的动态类型不能比较,运行时比较这两个接口会panic,除非其中一个的动态值是untyped nil。
可命名的源代码元素
下面的源代码元素可以命名,名称必须是 Identifier
可以使用 _ 做名称?
package
No
import
Yes
type
Yes
variable
Yes
constant
Yes
function
Yes
label
Yes
下面的源代码元素可以命名,名称必须是 Identifier
可以使用 _ 做名称? |
|
|---|---|
| package | No |
| import | Yes |
| type | Yes |
| variable | Yes |
| constant | Yes |
| function | Yes |
| label | Yes |
命名的源代码元素可以使用 ()分组声明
下面的类型可以使用()分组生命
- import
- type
- variable
- constant
函数和标签(label)不能使用()分组声明。
下面的类型可以使用()分组生命
- import
- type
- variable
- constant
函数和标签(label)不能使用()分组声明。
可以在函数内外声明的源代码元素
下面的类型可以声明在函数内,也可以声明在函数外:
- type
- variable
- constant
import必须在其它元素的声明的前面(package语句的后面)。
函数在其它函数的外面声明。(译者注:函数变量/匿名函数可以在函数内声明)
标签(label)必须声明在函数内。
下面的类型可以声明在函数内,也可以声明在函数外:
- type
- variable
- constant
import必须在其它元素的声明的前面(package语句的后面)。
函数在其它函数的外面声明。(译者注:函数变量/匿名函数可以在函数内声明)
标签(label)必须声明在函数内。
可以返回一个可选bool返回值的表达式
下面的表达式可以返回一个可选的bool值:
可选的bool返回值的意义
忽略可选值会影响程序的行为?
map element access
map中是否包含要
No
channel value receive
在channel关闭前收到的值是否已发出
No
type assertion
接口的动态类型是否符合asserted type
Yes
(当可选值被忽略时,如果类型不match则会抛出panic)|
下面的表达式可以返回一个可选的bool值:
| 可选的bool返回值的意义 | 忽略可选值会影响程序的行为? | |
|---|---|---|
| map element access | map中是否包含要 | No |
| channel value receive | 在channel关闭前收到的值是否已发出 | No |
| type assertion | 接口的动态类型是否符合asserted type | Yes |
(当可选值被忽略时,如果类型不match则会抛出panic)|
使用channel机制永远阻塞当前goroutine的方法
下面的方法都可以永远阻塞当前的goroutine:
1、receive from a channel which no values will be sent to
1
2
3
<-make(chan struct{})
// or
<-make(<-chan struct{})
2、send value to a channel which no ones will receive values from
1
2
3
make(chan struct{}) <- struct{}{}
// or
make(chan<- struct{}) <- struct{}{}
3、receive value from a nil channel
1
<-chan struct{}(nil)
4、send value to a nil channel
1
chan struct{}(nil) <- struct{}{}
5、use a bare select block
1
select{}
下面的方法都可以永远阻塞当前的goroutine:
1、receive from a channel which no values will be sent to
|
|
2、send value to a channel which no ones will receive values from
|
|
3、receive value from a nil channel
|
|
4、send value to a nil channel
|
|
5、use a bare select block
|
|
连接字符串的几种方法
下面几种方法都可以连接字符串(译者注:不考虑性能):
1、使用+连接字符串。如果连接的字符串少于6个,官方的编译器会对此优化,所以通常使用+简便而有效。
2、使用strings包中的strings.Join连接字符串。
3、使用fmt包中的fmt.Sprintf, fmt.Sprint 和 fmt.Sprintln连接字符串。这三个方法可以将任意的类型连接成字符串。fmt.Sprintln会在字符串之间加空格,在字符串尾部加新的换行符。如果两个值中的至少一个不是字符串,fmt.Sprint会在它们之间加空格。
4、包bytes的Buffer类型(或者内建函数copy)可以用来构建 byte slice, byte slice可以方便地转换成字符串。
下面几种方法都可以连接字符串(译者注:不考虑性能):
1、使用+连接字符串。如果连接的字符串少于6个,官方的编译器会对此优化,所以通常使用+简便而有效。
2、使用strings包中的strings.Join连接字符串。
3、使用fmt包中的fmt.Sprintf, fmt.Sprint 和 fmt.Sprintln连接字符串。这三个方法可以将任意的类型连接成字符串。fmt.Sprintln会在字符串之间加空格,在字符串尾部加新的换行符。如果两个值中的至少一个不是字符串,fmt.Sprint会在它们之间加空格。
4、包bytes的Buffer类型(或者内建函数copy)可以用来构建 byte slice, byte slice可以方便地转换成字符串。
Golang 知识点总结的更多相关文章
- Golang知识点整理
1. Golang 1.1 golang知识点大纲 1.2 指针 1.3 Golang使用validator进行数据校验及自定义翻译器 1.4 Golang GC(垃圾回收机制) 2.框架 2.1 G ...
- golang 特殊知识点
golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...
- golang 小知识点记录
获取url中的参数及输出到页面的几种方式 func SayHello(w http.ResponseWriter, req *http.Request) { req.Method //获取url的方法 ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- golang一些知识点
2.冒泡排序(二维数组使用): func main() { i := 1 MYLABEL: for { i++ if i > 3 { break MYLABEL } } fmt.Println( ...
- 来自朝鲜的问候 golang入坑系列
鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...
- Golang的CSP很酷?其实.NET也可以轻松完成
说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...
- golang使用通道模仿实现valatile语义
golang团队在sync中提供了很多的原子操作函数,将原子操作转向由单独一个包提供,而不是像Java那样提供各种累,确实上手得更加简单.但是golang原生提供的并发操作没有Java来得丰富 ...
- golang 中 string 转换 []byte 的一道笔试题
背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...
随机推荐
- [ Java学习基础 ] Java的对象容器 -- 集合
当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入.使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找.在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这 ...
- xml与object 之间的ORM
xml映射为object对象,同时object对象,以xml来表示: public class Tools { private static XmlNodeList SelectNodes(strin ...
- for循环嵌套讲解:
1.for循环嵌套讲解: class ForForDemo { public static void main(String[] args) { //大圈套小圈思想: ...
- Java——面向对象 this关键字
this,当成员变量和局部变量名字重名时,可以用关键字来区分. this 代表当前对象,就是所在函数所属的对象的引用. 即哪个调用了this所在的函数,this就代表哪个函数. 应用:1,构造方法间的 ...
- Spring Boot开发MongoDB应用实践
本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...
- 关于在IJ中使用maven projects 的Lifecycle中打包package报expected START_TAG or END_TAG not TEXT
报错指定到maven本地仓库下的settings.xml某一行,如下列JDK配置: <profiles> <profile> <id>jdk-1.8</ ...
- iphone连接电脑itunes之后 C盘突然小很多被占了很多空间
很有可能是你的iTunes开启了自动备份,把iphone上的数据都备份到了电脑上,而默认目录就是在C盘.我们可以找到并删除它,换C盘一个清白. 我的路径参考如下: C:\Users\scc\AppDa ...
- ElasticSearch Index 速度优化 (官方翻译)
使用Bulk请求进行Index Bulk请求将产生比单文档index请求有更好的性能.至于Bulk请求中文档数量的大小,建议使用单一节点单一分片进行测试,先试试看100个,然后200个,然后400这样 ...
- RabbitMQ windows安装(一 )
RabbitMQ 简单介绍: 是可以实现应用程序的解耦和异步,也可用作消息缓冲和消息分发的消息队列(MQ): 安装: 1.安装RabbitMQ前先安装Erlang语言开发包,下载地址:http://w ...
- SpringMVC+GSON 对象序列化--日期格式的处理
Gson异常强大因此使用它代替了Jackson作为SpringMVC消息转换器. 在自己的项目中,发现对象在序列化后,日期格式出现了问题. 先看问题 在员工表中有一列是生日,字段类型为Date,也就是 ...