Go语言中文网 为您找到相关结果 1285

golang fmt(格式换 I O接口)

基本模式 fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法。 Print 将参数写入字符串或io.writer scan 从字符串或 io.Reader 读取指定数据, 并输出 Print Print 方法的几种模式 基础模式: [name] Print 返回默认格式化的字符串 写入模式: F[name] 返回写入字节 例如: Fprint 字符模式: S[name] 返回字符 例如: Sprint 模板模式: [name]f 根据模板格式化 例如: Printf 换行模式: [name]ln 输出后带换行 例如: Println 模式可组合, 例如 Fprintf, Sprintf Print 默认格式化,返回字符串 func Print(a ...in...阅读全文

求助呀!! mongo 怎么从外部插入数据呢

求助呀!! mongo 怎么从外部插入数据呢, 我写好了插入操作 怎么进行测试操作呢 怎么把测试内容插入到集合内 ![image.png](https://static.studygolang.com/180915/1342b21283355b10b39fd4566f4174a8.png) ![image.png](https://static.studygolang.com/180915/67026850d0308c7944cd627b2c2226a2.png) ![image.png](https://static.studygolang.com/180915/eda1924cee087154fef7be5c193048f4.png...阅读全文

博文 2018-09-15 10:49:33 261809340

万用大数据修炼手册!教你如何在成为大牛的路上保护好你的秀发!

也许你想在数据研究领域工作,你对数据工程师和数据科学家之间的区别还不是很清楚,甚至很多人可能认为这是同一件事。如果你真的这么认为,那是个大错误!这两个位置之间的差别正在增大。如果你不能深入理解这些异同,那么在未来绝对不会有几声雷鸣在等你。这篇文章必须读!数据工程师在技术上工作。他们负责数据系统架构的设计和维护,包括从基础设施分析到数据仓库的许多概念。数据工程师需要对常用的脚本语言有一个透彻的理解,并通过使用和改进数据分析系统,稳步提高数据的质量和数量。他们还负责创建建模、挖掘、验证和获取数据的步骤和过程。 预计行业对熟练数据工程师的需求将迅速增长。在现代世界,企业和组织需要一个可靠的数据体系结构来获取和存储数据。当企业发展到需要使用数据科学的程度时,它需要数据工程师。因此,迫切需要数据工程师...阅读全文

博文 2019-01-29 00:34:43 大数据的风风

Golang goroutine与channel

使用goroutine的方法很简单,直接在语句前面加go关键字即可,如果是多核处理器的电脑,使用gorountine,就会在另外一个CPU上执行goroutine,子协程不一定会和主协程在一个CPU上执行。 这里有两个注意的地方,使用go关键字的进程称之为子协程,而没有使用go关键字的进程称之为主协程,在多CPU的机器上,如果有多个协程,那么这些协程的执行顺序以及执行完成的顺序都是不确定的,但有一点,如果主协程结束,那么整个进程就结束了,不论子协程是否结束,整个进程都结束了,也就看不到子协程的运行结果了。 示例1 package main import "fmt" func main() { go fmt.Println("hello") //子协程 fmt.Println("world")...阅读全文

Go channel实现源码分析

go通道基于go的并发调度实现,本身并不复杂,go并发调度请看我的这篇文章:go并发调度原理学习 1.channel数据结构 type hchan struct { qcount uint // 缓冲区中已有元素个数 dataqsiz uint //循环队列容量大小 buf unsafe.Pointer // 缓冲区指针 elemsize uint16 //元素大小 closed uint32 //关闭标记,0没关闭,1关闭 elemtype *_type //数据项类型 sendx uint //发送索引 recvx uint //接收索引 recvq waitq //等待接收排队链表 sendq waitq //等待发送排队链表 lock mutex //锁 } type waitq s...阅读全文

Learn Golang in Days - Day 16-Go并发

Learn Golang in Days - Day 16-Go并发 简介 go语言支持并发,只需要使用go关键字开启goroutine即可。 goroutine是轻量级现场,goroutine由运行时进行调度管理 package main import "fmt" import "time" func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") } 通道channel 通道channel是用来传递数据的一个数据结构 通过可用于goroutine之间通过传递一个指...阅读全文

博文 2019-02-08 18:34:43 笑吧小鸟

问下 GO的列CSS JS 静态服务 如何访问URL的时候不展示列表但是可以调用里面的JS 图片等

~~~ http.StripPrefix("/static/", http.FileServer(http.Dir("static/")))) 这样就可以用静态服务里文件 有个缺陷 访问 static时候 直接列出当前目录全部文件了 感觉不安全 如何不展示这个呢? ~~~![QQ图片20180329211054.png](https://static.studygolang.com/180329/b77bcfdaa11c683e0263d95fc827e387.png...阅读全文

【GO学习二】包,函数,常量和变量

主要介绍go语言的基本元素,包引入,变量,函数声明 引入包: go语言通过import引入包最佳实践:import顺序:系统package,第三方package,程序自己的package package main import ( "fmt" "math" ) func main() { fmt.Printf("math test number %g ",math.Sqrt(7)) } # 运行输出 cuixiaozhuai:main cuixiaohuan$ ./hello math test number 2.6457513110645907 函数定义 go中函数可以没有参数或者接受多个参数 基本格式 func xx(AA type,aa) Type { } package main i...阅读全文

博文 2017-10-12 13:34:48 崔小拽

Golang通道的无阻塞读写的方法示例

无论是无缓冲通道,还是有缓冲通道,都存在阻塞的情况,但其实有些情况,我们并不想读数据或者写数据阻塞在那里,有1个唯一的解决办法,那就是使用select结构。这篇文章会介绍,哪些情况会存在阻塞,以及如何使用select解决阻塞。阻塞场景阻塞场景共4个,有缓存和无缓冲各2个。无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景:通道中无数据,但执行读通道。通道中无数据,向通道写数据,但无协程读取。// 场景1func ReadNoDataFromNoBufCh() {noBufCh := make(chan int)<-noBufChfmt.Println("read from no buffer channel success")// Output:// fatal error...阅读全文

博文 2018-11-05 18:34:46 胡一巴

golang 基础(26)select

golang_real.jpg select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。 func main(){ c1 := make(chan string) c2 := make(chan string) go func(){ time.Sleep(1 * time.Second) c1 <- "one" }() go func(){ time.Sleep( 2 * time.Second) c2 <- "two" }() for i:= 0; i < 2; i++ { select { case msg1 := <- c...阅读全文

Golang与Mysql

mysql数据可使用 package database import ( "database/sql" _ "github.com/go-sql-driver/mysql" "log" ) var SqlDB *sql.DB func init() { var err error SqlDB, err = sql.Open("mysql", "root:diumxcom@tcp(localhost:3306)/students") if err != nil { log.Fatal(err.Error()) } err = SqlDB.Ping() if err != nil { log.Fatal(err.Error()) } ...阅读全文

博文 2019-10-13 23:02:46 aside section ._1OhGeD

golang数据类型

关于golang基本类型的几篇文章 go语言类型 go语言基本数据类型 go语言的内置类型和内置函数以及自定义类型 golang基本类型介绍 Go语言基本数据类型和内置函数 源码在/src/builtin/builtin.go中,内容如下 package builtin // bool is the set of boolean values, true and false. type bool bool // true and false are the two untyped boolean values. const ( true = 0 == 0 // Untyped bool. false = 0 != 0 // Untyped bool. ) // uint8 is the se...阅读全文

博文 2019-03-08 11:32:06 Charliewolf

Go语言基础 - 基本数据类型

一、基本数据类型 1. 整型 uint8也就是byte型 无符号整型 取值范围 uint8 0 到 255 uint16 0 到 65535 uint32 0 到 4294967295 uint64 0 到 18446744073709551615 int16对应C语言中的short型,int64对应C语言中的long型 有符号整型 取值范围 int8 -128 到 127 int16 -32768 到 32767 int32 -2147483648 到 2147483647 int64 -9223372036854775808 到 9223372036854775807 a. 特殊整型 在使用int和uint类型时,不能假定它是32位或64位的整型,而是考虑int和uint可能在不同平台上...阅读全文

博文 2020-04-08 22:32:41 不留烦

Golang之旅3-基本数据类型

基本数据类型 GO语言中的数据类型十分丰富,包含:整型、浮点型、布尔型,还有数组、切片、结构体、函数、map、通道chanel等 go基本数据类型 整型 无符号整型 uint8:,0到255 uint16:,0到65535 uint32 uint64 有符号整型 int8:-128到127 int16:-32768到32767 int32 int64 其他数字类型 uint:32/64位系统上就是uint32/uint64 int:32/64位系统上就是int32/int64 uintptr:无符号整型,用于存放一个指针 注意: 在使用int和 uint类型时,不能假定它是32位或64位的整型,而是考虑int和uint可能在不同平台上的差异。 获取对象的长度的内建len()函数返回的长度可以...阅读全文

博文 2019-10-19 01:32:43 aside section ._1OhGeD

QuickBI助你成为分析师——搞定数据源

摘要: QuickBI支持多种数据源连接,添加数据源是数据分析展示的第一步,下面来详细介绍一下产品数据源支持情况! Quick BI是一个基于云计算的灵活的轻量级的自助BI工具服务平台,提供海量数据即时分析 ,拖拽式操作、丰富的可视化效果,帮助您轻松自如地完成数据分析、业务数据洞察 。它不仅是业务人员看数据的工具 ,更是数据化运营的助推器,解决大数据应用“最后一公里”的问题,实现“人人都是数据分析师”。 产品的核心流程如下图所示, ![图片描述](http://img.blog.csdn.net/20180328113309600?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5...阅读全文

Go基础系列:channel入门

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据。 channel是指针类型的数据类型,通过make来分配内存。例如: ch := make(chan int) 这表示创建一个channel,这个channel中只能保存int类型的数据。也就是说一端只能向此channel中放进int类型的值,另一端只能从此channel中读出int类型的值。 需要注意,c...阅读全文

博文 2018-11-23 09:12:08 f-ck-need-u

golang-select调度器

select 方式进行调度 使用场景: 比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁 这个select 可以是并行执行 channel管道 package main import ( "fmt" "math/rand" "time" ) /** select 方式进行调度 使用场景:比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁 这个select 可以是并行执行 channel管道 */ // 发送值 func generator() chan int { out := make(chan int) go func() { i := 0 for { // 随机睡眠, 1500毫秒以内 time.Sleep(time.Duration(rand.Intn(1500...阅读全文

博文 2019-12-18 12:32:43 爱吃豆包

Golang 数据结构

https://research.swtch.com/godataWhen explaining Go to new programmers, I've found that it often helps to explain what Go values look like in memory, to build the right intuition about which operations are expensive and which are not. This post is about basic types, structs, arrays, and slices.Basic typesLet's start with some simple examples: The v...阅读全文

博文 2019-03-27 11:34:41 贺大伟

记一次Kafka集群线上扩容

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 前段时间收到某个 Kafka 集群的生产客户端反馈发送消息耗时很高,于是花了一段时间去排查这个问题,最后该集群进行扩容,由于某些主题的当前数据量实在太大,在对这些主题迁移过程中话费了很长一段时间,不过这个过程还算顺利,因为在迁移过程中也做足了各方面的调研,包括分区重平衡过程中对客户端的影响,以及对整个集群的性能影响等,特此将这个过程总结一下,也为双十一打了一剂强心剂。 排查问题与分析 接到用户的反馈后,我用脚本测试了一遍,并对比了另外一个正常的 Kafka 集群,发现耗时确实很高,接下来 经过排查,发现有客户端在频繁断开与集群节点的连接,发现日志频繁打印如下内容: Attempting...阅读全文

博文 2019-10-27 14:32:44 aside section._1OhGeD

go基本类型使用细节

整型的使用细节 Golang 各整数类型分:有符号和无符号 ,int uint的大小和系统有关。 Golang 的整型默认声明为int型 var n1 = 100 fmt.Printf('n1的数据类型%T',n1) 如何在程序查看某个变量的字节大小和数据类型(使用较多) var n2 int64 = 10 fmt.Printf('n2的 数据类型 %T n2占用的字节数是 %d',n2,unsaft.Sizeof(n2)) 浮点型使用细节 Golang 浮点类型有固定的范围和字段长度,不受具体OS(操作系统)的影响。 Golang 的浮点型默认声明为float64 类型。 浮点型常量有两种表示形式 十进制数形式:如:5.12 .512 (必须有小数点) 科学计数法形式:如:5.1234e2...阅读全文

博文 2019-01-03 18:34:44 StevenQin

QuickBI助你成为分析师-数据建模(一)

摘要: 创建数据集是报表分析的基础,合理建模可以达到事半功倍的效果哦! 产品核心流程第二步为创建数据集,进行数据建模,如果说数据是海,那么创建数据集并合理建模就是划船的浆,有了浆才能在数据的海洋里畅游。目前创建数据集有两种方式:(1)数据表直接创建数据集 (2)通过自定义sql创建数据集,以实现初步建模。 **创建数据集:** (1)直接新建数据集: 如下图,在数据源列表页,找到目标表,点击创建数据集按钮并选择存放文件夹 即可新建,新建后自动进入数据集界面。 ![图片描述](http://img.blog.csdn.net/20180409101738943?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWl...阅读全文

NSQ 落地磁盘的消息队列源码解读

本文原地址 https://blog.lpflpf.cn/passages/nsqd-study-2/ NSQ 消息队列实现消息落地使用的是 FIFO 队列。实现为 diskqueue , 使用包 github.com/nsqio/go-diskqueue ,本文主要对 diskqueue的实现做介绍。本文代码来自于 github.com/nsqio/go-diskqueue 功能定位 在NSQ 中, diskqueue 是一个实例化的 BackendQueue, 用于保存在内存放不下的消息 。是一个比较经典的队列的实现,值得学习。 实现的功能是一个FIFO的队列,实现如下功能: 支持消息的插入、清空、删除、关闭操作 可以返回队列的长度(写和读偏移的距离) 具有读写功能,FIFO 的队列 d...阅读全文

博文 2019-09-11 11:32:49 _____

Golang学习笔记-1.4 数据类型

本文系第四篇Golang语言学习教程 在Go语言中,数据类型用于声明函数和变量。 Go语言按类别有以下几种数据分类 序号 类型 描述 1 bool bool类型表示一个布尔值,值为true或false 2 数字类型 整型int和浮点型float32、float64.Go支持整型和浮点型数字,并且原生支持复数。 3 字符串类型 一串固定长度字符连接起来的序列,Go语言中字符串由单个字节连接起来,使用UTF-8编码标识Unicode文本。 4 派生类型 包括:(a) 指针类型(Pointer) (b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型 bool bool类型表示一个布尔...阅读全文

博文 2018-07-05 21:35:02 xunk1900

golang基础之数据类型

一、概述 在golang中会涉及变量(var声明)、常量(const)、枚举(golang从语法上没有enum的定义,可以使用iota来实现)、基本类型、引用类型(slice、map、channel)、类型转换、自定义类型、未命名类型等内容,不过很多是和大家熟知的Java、C#中概念差不多,只是具体存在一些差异,不过需要记住一点golang是静态类型语言,其对应的变量总有固定的数据类型,其类型也决定变量内存的长度和储存格式,也意味着只能更改其变量值而不能变更其类型。 数据类型 二、具体实例 package main import ( "reflect" "unsafe" ) func main() { type data int var d data = 10 // var x int = ...阅读全文

博文 2019-03-12 12:34:40 神奇的考拉

golang基础(2)基础类型

基本类型 在开始之前,先补充一下上一次分享的内容,是不可以重复为变量 foo 初始化赋值的。 foo := 'hello' foo := "world" 我是一名 web 前端出身的 developer,接触最早也是接触最多还是 javascript ,所以学习任何其他新的语言我都喜欢给 javascript 对比地来学。在 javascript 数据类型中对于数值只有 number 类型也就是 float 类型,而在 go 语言却进行相当细致的划分数值类型,应该是为了效率,节省内存空间吧。更准确地为变量分配内存空间。 int8 int16 int32 int64 float32 float64 关于这些数据类型,我就不做过多解释 int 代表整数型,后面 8 代表的占内存大小也是就是这个数...阅读全文

语言的分类(静动态/强弱类型/显隐式)

强弱类型语言: 强类型:类型是定义好的,无法改变它的类型了,但是向C语言,虽然定义了一个short,还是可以当成char来用的,因为可以直接操作内存。 弱类型:类型之间可以自由转换 弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以C是弱类型的。 显式隐式 在语法层面明确数据类型与否,隐式的比如C++ 的 auto 关键字,JS/Go的var,还有python。 动态静态类型语言: 静态类型:编译时就确定数据类型,java/C/C++/golang 动态类型:运行时确定数据类型 python/PHP 不知道类型,光看变量名是不知道数据到底是int还是char类型,后期换个人维...阅读全文

博文 2020-05-18 11:33:08 小幸运Q

【Go学习笔记】7、切片slice

切片slice 其本身并不是数组,他指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 一般使用make()创建 如果多个slice指向相同底层数组,其中一个的值改变会影响全部 make([]T,len,cap) 其中cap可以省略,则和len值相同 len表示存数的元素个数,cap表示容量 1234func main(){ s1 := make([]int, 10, 10) fmt.Println(s1)} Reslice Reslice 时索引以被slice的切片为准 索引不可以超过被slice的切片的容量cap()值 索引越界不会导致底层数组的重新分配而是引发错误 Appen...阅读全文

博文 2017-05-30 05:09:53 HundredLee

可视化Go内存管理

本文翻译自《Visualizing memory management in Golang》。 “内存管理”系列的一部分 在这个由多部分组成的系列文章中,我旨在揭示内存管理背后的概念,并对某些现代编程语言的内存管理机制做更深入的探究。我希望该系列文章可以使您对这些语言在内存管理方面正在发生的事情能有所了解。 在本章中,我们将研究Go编程语言(Golang)的内存管理。和C/C++、Rust等一样,Go是一种静态类型的编译型语言。因此,Go不需要VM,Go应用程序二进制文件中嵌入了一个小型运行时(Go runtime),可以处理诸如垃圾收集(GC),调度和并发之类的语言功能。 如果您还没有阅读本系列的第一部分,请先阅读它,因为在那篇文章中我解释了栈(stack)和堆(heap)内存之间的区别,...阅读全文

golang笔记之数据类型

基础数据类型 整形、浮点数、复数、布尔型、常量 复合数据类型 slice、数组、map、struct slices使用注意点: slice与数组的区别为在声明时不需要指定长度。 数组的初始化 var a [4]int slice的初始化 var s []byte Slices hold references to an underlying array, and if you assign one slice to another, both refer to the same array. Slice持有一个潜在的数组,如果你将一个slice赋值给另一个slice,那么两个slice有共同的数组。 重新分片一个slice不会拷贝此slice的内部数组。当只使用数据量比较大的sclice的一...阅读全文

博文 2019-05-05 21:34:58 月下独酌100

Golang构建Python高性能模块

package mainimport "C"​//指定那些函数能被外部调用//export testfunc test() int{ //计算 0-1000000000 的和 var s int for a := 0; a <= 10000000000; a++ { s += a } return s}​//pxport addstrfunc addstr(a,b * C.char) *C.char{ merge := C.GoString(a) + C.GoString(b) return C.CString(merge)​}func main(){}编译生成动态链接库,生成的.so文件可以被python加载并调用但是有一个需要注意的地方:Python是利用ctypes来跟so模块进行交互...阅读全文

博文 2020-05-20 16:53:43 大熊_7d48

go基础系列:数组

了解Python、Perl、JavaScript的人想必都知道它们的数组是动态的,可以随需求自动增大数组长度。但Go中的数组是固定长度的,数组一经声明,就无法扩大、缩减数组的长度。但Go中也有类似的动态"数组",称为slice数据结构,在下一篇文章会详细解释它。 Go中的数组是slice和map两种数据类型的基础,这两种数据类型的底层都是通过数组实现的。 数组的存储方式 当在Go中声明一个数组之后,会在内存中开辟一段固定长度的、连续的空间存放数组中的各个元素,这些元素的数据类型完全相同,可以是内置的简单数据类型(int、string等),也可以是自定义的struct类型。 固定长度:这意味着数组不可增长、不可缩减。想要扩展数组,只能创建新数组,将原数组的元素复制到新数组 连续空间:这意味可以...阅读全文

博文 2018-11-23 09:09:11 f-ck-need-u

兄弟连区块链教程btcpool矿池源码分析slparser

btcpool矿池-slparser(share log parser)模块解析 核心机制总结 支持三种功能: 指定Date和UID,将打印指定日期指定用户的share信息到stdout UID=0时,将打印指定日期所有用户的share信息 指定Date但未指定UID,读取指定日期sharelog,统计数据并写入数据库 按Worker、user、pool三个维度统计:Accept1h、Accept1d、score1h、score1d、Reject1h、Reject1d 数据库仅保留最近3个月统计数据 如果Date和UID均未指定,将监听文件变化,读取share并统计数据,每15秒写入数据库 同时启动Httpd服务,开放ServerStatus和WorkerStatus slparser命令使...阅读全文

博文 2018-10-26 15:34:41 兄弟连区块链培训

【数据结构原理与应用(Golang描述)】② 链表

_ _ _ _ _ _ _ | (_) | | | | | (_) | | | |_ _ __ | | _____ __| | | |_ ___| |_ | | | '_ \| |/ / _ \/ _` | | | / __| __| | | | | | | < __/ (_| | | | \__ \ |_ |_|_|_| |_|_|\_\___|\__,_| |_|_|___/\__| 1.1 原理 链表与数组都非常基础也非常常用,从底层数据结构上看,数组需要一块连续的内存空间来存储数据,而链表则不需要,链表通过指针将一组零散的内存块串联起来使用。 日常中有三种常见的链表结构: 单向链表 双向链表 循环链表 1.2 分析 对于单链表来说,插入和删除操作的时间复杂度为 $O(1)$。双向链表...阅读全文

博文 2020-02-07 13:32:39 vouv

4. Go 语言数据类型:byte、rune与字符串

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更多的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 1. byte 与 rune byte,占用1个节字,就 8 个比特位,所以它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。 如下这段代码,分别定义了 byte 类型和 uint8 类型的变量 a 和 b import "fmt" func main() { var a byte = 6...阅读全文

博文 2020-04-25 20:32:42 Python编程时光

14. Go 语言中的类型断言是什么?

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Type Assertion Type Assertion(中文名叫:类型断言),通过它可以做到以下几件事情 检查 i 是否为 nil 检查 i 存储的值是否为某个类型 具体的使用方式有两种: 第一种: t := i.(T) 这个表达式可以断言一个接口对象(i)里不是 nil,并且...阅读全文

博文 2020-05-11 09:32:44 Python编程时光

golang程序的基本结构和基本数据类型

1.文件名,关键字和标识符 每个golang程序的源文件都是以.go为后缀结尾 golang有25个关键字 break, default, func, interface, select case, defer, go, map, struct, chan else, goto, package, switch, const fallthrough, if, range, type, continue for, import, return, var 标识符使用字母数字下划线,且必须以字母或下划线开头的字符串序列 另外golang中还预定义了35个标识符 append, bool, byte, cap, close, complex, complex64, complex12 copy, f...阅读全文

博文 2019-04-02 23:34:38 孤风追影

[翻译]GO并发模型二:Pipeline和Cancellation

![image.png](https://static.studygolang.com/190320/6e9e2a4eacd7666eae1d15f42870c383.png) 紧接上文:[[翻译]GO并发模型一:Pipeline和Cancellation](https://zhuanlan.zhihu.com/p/59295820) ## 明确地取消 当主函数在没有从输出channel中接收完所有值便退出时,它必须告诉上游停止数据发送。可以通过向done channel发送停止信号实现。此处有两个可能阻塞的goroutine,所以需发两个值。 ``` func main() { in := gen(2, 3) // Distribute the sq work across two gor...阅读全文

Go基础系列:为select设置超时时间

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某些情况下的select是否会永久阻塞。很多时候都需要设置一下select的超时时间,可以借助time包的After()实现。 time.After()的定义如下: func After(d Duration) <-chan Time After()函数接受一个时长d,然后它After()等待d时长,等待时间到后,将等待完成时所处时间点写入到channel中并返回这个只读channel。 所以,将该函数赋值给一个变量时,这个变量是一个只读channel,而channel是一个指针类型的数据,所以它...阅读全文

博文 2018-11-23 09:12:10 f-ck-need-u

从 io.Reader 中读数据

目录 [−] io.Reader.Readio.Copyioutil.ReadAllio.ReadFullio.ReadAtLeastio.LimitReader参考资料 Go 的标准库提供了多个从 io.Reader 中读取数据的方法 (io、ioutil),本文通过从 net.Conn中读取数据为例,演示各种方法已经应用场景。 使用TCP连接访问某个网站,采用HTTP 1.0的协议,让TCP连接保持短连接,读取完response之后连接会关闭,这样就模拟了io.EOF的错误: 123456conn, err := net.Dial("tcp", "rpcx.site:80")if err != nil { fmt.Println("dial error:", err) return}de...阅读全文

博文 2019-03-02 15:11:15 smallnest

Golang学习笔记--Channel

如何定义使用 定义 每个通道都有与之关联的类型。此类型是允许通道传输的数据类型。不允许使用该通道传输其他类型的数据。 通道的零值为nil。零通道没有任何用处,因此必须使用类似于 map 和 slice 的make来定义。 package main import "fmt" func main() { var a chan int // 定义 channel if a == nil { fmt.Println("channel a is nil, going to define it") a = make(chan int) fmt.Printf("Type of a is %T", a) // 输出Type of a is chan int } } 使用(接收和发送消息) data := <...阅读全文

【干货分享】大数据开发套件DataIDE使用教程

课程介绍 大数据开发套件(Data IDE) 是阿里云数加重要的Paas平台产品,是”DataWorks”中最重要的核心组件。提供全面托管的工作流服务,一站式开发管理的界面,帮助企业专注于数据价值的挖掘和探索。 大数据开发套件(Data IDE) 基于MaxCompute作为核心的计算、存储引擎,提供了海量数据的离线加工分析、数据挖掘的能力。您可以参见 MaxCompute 简介来对其进行深入了解 。 使用大数据开发套件(Data IDE),可对数据进行数据传输、数据转换等相关操作,从不同的数据存储引入数据,对数据进行转化处理,最后将数据提取到其他数据系统。 产品详情:https://data.aliyun.com/product/ide 课时列表 • 课...阅读全文

Golang通道的无阻塞读写的方法示例

无论是无缓冲通道,还是有缓冲通道,都存在阻塞的情况,但其实有些情况,我们并不想读数据或者写数据阻塞在那里,有1个唯一的解决办法,那就是使用select结构。这篇文章会介绍,哪些情况会存在阻塞,以及如何使用select解决阻塞。阻塞场景阻塞场景共4个,有缓存和无缓冲各2个。无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景:通道中无数据,但执行读通道。通道中无数据,向通道写数据,但无协程读取。// 场景1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh fmt.Println("read from no buffer channel success") // Output: // fatal...阅读全文

博文 2018-11-16 10:35:39 xiao_lili

数据结构和算法(Golang实现)(26)查找算法-哈希表

哈希表:散列查找 一、线性查找 我们要通过一个键key来查找相应的值value。有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链接到链表上。 这种链表查找,最坏的时间复杂度为:O(n),因为可能遍历到链表最后也没找到。 二、散列查找 有一种算法叫散列查找,也称哈希查找,是一种空间换时间的查找算法,依赖的数据结构称为哈希表或散列表:HashTable。 Hash: 翻译为散列,哈希,主要指压缩映射,它将一个比较大的域空间映射到一个比较小的域空间。 简单的说就是把任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash 算法虽然是一种算法,但更像一种思想,没有一个固定的公式,只要符合这种思想的算法都称 Hash 算法。 散...阅读全文

博文 2020-04-07 16:32:50 陈星星

第四章 符合数据类型

复合数据类型包括数组,切片,map,结构体 数组 数组是一个由固定长度的特定类型的元素组成的序列,一个数组可以由零个或多个元素组成。 因为数组的长度固定,所以golang中很少直接使用数组,都是使用和数组对应类型的slice 汉译 切片 它是可以增长和收缩的动态序列,slice功能也更灵活,但是要理解slice 工作原理的话首先需要理解数组,因为slice就是基于数组做片段化引用的这么个东西 在数组字面值中,如果在数组长度位置出现“…” 省略号,则表示数组的长度是按照初始化长度来计算的。数组的长度是数组类型的组成部分[3]int 不是一个类型[4]int!! Slice 切片代表一个变长序列,序列中每一个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型;...阅读全文

博文 2018-11-19 07:34:39 zhaoxi_yu

golang-sync.WaitGroup

使用 go 语言提供的方式处理:sync.WaitGroup package main import ( "fmt" "sync" ) /** channel 例子六: 接收方,接收完毕的时候,通知发送我接收完毕了! 使用 Go 语言提供的 sync.WaitGroup 的方式,来等待任务结束处理!之前处理方式比较繁琐 // 使用 go 语言提供的等待组,等待组 var wq sync.WaitGroup // 表示有多少个任务,比如添加20个任务 wq.Add(20) // 每个任务做完后,在任务做完后调用 wq.Done() // 等待任务做完,在任务开始后调用 wq.Wait() */ // c 这个chan 表示数据 func donWorker6(id int, c chan in...阅读全文

博文 2019-12-18 12:32:43 爱吃豆包

goroutine、channel原理

goroutine原理 概念介绍 并发 ⼀个CPU上能同时执⾏多项任务,在很短时间内,CPU来回切换任务执⾏(在某段很短时间内执⾏程序a,然后⼜迅速得切换到程序b去执⾏),有时间上的重叠(宏观上是同时的,微观仍是顺序执⾏),这样看起来多个任务像是同时执⾏,这就是并发。 并⾏ 当系统有多个CPU时,每个CPU同⼀时刻都运⾏任务,互不抢占⾃⼰所在的CPU资源,同时进⾏,称为并⾏。 进程 CPU在切换程序的时候,如果不保存上⼀个程序的状态(context--上下⽂),直接切换下⼀个程序,就会丢失上⼀个程序的⼀系列状态,于是引⼊了进程这个概念,⽤以划分好程序运⾏时所需要的资源。因此进程就是⼀个程序运⾏时候的所需要的基本资源单位(也可以说是程序运⾏的⼀个实体)。 线程 CPU切换多个进程的时候,会花费...阅读全文

博文 2020-05-28 21:32:44 强某某

Golang的数据类型

基本数据类型整型:1.按长度:int8(-128-127)、int16、int32、int642.无符号整型:uint8(0-255)、uint16、uint32、uint64特殊整型:int: 32位操作系统上就是int32,64位操作系统上就是int64uint: 32位操作系统上就是uint32,64位操作系统上就是uint64浮点型:float32 float64复数类型:complex64和complex128布尔类型:bool字符串:stringbyte类型和rune类型byte 和 run...阅读全文

博文 2020-05-13 16:32:54 lghCode

一次UDP通迅的问题排查

通迅模型 (A-->B-->A):A通过UDP发送数据给B(A可以是指定目的地,也可以是广播发送消息给B),B收到消息后根据来源地址和端口向A回发消息,就这么简单的一个通迅过程。 关于golang udp方面的讲解可以参考下https://colobu.com/2016/10/19/Go-UDP-Programming/这篇文件,讲的挺详细。什么时候udp socket是connected状态,什么时候是unconnected状态,什么时候用read/write,什么时候用readFromUDP/writeToUDP都有说明,写的挺好。 来段code demo吧 服务端: func main() { // 创建监听 sock, err := net.ListenUDP("udp4", &ne...阅读全文

Golang | IO库

一、io 1、两个接口 Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出; Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作; 围绕io.Reader/Writer,有几个常用的实现: net.Conn, os.Stdin, os.File: 网络、标准输入输出、文件的流读取 strings.Reader: 把字符串抽象成Reader(类似流那样,这样就有各种API了) bytes.Reader: 把[]byte抽象成Reader bytes.Buffer: 把[]byte抽象成Reader和Writer bufio.Reader/Writer: 抽象成带缓冲的流读取(比如按行读写) 什么是流?流是一种数据的载体,...阅读全文

博文 2020-04-06 00:34:21 _Liu_

golang-channel

缓冲的 chan, make(chan int, 缓冲大小): 表示满了 缓冲大小后 就开始堵塞,无法在往 管道 塞入数据 不带缓冲区 chan,make(chan int) : 就是放入数据之后,没有取出这个数据就无法在继续放入数据 cap(ch1) 可以查看缓冲区长度 len(ch1) 可以查看缓冲区有多少未读的缓存数据 例子一 package main import ( "fmt" "time" ) // 理念:不要通过共享内存来通信;通过通信来共享内存 /** channel 例子一 channel 既然有了发送方, 就必须要有接收方!!! */ func worker(c chan int) { for { // 从 channel 里面获取数据,赋值给 n n := <-c fm...阅读全文