![](https://img-blog.csdnimg.cn/20190222104700931.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
golang_浅析go文档
文章平均质量分 54
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。它具有开源、编译性语言, 运行高速、语法简洁、并行处理封装、内存管理、数组安全的优点。本专栏就是对其相关详情的介绍。
Grayan
尽情地享受好时光吧,我们不会再在如此年轻的时候相遇了。
展开
-
golang_切片排序:使用sort.Slice进行切片的排序
package mainimport ( "fmt" "sort")type MyStruct struct { ID int Name string Time string}func main() { my := []MyStruct{ {1, "eric", "2021-07-20T17:24:48.56383Z"}, {3, "lucy", "2021-07-10T17:24:48.56383Z"}, {2, "yoly", "2021-07-30T17:24:原创 2021-08-04 14:53:04 · 2189 阅读 · 0 评论 -
golang_fmt包中Scanf和Sscanf的使用
func Scanffunc Scanf(format string, a ...interface{}) (n int, err error)Scanf从标准输入扫描文本,根据format 参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。demopackage mainimport "fmt"func main() { var name string fmt.Printf("请输入内容:") fmt.Scan(&n原创 2020-12-23 16:59:15 · 4635 阅读 · 0 评论 -
golang_url: url的编码和解码
QueryEscapefunc QueryEscape(s string) stringQueryEscape函数对s进行转码使之可以安全的用在URL查询里。QueryUnescapefunc QueryUnescape(s string) (string, error)QueryUnescape函数用于将QueryEscape转码的字符串还原。它会把%AB改为字节0xAB,将’+‘改为’ '。如果有某个%后面未跟两个十六进制数字,本函数会返回错误。url的编码func main() {原创 2020-07-30 09:41:30 · 8863 阅读 · 0 评论 -
golang_并发模式:work包实现无缓存的工作池
使用无缓冲的通道来创建一个goroutine池,这些goroutine执行并控制一组动作,让其并发执行。使用无缓冲的通道不会有工作在队列里丢失或者卡住,所有工作都会被处理。1.知道什么时候goroutine池正在执行工作2.如果池里的所有goroutine都忙,无法接受心得工作,可及时通过通道来通知调用者work.gotype Worker interface { Task()}...原创 2020-03-09 23:40:51 · 644 阅读 · 0 评论 -
golang_条件变量:sync.Cond作为条件变量的使用
场景:生产者消费者模型中(比如一个有缓存的channel中),生产者进行生产之前去抢锁,如果缓存已满,生产者抢锁无效;消费者进行消费之前去抢锁,如果缓存为空,消费者抢锁无效。所有在抢锁之前需要进行一个判断,称之为条件变量。sync.Cond的结构:type Cond struct { noCopy noCopy // L is held while observing or chang...原创 2020-03-09 16:24:15 · 718 阅读 · 0 评论 -
golang_文件传输: go实现C/S构架下的文件传输系统
文件传输流程(3步):sender---------------receiver发送文件名 —> 保存文件名接收到"ok" <— 回复"ok"发送文件内容 —> 接收文件传输文件: 发送方import ( "fmt" "io" "net" "os")//发送文件内容func SendFile(p原创 2019-02-27 22:02:22 · 1503 阅读 · 2 评论 -
golang_获取文件属性: os包中os.Stat的用法介绍
获取文件属性os.Argsos.Args是一个字符串sliceos.Args的第一个元素是os.Args[0],是命令本身的名字.一般都是从os.Args[1]开始读取数据os.Statfunc (f *File) Stat() (fi FileInfo, err error)Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError。o...原创 2019-02-27 20:14:21 · 18792 阅读 · 0 评论 -
golang_网络协议: TCP/IP协议简介及C/S构架下的服务器端与客户端
网络协议协议:即传输的规则TCP/IP协议(四层)链路层: MAC: 物理地址网络层: IP : 逻辑地址传输层: 源端口,目的端口数据传输过程网络通信条件:网卡,mac地址(不需要用户处理,ARP协议=>通过ip找mac)逻辑地址,ip地址(需要用户指定,为了确定是哪个电脑接收)端口(为了确定是哪个程序接收)同一个系统,一个程序只能绑定一个端口不同系统,同一...原创 2019-02-27 16:09:26 · 1453 阅读 · 0 评论 -
golang_反射: reflect包的用法介绍
反射 reflect反射是获取类型的信息的方法TypeOffunc TypeOf(i interface{}) TypeTypeOf返回接口中保存的值的类型,TypeOf(nil)会返回nil。反射对象的类型ValueOffunc ValueOf(i interface{}) ValueValueOf返回一个初始化为i接口保管的具体值的Value,ValueOf(nil)...原创 2019-02-25 16:39:05 · 860 阅读 · 0 评论 -
golang_并发安全: slice和map并发不安全及解决方法
并发安全并发安全也叫线程安全,在并发中出现了数据的丢失,称为并发不安全map和slice都是并发不安全的切片并发不安全场景: 10000个协程同时添加切片var s []intfunc appendValue(i int) { s = append(s, i)}func main() { for i := 0; i < 10000; i++ { //10000个协程同...原创 2019-02-23 21:11:20 · 28023 阅读 · 9 评论 -
golang_锁: sync.RWMutex读写锁的用法介绍
sync.RWMutex 读写锁type RWMutex struct { // 包含隐藏或非导出字段}RWMutex是读写互斥锁。该锁可以被同时多个读取者持有或唯一个写入者持有。RWMutex可以创建为其他结构体的字段;零值为解锁状态。RWMutex类型的锁也和线程无关,可以由不同的线程加读取锁/写入和解读取锁/写入锁。Lockfunc (rw *RWMutex) Lo...原创 2019-02-23 12:08:54 · 3274 阅读 · 0 评论 -
golang_锁: sync.Mutex互斥锁的用法介绍
sync.Mutex 互斥锁type Mutex struct { // 包含隐藏或非导出字段}Mutex是一个互斥锁,可以创建为其他结构体的字段;零值为解锁状态。Mutex类型的锁和线程无关,可以由不同的线程加锁和解锁。Lockfunc (m *Mutex) Lock()Lock方法锁住m,如果m已经加锁,则阻塞直到m解锁。Unlockfunc (m *Mu...原创 2019-02-23 12:07:10 · 6793 阅读 · 0 评论 -
golang_锁: go中死锁的几种常见情况
死锁死锁是指两个或两个以上的协程的执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们将无法推进下去。常见的死锁场景1:一个通道在一个go程读写func main() { c:=make(chan int) c<-88 <-c}场景二:go程开启之前使用通道func main() { c:=make(chan int) c<-...原创 2019-02-23 12:02:49 · 4862 阅读 · 0 评论 -
golang_sync: sync.WaitGroup任务组的用法介绍
sync包提供了基本的同步基元.本包的类型的值不应被拷贝。go中对同步,异步的概念:同步:一边写,一边读;异步:听课,司机开车sync.WaitGrouptype WaitGroup struct { // 包含隐藏或非导出字段}WaitGroup用于等待一组线程的结束。父线程调用Add方法来设定应等待的线程的数量。每个被等待的线程在结束时应调用Done方法。同时,主线程里...原创 2019-02-23 11:06:31 · 786 阅读 · 0 评论 -
golang_select: select的用法介绍
select作用:可以监听多个通道,不会阻塞(同switch)场景:如果监听到数据通道有值就打印,如果监听到退出开关有值就退出func main() { c:=make(chan int) //数据通道 quit:=make(chan bool) //退出开关 //子go程写数据 go func() { for i:=1;i&lt;=5 ;i++ { c&lt;-i ...原创 2019-02-23 10:32:23 · 658 阅读 · 0 评论 -
golang_时间周期: time包中Ticker的用法介绍
Tickertype Ticker struct { C <-chan Time // 周期性传递时间信息的通道 // 内含隐藏或非导出字段}Ticker保管一个通道,并每隔一段时间向其传递"tick"。创建时钟周期:time.NewTicker()func NewTicker(d Duration) *TickerNewTicker返回一个新的Ticke...原创 2019-02-22 20:55:23 · 9551 阅读 · 0 评论 -
golang_定时器: time包中Timer类型函数的用法介绍
Timer1. type Timertype Timer struct { C <-chan Time // 内含隐藏或非导出字段}Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C,除非Timer是被AfterFunc函数创建的。time 组成time.Duration(时间长度,消耗时间)time.Time(时间点)time....原创 2019-02-22 20:53:56 · 2495 阅读 · 0 评论 -
golang_定时器: go中定义时间格式
time包提供了时间的显示和测量用的函数.定义你自己的时间格式,写下该参考时间应用于你的格式的情况: layout := "2006|01|02 3:04_05 " fmt.Println(time.Now().Format(layout))注意:layout中的时间点必须为2006年1月2日,15点4分5秒,简记为612345!15点写成3点时,显示时间会变更为12进制的时间...原创 2019-02-22 20:52:09 · 1029 阅读 · 0 评论 -
golang_channel: channel的用法介绍
通道(channel)一种数据类型goroutine 奉行 通过通信来共享内存,而不是共享内存来通信.作用:1.存放数据用来作缓存2.数据同步语法:通过make()定义channelc := make(chan 数据类型,容量) 容量=0,不能储存数据 容量>0,可以储存数据,储存到容量上限就阻塞c <- value //将value写入通道c...原创 2019-02-22 18:07:48 · 319 阅读 · 0 评论 -
golang_goroutine: runtime包Gosched,Goexit等函数的用法介绍
go程-runtime包主go程退出,其它子go程也会退出runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。func main() { go func(){ for i := 0; i &lt; 3; i++{ fmt.Println("go") } ...原创 2019-02-21 19:55:36 · 709 阅读 · 0 评论 -
golang_并发: 并发的介绍(简介)
并发并行(parallel): 同一时刻,有多条指令在多个处理器上同时执行.并发(concurrency): 同一时刻,只有一条指令执行,但多个进程被快速的轮换执行.宏观上是多个进程同时执行,微观上不是同时执行的.程序:一个公司 进程:一个程序可以有多个进程 。项目线程:进程系统资源消耗过多 ,cpu的基本执行单位,一个进程有多个线程。小组协程:一个线程有多个协程。个人go程:用GO...原创 2019-02-21 19:46:00 · 185 阅读 · 0 评论 -
golang_文件操作04: 文件复制
文件复制import ( "fmt" "io" "os")func main() { file1, err1 := os.Open("D:\\face.jpg") //打开文件(源文件) file2, err2 := os.Create("E:\\face.jpg") //创建文件(目标文件) defer file1.Close() defer file2.Close()...原创 2019-02-20 21:18:04 · 292 阅读 · 0 评论 -
golang_文件操作03:文件打开失败的原因,OpenFile函数插入数据
文件打开失败的原因:1、 文件不存在2、 没有打开权限3、 超过了文件打开上限内容追加:OpenFileOpen或Create调用的基本的文件打开函数*func OpenFile(name string, flag int, perm FileMode) (file File, err error)OpenFile(文件路径,打开模式,权限)用来打开文件 file,err...原创 2019-02-20 21:17:17 · 4574 阅读 · 0 评论 -
golang_文件操作02: 读文件
读文件打开文件 f,err:=os.Open()读文件 Read() 将文件的信息读取进一个[]byte切片 data := make([]byte, 100) count, err := f.Read(data)func main(){ f,err:=os.Open("./1.txt") if err!=nil{ fmt.Println("err =",...原创 2019-02-20 21:15:12 · 127 阅读 · 0 评论 -
golang_文件操作01: go中如何实现文件的写入
文件操作设备文件: 标准输出设备Stdout 例如: 显示屏 fmt.Println() //往标准输出设备写内容 标准输入设备Stdin 例如: 键盘,摄像头 fmt.Scan(&a) //从标准输入设备中读取内容,放在a中磁盘文件 1.文本文件 2.二进制文件写文件创建文件 file,err:=os.Creat()写入文件...原创 2019-02-20 21:11:33 · 1710 阅读 · 0 评论 -
golang_JSON处理: go中如何利用encoding/json包中Marshal函数生成JSON以及Unmarshal函数解析JSON
JSON处理JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式Json在线解析及格式化网站:https://www.json.cn/encoding/json包func Marshal(v interface{}) ([]byte, error)Marshal函数返回v的json编码。func MarshalIndent(v interfac...原创 2019-02-20 14:35:57 · 2177 阅读 · 0 评论 -
golang_字符串转换: Strconv包中append,Format,Parse,Itoa,Atoi的用法介绍
字符串转换:Strconv包1.Strconv.append系列: 转化为字符串后追加到字节数组 s1 := make([]byte,0,1024) s1 = strconv.AppendBool(s1,true) s1 = strconv.AppendInt(s1,123,10) //第三个参数base int,进制数 s1 = strconv.AppendQuote(s1,"go"...原创 2019-02-19 20:14:34 · 915 阅读 · 0 评论 -
golang_字符串操作: strings包中Contains,Join,Index,Repeat,Split,Trim,Fields的用法介绍
字符串处理Containsfunc Contains(s, substr string) bool判断字符串s是否包含子串substr。Examplefmt.Println(strings.Contains("seafood", "foo")) //trueJoinfunc Join(a []string, sep string) string将一系列字符串连接为一个字符串,之...原创 2019-02-19 19:13:06 · 6149 阅读 · 0 评论 -
golang_异常处理: go中error接口的应用,panic错误和recover的处理
异常处理error接口生成一个error接口1.fmt.Errorf2.errors包import ( "errors" "fmt")func main() { err1 := fmt.Errorf("%s","this is normal err1") fmt.Println("err1 = ",err1) err2 := errors.New("this is no.原创 2019-02-18 16:34:02 · 457 阅读 · 0 评论 -
golang_类型断言:go中如何判断变量的数据类型
类型断言判断变量的数据类型语法:1、值.(数据类型),返回是否是指定的值的本身和数据类型2、值.(type),返回的是指的数据类型if实现:type Student struct { name string age int}func main(){ i := make([]interface{},3) //定义一个长度为3的空接口数组 i[0] = 1 i[1] = "...原创 2019-02-17 21:55:07 · 10684 阅读 · 0 评论