Skip to content

Commit

Permalink
2016/11/27
Browse files Browse the repository at this point in the history
  • Loading branch information
zoeminghong committed Nov 27, 2016
1 parent 3ca3ace commit 48c4e9d
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 0 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
- 内存数据库,前一段时间Google开发的groupcache,couchbase的部分组建
- 云平台,目前国外很多云平台在采用Go开发

### 更新日志

[更新日志](https://github.com/zoeminghong/go-library/blob/master/更新日志.md)

### 目录

[chapter1环境配置](https://github.com/zoeminghong/go-library/blob/master/chapter1%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE.md)
Expand Down Expand Up @@ -52,10 +56,18 @@

[chapter18错误处理](https://github.com/zoeminghong/go-library/blob/master/chapter18%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86.md)

[chapter19自定义类型](https://github.com/zoeminghong/go-library/blob/master/chapter19自定义类型.md)

该教程主要是针对想要Go入门学习的,够用就好

如果想要进一步学习可能不是特别合适

欢迎关注我微信公众号,第一时间通知你,更新内容

![http://7xp64w.com1.z0.glb.clouddn.com/qrcode_for_gh_3e33976a25c9_258.jpg](http://7xp64w.com1.z0.glb.clouddn.com/qrcode_for_gh_3e33976a25c9_258.jpg)

也可以通过新浪微博:**@迹_Jason** 与我交流

![https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)

本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但务必保留文章署名迹_Jason(包含链接:https://github.com/zoeminghong/go-library ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请[微博](http://weibo.com/jasongoo123)与我联系
Expand Down
29 changes: 29 additions & 0 deletions chapter13Map.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,35 @@ Capital of Japan is Tokyo
Capital of India is New Delhi
```

**ok-idiom**

使用ok-idiom获取值,可知道key/value是否存在

```go
package main

import (
"fmt"
)

func main() {
m := make(map[string]int)
m["a"] = 1
x, ok := m["b"]
fmt.Println(x, ok)
x, ok = m["a"]
fmt.Println(x, ok)
}

```

`结果`

```go
0 false
1 true
```

**make、new操作**

make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配
Expand Down
112 changes: 112 additions & 0 deletions chapter19自定义类型.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
### 自定义类型

使用关键字type就可以开始自定义类型,包括基于现有基础类型创建,或者是结构体、函数类型等

```go
type name int8
```

多个type还可以合成一个组

```go
package main

import (
"fmt"
)

type (
user struct {
name string
age uint8
}
event func(string) bool
)

func main() {
u := user{"Jason", 20}
fmt.Println(u)
var f event = func(s string) bool {
fmt.Println(s)
return s != ""
}
f("abc")

}

```

`结果`

```go
{Jason 20}
abc
```

注意

```go
package main

import (
"fmt"
)

type data int

func main() {
var d data = 10
var x int = d
fmt.Println(x)
fmt.Println(d == x)

}
```

> d虽然底层的数据类型是int,但其与int是两个不同的概念,不能作为相同的数据类型看待
**未命名类型**

与有明确标识符的bool、int、string等类型相比,数组、切片、字典、通道等类型与具体元素类型或长度等属性有关,故称作未命名类型。当然,可用type为其提供具体的名称,将其改变为命名类型

- 具有相同基类型的指针
- 具有相同元素类型和长度的数组
- 具有相同元素类型的切片
- 具有相同键值类型的字典
- 具有相同数据类型及操作方向的通道
- 具有相同字段序列(字段名、字段类型、标签、以及字段顺序)的结构体
- 具有相同签名(参数的返回值列表,不包括参数名)的函数
- 具有相同方法集(方法名、方法签名、不包括顺序)的接口

未命名类型转换规则

- 所属类型相同
- 基础类型相同,且其中一个是未命名类型
- 数据类型相同,将双向通道给单向通道,且其中一个为未命名类型
- 将默认值nil赋值给切片、字典、通道、指针、函数或接口
- 对象实现了目标接口

```go
package main

import (
"fmt"
)

type data [2]int

func main() {
var d data = [2]int{1, 2}
fmt.Println(d)
a := make(chan int, 2)
var b chan<- int = a
b <- 2

}
```

`结果`

```go
[1 2]
```
65 changes: 65 additions & 0 deletions chapter3变量与常量.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,33 @@ func main() {

此外,单纯地给 a 赋值也是不够的,这个值必须被使用,所以使用

在同一个作用域中,已存在同名的变量,则之后的声明初始化,则退化为赋值操作。但这个前提是,最少要有一个新的变量被定义,且在同一作用域,例如,下面的y就是新定义的变量

```go
package main

import (
"fmt"
)

func main() {
x := 140
fmt.Println(&x)
x, y := 200, "abc"
fmt.Println(&x, x)
fmt.Print(y)
}

```

`结果`

```go
0xc04200a2b0
0xc04200a2b0 200
abc
```

**空白标识符 _ 也被用于抛弃值**,如值 5 在:_, b = 5, 7 中被抛弃

_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值
Expand All @@ -106,6 +133,10 @@ _ 实际上是一个只写变量,你不能得到它的值。这样做是因为

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

不曾使用的常量,在编译的时候,是不会报错的

显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值

```go
const identifier [type] = value
```
Expand Down Expand Up @@ -149,6 +180,34 @@ const (
Male = 2
)
```
常量组中如不指定类型和初始化值,则与上一行非空常量右值相同

```go
package main

import (
"fmt"
)

func main() {
const (
x uint16 = 16
y
s = "abc"
z
)
fmt.Printf("%T,%v\n", y, y)
fmt.Printf("%T,%v\n", z, z)
}
```

`结果`

```go
uint16,16
string,abc
```

### iota

iota,特殊常量,可以认为是一个可以被编译器修改的常量
Expand Down Expand Up @@ -203,3 +262,9 @@ func main() {
```
0 1 2 ha ha 100 100 7 8
```

如果中断iota自增,则必须显式恢复。且后续自增值按行序递增

自增默认是int类型,可以自行进行显示指定类型

数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址
36 changes: 36 additions & 0 deletions chapter5条件语句.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,42 @@ func main() {
}
```

如需贯通后续的case,就添加fallthrough

```go
package main

import (
"fmt"
)

type data [2]int

func main() {
switch x := 5; x {
default:
fmt.Println(x)
case 5:
x += 10
fmt.Println(x)
fallthrough
case 6:
x += 20
fmt.Println(x)

}

}

```

`结果`

```go
15
35
```

#### Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
Expand Down
9 changes: 9 additions & 0 deletions 更新日志.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
### 更新日志

##### 2016/11/27

优化变量和常量部分内容

增加map类型内容

新增自定义类型

0 comments on commit 48c4e9d

Please sign in to comment.