- 博客(11)
- 收藏
- 关注
原创 Go语言小细节——内置类型键值或下标规则
数组和切片组合字面值中下标规则 数组和切片组合字面值中的下标必须为整数常量 在一个数组或切片组合字面值中,如果一个元素的索引下标缺失,则编译器认为它的索引下标为出现在它之前的元素的索引下标加一 package main import "fmt" var x = []int{2: 5, 6, 0: 7} func main() { fmt.Println(x) // [7 0 5 ...
2019-12-22 21:47:31
368
原创 Go语言小细节——表达式估值顺序
表达式估值 当估值一个表达式、赋值语句或者函数返回语句中的操作数时,所有的函数调用、方法调用和通道操作将按照它们在代码中的出现顺序进行估值。但是 Go 白皮书未指定表达式中其它估值顺序。 目前 Go 的编译器官方维护有两种主流的,一个是 gc 编译器,一个是 gccgo 编译器,两种编译器打印出来的值不一样。 package main var x, i = []int{1, 2}, 0 func...
2019-12-22 21:36:55
294
原创 Go语言小细节——变量估值规则
变量与常量的估值 package main func main() { var n uint = 10 const N uint = 10 var x byte = (1 << n) / 100 var y byte = (1 << N) / 100 println(x, y) // 0 10 } 程序的打印结果值为:0,10 以上程序中,x 与 y 的输出不...
2019-12-22 17:51:01
267
原创 Go语言小细节——分号自动插入规则
插入规则 在 Go 代码中,注释除外,如果一个代码行的最后一个语法词段(token)为下列所示之一,则一个分号将自动插入在此字段后(即行尾): 一个标识符 一个整数、浮点数、虚部、码点或者字符串字面表示形式 这几个跳转关键字之一:break、continue、fallthrough 和 return 自增运算符++或者自减运算符– 一个右括号:) ] } 为了允许一条复杂语句完全显示在...
2019-12-22 16:44:56
794
原创 Linux线程的调度机制
Linux线程的调度机制 在Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的。Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。 在Linux中,调度器是基于线程的调度策略(scheduling policy)和静...
2019-01-10 21:32:49
5560
原创 Longest Substring Without Repeating Characters 最长无重复子串
LeetCode题解 5. Longest Substring Without Repeating Characters题目思路代码实现(Go语言) 题目 Given a string, find the length of the longest substring without repeating characters. Examples: Given “abcabcbb”, the ans...
2019-01-05 22:04:19
171
原创 Golang的make与new的区别
Golang的make与new的区别创建对象类型不同返回类型不同make为什么返回非零值 创建对象类型不同 make用于内建类型(map、slice 和channel)的内存分配。 new用于各种类型的内存分配。 返回类型不同 new的函数声明: func new(Type) *Type 接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。它同时把分配的内存置为零,...
2019-01-04 16:02:12
426
原创 Golang的Goruntine调度原理
Golang的Goruntine调度机制Goroutine的调度模型调度实现注意要点每次go调用的时候当线程阻塞时Goruntinue如何调度G任务中断后的恢复 Goroutine的调度模型 Go的调度器内部有四个重要的结构:M,P,S,Sched (定义在源码的src/runtime/runtime.h文件中) 一、G代表一个Goroutine对象,每次go调用的时候,都会创建一个G对象,它有自...
2018-12-22 23:28:07
1314
原创 Golang的垃圾回收机制
Golang的垃圾回收机制什么是垃圾回收?常见的垃圾回收方法引用计数(reference counting)标记-清除(mark and sweep)分代收集(generation)三色标记法Go的GC何时触发 什么是垃圾回收? 传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直...
2018-12-22 17:37:00
429
原创 一张图了解并发与并行
一张图了解并发与并行并发与并行并发并行图片详解总结 并发与并行 并发 并发(Concurrency)。当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。 并行 并行(Parallellism),当系统有一个以上CPU时,一个CPU执行一个线...
2018-12-20 21:09:34
3120
1
原创 进程、线程、协程与Goroutine
进程、线程、协程与Goroutine进程与线程(隔离与并行)进程线程协程协程的核心机制为何使用中断协程与线程协程与GoruntineGOMAXPROCS 进程与线程(隔离与并行) 进程 进程可看作为分配资源的基本单位。比如你new出了一块内存,就是操作系统将一块物理内存映射到你的进程地址空间上(进程创建必须分配一个完整的独立地址空间),这块内存就属于这个进程,进程内的所有线程都可以访问这块内存,其...
2018-12-20 17:05:51
598
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅