大漠知秋的小秘密

你就当我的烂笔头吧

并发 - 同步

同步锁 全局唯一性操作   之前喊过一句口号,倡导用通信来共享数据,而不是通过共享数据来进行通信,但考虑到即使成功地用 channel 来作为通信手段,还是避免不了多个 goroutine 之间共享数据的问题,Go 语言的设计者虽然对 channel 有极高的期望,但也提供了妥善的资...

2018-08-23 13:34:21

阅读数 177

评论数 0

问题 - 出让时间片

  Go 和 Java 在并发执行上的不同还在于,Java 的多线程是一种抢占式的时间片占用规则,而 Go 的 goroutine 是一种非抢占式的时间片占用规则,也就是说,如果一个 goroutine 在使用 CPU 时间片,那么其他再多的 goroutine 都得阻塞。   我们可以在每个 ...

2018-08-23 13:06:53

阅读数 125

评论数 0

问题 - 多核并行化

  如果你的电脑是16核心的话,可以开16个 goroutine 共同计算一列数的的综合,就会发现总的执行时间没有明显缩短。再去观察 CPU 运行状态,你会发现尽管我们有16个 CPU 核心,但在计算过程中其实只有一个 CPU 核心处于繁忙状态,这是会让很多 Go 语言初学者迷惑的问题。   官...

2018-08-23 11:13:57

阅读数 175

评论数 0

channel

基本语法 select 缓冲机制   channel 是 Go 语言在语言级别提供的 goroutine 间的通信方式。我们可以使用 channel 在两个或多个 goroutine 之间传递消息。channel 是进程内的通信方式,因此通过 channel 传递对象的过程和调用函数...

2018-08-23 11:00:32

阅读数 271

评论数 0

goroutine

并发概念 协程 goroutine 并发通信 并发概念   回到在 Windows 和 Linux 出现之前的古老年代,程序员在开发程序时并没有并发的概念,因为命令式程序设计语言是以串行为基础的,程序会顺序执行每一条指令,整个程序只有一个执行上下文,即一个调用栈,一个堆。并发则意味...

2018-08-21 16:51:50

阅读数 1200

评论数 0

面向对象 - 接口

非侵入式接口 接口赋值 实例赋值给接口 接口赋值给接口 接口查询 类型查询 接口组合 Any 类型   Go 语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。   在 Go 语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声...

2018-08-21 15:52:38

阅读数 42

评论数 0

面向对象 - 使用组合和定义别名

使用组合 定义别名   上一节说过: public 和 private 是针对包一级的可见性,那么如果我们引入了一个其他同事或者第三方的包,有一个功能我们需要使用,但是他们并没有提供,这时候该怎么扩充呢? 使用组合   如下,有一个第三方提供的加法方法: package t...

2018-08-20 17:50:00

阅读数 83

评论数 0

面型对象 - 包和封装

命名规范 命名规范   Go 中的命名规范 名字—般使用 CamelCase (驼峰式大小写法) 首字母大写:public 首字母小写:private   这里的 public 和 private 是针对谁来说的?针对包。每个目录一个包,但是和 Java 不一样,包名并...

2018-08-17 15:58:44

阅读数 39

评论数 0

面向对象 - 结构体

初始化 结构创建在堆上还是桟上?   首先说一个概念性问题: Go 语言仅支持封装,不支持继承和多态; GO 语言没有 class ,只有 struct;   Go 语言的结构体(struct)和其他语言的类(class)有同等的地位,但 Go 语言放弃了包括继承在内的大量面...

2018-08-17 15:49:32

阅读数 108

评论数 0

面向对象 - 类型系统

为类型添加方法 值语义和引用语义   顾名思义,类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容: 基础类型,如 byte、int、bool、float 等; 复合类型,如数组、结构体、指针等; 可以指向任意对象的类型(Any 类型); 值语义和引用语义...

2018-08-17 15:21:43

阅读数 199

评论数 0

错误处理

error 接口 defer 关键字 panic() 和 recover()   错误处理是学习任何编程语言都需要考虑的一个重要话题。在早期的语言中,错误处理不是语言规范的一部分,通常只作为一种编程范式存在,比如 C 语言中的 errno。但自 C++ 语言以来,语言层面上会增加错误...

2018-08-17 14:40:34

阅读数 72

评论数 0

匿名函数与闭包

匿名函数 闭包   匿名函数是指不需要定义函数名的一种函数实现方式,它并不是一个新概念,最早可以回溯到1958年的 Lisp 语言。但是由于各种原因,C 和 C++ 一直都没有对匿名函数给以支持,其他的各种语言,比如 JavaScript、C# 和 Objective-C 等语言都提...

2018-08-17 14:06:38

阅读数 46

评论数 0

函数

函数的定义 函数调用 不定参数 不定参数类型 不定参数的传递 任意类型的不定参数 多返回值   函数构成代码执行的逻辑结构。在 Go 语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句。 函数的定义   这里生命一个最简单的加法函数来说明一...

2018-08-17 13:55:27

阅读数 31

评论数 0

流程控制

条件语句 选择语句 循环语句 跳转语句   程序设计语言的流程控制语句,用于设定计算执行的次序,建立程序的逻辑结构。可以说,流程控制语句是整个程序的骨架。   从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此,在各种流程中,会加入条件判断语句。流程控...

2018-08-17 13:33:01

阅读数 34

评论数 0

数据类型

基本数据类型 复合数据类型 基本数据类型 关键字 说明 bool 布尔类型 (u)int、(u)int8、(u)int16、(u)int32、(u)int64、uintptr 整数,带u:无符号整数,不带u:有符号整数。有符号整数分为两类:1...

2018-08-17 11:34:12

阅读数 120

评论数 0

常量

字面常量 常量定义 预定义常量 枚举 字面常量   所谓字面常量(literal),是指程序中硬编码的常量,如: -12 3.14159265358979323846 // 浮点类型的常量 3.2+12i // 复数类型的常量 true ...

2018-08-17 10:07:30

阅读数 60

评论数 0

变量

声明变量 变量初始化 变量赋值 匿名变量   变量是几乎所有编程语言中最基本的组成元素。从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。 声明变量   Go 语言的变量声明方式与 C ...

2018-08-17 09:54:23

阅读数 32

评论数 0

基础环境安装

Golang 安装环境 下载地址 安装 检查安装 开发工具 GOROOT 和 GOPATH GOPATH Hello World 代码解读 Golang 安装环境 下载地址 官方下载地址:https://golang.org/dl/ 可能由于”某些原因”,官方地...

2018-08-16 20:28:18

阅读数 60

评论数 0

语言特性

自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性   学习一门语言,首先要去了解下这个语言的特性,它有哪些优势、特点,相对于其他成熟语言有什么独到之处。当然,如果你是单纯的冲着这个语言名字来的也可以。先来...

2018-08-16 19:56:52

阅读数 408

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭