03-常量 常量常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式: 1const identifier [type] = value 你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。 显式类型定义: 1const b string = "abc" 隐式类型定义: 1const 2024-11-01 Go #Go
04-函数 函数的声明注意:定义函数的时候,‘{’ 必须和函数名在同一行,不能另起一行。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport "fmt"func main() { println("foo1:", foo1(1, 3 2024-11-01 Go #Go
05-defer deferdefer 语句被用于预定对一个函数的调用。可以把这类被defer语句调用的函数称为延迟函数。 defer作用: 释放占用的资源 捕捉处理异常 输出日志 结果:如果一个函数中有多个defer语句,它们会以LIFO(后进先出)的顺序执行。 123456789func Demo(){ defer fmt.Println("1") defer fmt.Println("2") d 2024-11-01 Go #Go
06-slice 和 map 数组数组长度固定,不建议用 123456789101112131415161718192021222324252627282930313233package mainimport "fmt" //不建议使用,可以使用动态数组func printArray (array [4]int){ //值拷贝 fmt.Println("---------------输出函数------------- 2024-11-01 Go #Go
07-结构体 结构体的使用1234567891011121314151617181920212223242526272829303132333435363738394041package main import "fmt" // 声明一种数据类型,myint是int的别名type myint int// 声明结构体type Book struct{ title string auth string 2024-11-01 Go #Go
07-面向对象 封装1234567891011121314151617181920212223242526272829303132333435package main import "fmt" // 类名、属性名、方法名、首字母大写代表其他包可以访问,首字母小写代表私有,只有本包内可以使用type Hero struct { Name string Ad int Level int} // 如 2024-11-01 Go #Go
08-interface与类型断言 简介Golang 的语言中提供了断言的功能。golang 中的所有程序都实现了 interface{} 的接口,这意味着所有的类型如 string,int,int64 甚至是自定义的 struct 类型都就此拥有了 interface{} 的接口,这种做法和 java 中的 Object 类型比较类似。那么在一个数据通过 func funcName(interface{}) 的方式传进来的时候,也 2024-11-01 Go #Go
09-反射reflect 编程语言中反射的概念在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用 2024-11-01 Go #Go
10-结构体标签 12345678910111213141516171819202122232425262728package mainimport ( "fmt" "reflect")type resume struct { Name string `json:"name" doc:"我的名字"`}func findDoc(stru interface{} 2024-11-01 Go #Go
11-goroutine 协程并发协程:coroutine。也叫轻量级线程。 与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”。可以轻松创建上万个而不会导致系统资源衰竭。而线程和进程通常很难超过1万个。这也是协程别称“轻量级线程”的原因。 一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。 多数语言在语法层面并不直接支持协程,而是通过库的方式支持,但用库的方式支持 2024-11-01 Go #Go
12-channel channel 是 Go 语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel 是一个数据类型,主要用来解决 go 程的同步问题以及 go 程之间数据共享(数据传递)的问题。 goroutine 运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是共享内存 2024-11-01 Go #Go
13-Select select作用Go 里面提供了一个关键字select,通过 select 可以监听 channel 上的数据流动。 有时候我们希望能够借助 channel 发送或接收数据,并避免因为发送或者接收导致的阻塞,尤其是当 channel 没有准备好写或者读时。select 语句就可以实现这样的功能。 select 的用法与 switch 语言非常类似,由 select 开始一个新的选择块,每个选择条件 2024-11-01 Go #Go
14-Go Modules 1、什么是Go Modules?Go modules 是 Go 语言的依赖解决方案,发布于 Go1.11,成长于 Go1.12,丰富于 Go1.13,正式于 Go1.14 推荐在生产上使用。 Go moudles 目前集成在 Go 的工具链中,只要安装了 Go,自然而然也就可以使用 Go moudles 了,而 Go modules 的出现也解决了在 Go1.11 前的几个常见争议问题: Go 2024-11-01 Go #Go
中文文案排版指北 GitHub:https://github.com/sparanoid/chinese-copywriting-guidelines 中文文案排版指北统一中文文案、排版的相关用法,降低团队成员之间的沟通成本,增强网站气质。 空格 「有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己 2024-10-10 建站 > hexo #建站 #hexo
同一台电脑上使用两个 github 账号 生成多个 SSH key 12ssh-keygen -t rsa -f ~/.ssh/id\_rsa\_one -C “one@xxx.com”ssh-keygen -t rsa -f ~/.ssh/id\_rsa\_two -C “two@xxx.com” 这样会在 ~/.ssh 目录下生成四个文件: id_rsa.one //账号 one 的私钥 id_rsa.one 2024-10-08 Git #Git
02-Flask session Flask 中文文档: https://dormousehole.readthedocs.io/en/latest/ http://www.pythondoc.com/flask/config.html https://flask-cn.readthedocs.io/en/latest/ Flask 英文文档(官方):https://flask.palletsprojects.com/en 2024-09-26 Python > Flask #Python #Flask
accept 与 epoll 惊群 1、什么叫惊群现象维基百科对惊群的定义: The thundering herd problem occurs when a large number of processes waiting for an event are awoken when that event occurs, but only one process is able to proceed at a time. Aft 2024-09-24 Linux #Linux
40-TCP 多进程共享 socket tornado 源码多进程(process.py)那段,发现他的多进程模型和一般常见的模型有点不一样, 常见的是主进程 bind -> listen -> accept, 将 accept 返回的 socket 用子进程处理, tornado 则是 bind -> listen -> fork, 在 listen 之后 fork,多个子进程共享 listen sock 2024-09-23 network #network
系统调用 accept 简单来说:accept 的主要工作就是从全连接队列中获取一个连接,创建通信 socket,供用户使用。 在完成三次握手后,连接被放到全连接队列(也称 Accept Queue)里面,server 端 TCP 会创建一个 sock 结构来与 client 端的 scoket 进行一对一的数据传递。 但这个 sock 存在于内核中,server 端用户进程还无法使用。进程要想使用这个新的连接, 2024-09-23 Linux #Linux
系统调用 accept 源码分析 注:本文分析基于 3.10.0-693.el7 内核版本,即 CentOS 7.4 1、函数原型12345678int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 参数说明: sockfd:套接字的文件描述符,socket()系统调用返回的文件描述符fd addr:指向存放地址信息的结构体的首地址 2024-09-23 Linux #Linux