golang------------------------
文章平均质量分 62
田园园野
我坚持,我坚信
展开
-
golang ---------打印函数
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"}普通占位符占位符 说明 举例 输出%v 相应...转载 2018-04-17 21:14:01 · 3791 阅读 · 0 评论 -
golang ---------- fmt包
package mainimport ( "fmt" "os")func main() { a,a1, b, c := "","", 0, false fmt.Scan(&a, &a1, &b, &c) //Scan视回车为空白,视空白为分界 //fmt.Scanln(&a,&b,&a原创 2018-04-21 20:07:23 · 385 阅读 · 0 评论 -
golang ----------- 结构体
1、内存布局type Persion { name string age int}2、结构体的域在内存中是紧挨着排列的。type Persion { name string age int}type Couple1 struct { p1,p2 Persion}type Couple2 struct { p1,p2 *Persion}...原创 2018-05-05 11:47:24 · 360 阅读 · 0 评论 -
golang ----------- new,make,struct{}
1、适用范围:make 只能创建类型(slice map channel), new可以对所有类型进行内存分配2、返回值: new 返回指针, make 返回引用new返回一个指向已清零内存的指针,而make返回一个复杂的结构。make返回复杂的结构为slice时:它是一个包含3个域的结构体:指向slice中第一个元素的指针,slice的长度,以及slice的容量3、填充值: new 填充零值, ...原创 2018-05-05 13:38:30 · 9066 阅读 · 0 评论 -
golang ----------- nil
按照Go语言规范,任何类型在未初始化时都对应一个零值:布尔类型是false,整型是0,字符串是"",而指针,函数,interface,slice,channel和map的零值都是nil。很重要:指针为空是nil,但nil不是空指针。下面说一说哦不同类型的nil的用法和坑1、指针指针对象的方法来说,就算指针的值为nil也是可以调用type Student struct {}func (s *St...原创 2018-05-11 20:37:03 · 1055 阅读 · 0 评论 -
golang ----------- map
一、map实现原理1、Go中的map在底层是用哈希表实现,一个hashmap的关键元素包括:hash函数,冲突解决方式。go的冲突解决方法属于链表法的一种。 hash函数为模运算2、map不是goroutine安全的,所以在有多个gorountine对map进行写操作是会panic。多gorountine读写map是应加锁(RWMutex),或使用sync.Map3、内存布局二...原创 2018-05-05 21:25:45 · 315 阅读 · 0 评论 -
golang ----------- 基础知识点汇总
1、标识符可以被看作是变量或者类型的代号或者名称2、关键字是指被编程语言保留页不让编程人员作为标识符使用的字符序列3、字面量字面量可以指这个量本身,字面量就是表示值的一种标记法。用于表示基础数据类型值的各种字面量。用户构造各种自定义的复合数据类型的类型字面量,如下面这个字面量表示了一个名称为 Person 的自定义结构体类型:type Person struct { Name string...原创 2018-04-29 16:01:08 · 821 阅读 · 0 评论 -
golang 深入剖析,初始化,编译器,目标文件,链接器
一、go程序初始化顺序在 main 包中的 go 文件默认总是会被执行 同包下的不同 go 文件,按照文件名“从小到大”排序顺序执行 其他的包只有被 main 包 import 才会执行,按照 import 的先后顺序执行 被递归 import 的包的初始化顺序与 import 顺序相反,例如:导入顺序 main –> A –> B –> C,则初始化顺序为 C –&g...原创 2018-07-28 14:32:52 · 1908 阅读 · 0 评论 -
golang context包
一、介绍go中有Context 包,专门用来简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。你可以通过 go get golang.org/x/net/context 命令获取这个包。例如:在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启...原创 2018-07-20 20:17:12 · 5387 阅读 · 0 评论 -
tailf日志组件使用
当tail的文件中有信息变动时,就会tail到变动的地方。例子:func main() { //filename := "E:/golang/go_work/src/go_dev/day11/tail/my.log" filename := "C:\\Users\\TCY\\Desktop\\logs\\my.log" tails, err := tail.TailFile(fil...原创 2018-07-20 21:34:57 · 1049 阅读 · 0 评论 -
golang 读取配置文件
beego config模块,可以解析文件,目前支持解析的文件格式有 ini、json、xml、yaml简单例子:import ( "fmt" "github.com/astaxie/beego/config")func main() { //首先初始化一个解析器对象 conf, err := config.NewConfig("ini", "E:\\golang\\go_...原创 2018-07-20 21:50:26 · 3031 阅读 · 0 评论 -
golang ------------ 正则表达式
const text = ` Hello tcy,you are the best tcy@123.com 212121@lala.com 222222@haha.com hahahha `func main() { re := regexp.MustCompile(`[a-...原创 2018-04-25 17:44:50 · 618 阅读 · 0 评论 -
golang -----------字符串(rune,string,type)
一、内存布局字符串在Go语言内存模型中用一个2字长的数据结构表示。它包含一个指向字符串存储数据的指针和一个长度数据。因为string类型是不可变的,对于多字符串共享同一个存储数据是安全的。切分操作str[i:j]会得到一个新的2字长结构,一个可能不同的但仍指向同一个字节序列(即上文说的存储数据)的指针和长度数据。这意味着字符串切分可以在不涉及内存分配或复制操作。这使得字符串切分的效率等同于...原创 2018-04-18 12:42:02 · 18970 阅读 · 2 评论 -
字符编码笔记:ASCII,Unicode 和 UTF-8
一、ASCII 码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一...转载 2018-04-18 12:47:19 · 110 阅读 · 0 评论 -
golang ----------- goroutine(协程)
一、协程1、协程:Coroutine,轻量级线程2、协程非抢占式多任务处理,由协程主动交出控制权 在协程中,什么时候交出控制权,什么时候不交出控制权,是由协程内部主动决定的。线程是抢占式多任务处理(执行一半,操作系统把它断掉,去执行别的),要处理最坏的情况,人家做到一半,要存很多东西,上下文等要存很多东西,会有很多资源消耗。因为协程是非抢占式,所以能够做到轻量级。只要处理切换的几个点就可以...原创 2018-04-22 12:01:00 · 626 阅读 · 0 评论 -
golang ---------- channel 通道(一 基本操作)
1、channel是goroutine之间的交互,不可以在单个goroutine里面2、发到channel里的数据当时还没有goroutine收就会deadLock(发数据必须有人取)func work(){ //var c chan int //声明 c := make(chan int) //创建chan //a :=<- c这样不行,因为channel是goroutine之...原创 2018-04-22 18:13:37 · 1657 阅读 · 1 评论 -
golang ---------- channel 通道(二 等待任务结束)
1、一个任务结束后,才执行下一个任务type channell struct { in chan int done chan bool}func workGo(id int,c chan int,done chan bool) { for a := range c{ fmt.Printf("work %d received %d\n",id,a) done <- true...原创 2018-04-22 22:39:32 · 4605 阅读 · 0 评论 -
golang ---------- channel 通道(三 select)
1、select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。2、select中的case语句必须是一个channel操作,select中的default子句总是可运行的。3、如果有多个case都可以运行,select会随机公平地选出一...原创 2018-04-23 13:01:11 · 2119 阅读 · 1 评论 -
golang ----------- 传统同步机制
go中正常不经常使用传统同步机制(共享内存来进行通信),常使用channel(通过通信来共享内存)一、互斥锁1、不加锁的情况:type atomicInt intfunc (a *atomicInt) increment(){ *a++}func (a *atomicInt) get() int { return int(*a)}func main(){ var a atom...原创 2018-04-23 15:25:57 · 308 阅读 · 0 评论 -
golang ----------- os,io,bufio对文件的操作
1、内核中的缓冲与进程中的缓冲内核中的缓冲:无论进程是否提供缓冲,内核都是提供缓冲的,系统对磁盘的读写都会提供一个缓冲(内核高速缓冲),将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才把数据写入磁盘。进程中的缓冲:是指对输入输出流进行了改进,提供了一个流缓冲,当调用一个函数向磁盘写数据时,先把数据写入缓冲区,当达到某个条件,如流缓冲满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲...原创 2018-04-20 22:30:03 · 1982 阅读 · 0 评论 -
golang ----------- 数组,切片 slices
一、数组:1、① 数组作为参数传递时,传递的是值得拷贝。 ② 数组的容量和长度是一样的。cap() 函数和 len() 函数均输出数组的容量2、数组有三种创建方式: var arr1 [5]int //0 0 0 0 0 arr2 := [3]int{1, 3, 5} //1 3 5 arr3 := [...]int{2, 4, 6, ...原创 2018-04-21 17:21:20 · 243 阅读 · 0 评论 -
golang pprof使用
pprof 简介golang 的性能分析库在 runtime/pprof 里,主要提供下面几个接口// 堆栈分析func WriteHeapProfile(w io.Writer) error// cpu分析func StartCPUProfile(w io.Writer) errorfunc StopCPUProfile()使用上面比较简单,只需要将文件指针传给对应的函数即...转载 2018-08-19 17:11:29 · 2055 阅读 · 0 评论