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

golang 中fmt用法

fmt 包中的函数和方法 本文转自Golang学习-fmt包: http://www.cnblogs.com/golove/p/3286303.html // format.go ------------------------------------------------------------ // Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入 w 中,返回写入的字节数 func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) // Printf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入...阅读全文

博文 2014-10-10 15:00:01 chenbaoke

Go 字符串格式化

Go对字符串格式化提供了良好的支持。下面我们看些常用的字符串格式化的例子。 package main import "fmt" import "os" type point struct { x, y int } func main() { // Go提供了几种打印格式,用来格式化一般的Go值,例如 // 下面的%v打印了一个point结构体的对象的值 p := point{1, 2} fmt.Printf("%v\n", p) // 如果所格式化的值是一个结构体对象,那么`%+v`的格式化输出 // 将包括结构体的成员名称和值 fmt.Printf("%+v\n", p) // `%#v`格式化输出将输出一个值的Go语法表示方式。 fmt.Printf("%#v\n", p) // 使用`...阅读全文

博文 2014-11-22 12:00:06 fer_ba

golang中io包用法(二)

本文转自https://github.com/polaris1119/The-Golang-Standard-Library-by-Example/blob/master/chapter01/01.1.md,并在此基础上进行修改. io 包为I/O原语提供了基本的接口。它主要包装了这些原语的已有实现。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户端不应假定它们对于并行执行是安全的。 在io包中最重要的是两个接口:Reader和Writer接口。本章所提到的各种IO包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有了IO的功能。 Reader接口 Reader接口的定义如下: type Reader interface { Read(p []byte) ...阅读全文

博文 2015-01-27 10:00:12 chenbaoke

golang 随机数

package main import "fmt" import "math/rand" func main() { //例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() //rand.Float64 返回一个64位浮点数 f,0.0 <= f <= 1.0。 fmt.Println(rand.Float64()) //这个技巧可以用来生成其他范围的随机浮点数,例如5.0 <= f <= 10.0 fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() ...阅读全文

博文 2015-04-21 03:00:00 benlightning

Golang -- 字节切片

Go 语言标准库 bytes ,实现了对字节数组的各种操作。 It is analogous to the facilities of strings package. (它和string 标准包提供的功能类似) 提供的功能如下; 字节切片 处理函数 基本处理函数 字节切片比较函数 前后缀检查函数 字节切片位置索引函数 分割函数 大小写处理函数 子字节切片处理函数 Buffer 对象 Reader 对象 字节切片处理函数 基本处理函数 共七个 Contains() 返回是否包含子切片 Count() 子切片非重叠实例的数量 Map() 函数,将byte 转化为Unicode,然后进行替换 Repeat() 将切片复制count此,返回这个新的切片 Replace() 将切片中的一部分 替换为...阅读全文

博文 2015-03-26 11:00:16 xiaorenwuzyh

golang 的time包之time

先看看有哪些类型 Time 时间类型,包含了秒和纳秒以及Location Month type Month int 月份.定义了十二个月的常量 Weekday type Weekday int 周,定义了一周的七天 Duration type Duration int64 持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候.可以直接传入time.Second const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hou...阅读全文

博文 2014-10-04 19:26:08 zhepama

Golang读写文件操作

最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使用正确的flag造成的。因此专门去学习了下Golang中读写文件的几种方式方法,在此记录下一些简单的操作,防止以后遗忘。 读文件 使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。 使用ioutil直接读取 需要引入io/ioutil包,该包默认拥有以下函数供用户调用。 func NopCloser(r io.Reader) io.ReadCloser func ReadAll(r io.Reader) ([]byte, error) func ReadDir(dirname string) ([]os.Fil...阅读全文

博文 2017-12-24 09:03:15 Andy-xu

Golang中操作[]byte类型的Trim函数

在Golang中字符串的一个坑这篇博文中,介绍了Golang中字符串与C中的字符串的不同之处:C中的字符串是以\x0为结尾的字节序列,而Golang中的字符串则更严格,并不是以\x0为结尾来判断,而是计算字符串变量的值中的所有字节。 Golang中的字符串在打印时,因为\x0是不可打印字符,所以和C中的字符串在打印时没有任何区别。但是在一些需要按字节计算字符串的函数中,就会导致问题。通用的做法是,迭代字符串,只取得字节序列中的有效字节。 我们可以写一个函数来做这件事情,也可以用Golang的标准库中的bytes库。bytes库提供了对[]byte类型的操作,提供的接口和对string类型提供的接口类似。 bytes提供了有Compare、Count、Equal、Index、Join、Spli...阅读全文

博文 2015-04-24 12:11:58 华子

golang的fmt包

package fmt import "fmt" mt包实现了类似C语言printf和scanf的格式化I/O。格式化verb('verb')源自C语言但更简单。 Printing verb: 通用: %v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名 %#v 值的Go语法表示 %T 值的类型的Go语法表示 %% 百分号 布尔值: %t 单词true或false 整数: %b 表示为二进制 %c 该值对应的unicode码值 %d 表示为十进制 %o 表示为八进制 %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示 %x 表示为十六进制,使用a-f %X 表示为十六进制,使用A-F %U 表示为Unicode格式:U+1234,等价于"U+%04...阅读全文

博文 2014-10-04 19:26:41 刘地

golang编程之时间编程

golang编程之时间编程 编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include 阅读全文

博文 2015-01-31 01:00:03 stephen830

Golang Aes 加密示例

Aes加密的一个示例。供各位参考. package main import ( "crypto/aes" "crypto/cipher" "fmt" ) func main() { aesEnc := AesEncrypt{} arrEncrypt, err := aesEnc.Encrypt("abcde") if err != nil { fmt.Println(arrEncrypt) return } strMsg, err := aesEnc.Decrypt(arrEncrypt) if err != nil { fmt.Println(arrEncrypt) return } fmt.Println(strMsg) } type AesEncrypt struct { } func...阅读全文

博文 2015-05-12 21:00:02 王岩0001

golang中获取字符串长度的几种方法

一、获取字符串长度的几种方法 - 使用 bytes.Count() 统计 - 使用 strings.Count() 统计 - 将字符串转换为 []rune 后调用 len 函数进行统计 - 使用 utf8.RuneCountInString() 统计 例: str:="HelloWord" l1:=len([]rune(str)) l2:=bytes.Count([]byte(str),nil)-1) l3:=strings.Count(str,"")-1 l4:=utf8.RuneCountInString(str) fmt.Println(l1)fmt.Println(l2)fmt.Println(l3)fmt.Println(l4)打印结果:都是 9 二、strings.Count函数...阅读全文

博文 2017-03-05 13:56:19 skh2015java

使用go语言复制文件

怎样使用go语言将文件复制成另一文件?go语言标准包io里提供一个简单的函数copy实现了这个功能,下面是一个例子。 //////////// package main import ( "fmt" "io" "os" ) func main() { CopyFile(os.Args[1], os.Args[2]) // os.Args[1]为目标文件,os.Args[2]为源文件 fmt.Println("复制完成",) } func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } defer src.Cl...阅读全文

博文 2014-10-24 12:00:01 学思

Golang strconv包使用

// atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str string) (value bool, err error) func main() { fmt.Println(strconv.ParseBool("1")) // true fmt.Println(strconv.ParseBool("t")) // true fmt.Println...阅读全文

博文 2015-07-29 15:00:01 路人甲777

Go学习笔记之基础数据类型

1 整数 在 Go 语言中,如果不加特殊前缀,都是10进制表示,例如:“100” 整数可以直接用指数形式,例如:“1E9”,意思是 1 * (10^9),1 乘以 10 的 9 次方 整数的加减法用 + 和 - 号,乘法用 * 号,除法用 / 号, 得到的商是整数,例如 5 / 2 = 2,而 % 号是求余(取模), 例如 5 % 2 = 1 在 Go语言中,整数类型分为带符号整型和不带符号整型,接着又分别按照长度各自划分为4个类型。 带符号整型 int8 int16 int32 int64 不带符号整型 uint8 uint16 uint32 uint 64 除此之外还有默认类型 int 和 uint,目前都是32位,未来可能会变成64位 还有2个特殊的整型别名 ,和字符串很相关,分别是:...阅读全文

博文 2014-10-12 21:00:11 hnxxwyq

Go语言圣经 2.2-浮点数

Go提供了两种size的浮点数,float32和float64。它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范。 浮点数能够表示的范围可以从很小到很巨大,这个极限值范围可以在math包中获取,math.MaxFloat32表示float32的最大值,大约是3.4e38,math.MaxFloat64大约是1.8e308,两个类型最小的非负值大约是1.4e-45和4.9e-324。 float32大约可以提供小数点后6位的精度,作为对比,float64可以提供小数点后15位的精度。通常情况应该优先选择float64,因此float32的精确度较低,在累积计算时误差扩散很快,而且float32能精确表达的最小正整数并不大,因为浮点数和整数的底层解释方式完全不同,具体见I...阅读全文

博文 2016-03-18 18:00:39 abv123456789

golang中net包用法(三)--TCP和UDP以及Unix domain socket

type TCPAddr //表示TCP终端地址 type TCPAddr struct { IP IP Port int Zone string // IPv6寻址范围 } func ResolveTCPAddr(net, addr string) (*TCPAddr, error)//将一个地址解析成TCP地址形式,形如"host:port"或 "[ipv6-host%zone]:port",解析得到网络域名和端口名.其中net必须是"tcp","tcp4"或者"tcp6",IPv6地址字面值/名称必须用方括号包起来,如"[::1]:80"、"[ipv6-host]:http"或"[ipv6-host%zone]:80". func (a *TCPAddr) Network() stri...阅读全文

博文 2015-06-18 19:00:33 chenbaoke

Go语言学习(十)bytes包处理字节切片

bytes包提供了对字节切片进行读写操作的一系列函数 字节切片处理的函数比较多,分为基本处理函数,比较函数,后缀检查函数,索引函数,分割函数, 大小写处理函数和子切片处理函数等. 1.字节切片基本处理函数api 1.1Contains()函数 //Contains()函数的功能是检查字节切片b是否包含子切片subslice,如果包含返回true,否则返回false. func Contains(b,subslice []bytes) bool 1.2Count()函数 //Count()函数的功能是计算字节切片sep在字节切片s中非重叠显示的个数. func Count(s,sep[]byte) int 1.3Repeat()函数 //Repeat()函数的功能是把切片b复制count个,然...阅读全文

博文 2016-04-02 20:00:06 mChenys

Go语言中的字符和字符串

Go语言中的字符 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称。 下面用一个简单的程序来演示字符类型: package main import ( "fmt" "reflect" ) func main() { r := '我' fmt.Printf("%q的类型为:%t 二进制为:%b\n", r, r, r) rType := reflect.TypeOf(r).Kind() fmt.Printf("r的实际类型为:%s\n", rType) } 程序输出: '我'的类型为:%!t(int32=25105) 二进制为:110001000010001 r的实际类型为:int32 Go语言天生支持Unicode,那我产生一个问题:Unicode字符的长度是多...阅读全文

博文 2014-12-30 22:00:02 rubyer

golang测试TCP最大连接数

受限于本地端口数的分配,我想看看本地能起到多少个TCP client连接 本测试用例client和server都部署在同一台linux虚拟机上 查看进程打开的描述符数:102400(10万) [root@bogon ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15042 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited o...阅读全文

博文 2015-10-27 13:00:03 webyh

golang 仿python pack/unpack

写得不完善也不完美 尤其是高低位转换那(go和c 二进制高地位相反 需要转换,还有go int转[]byte长度是4位),希望牛人看后指导一下 项目需要通过socket调取 客户端是go ,服务器端是python,由于需要封包解包,就参照python写的 python 的pack/unpack 参考 Python使用struct处理二进制(pack和unpack用法) package includes import ( "bytes" "encoding/binary" "fmt" _ "os" "strconv" "strings" ) type Protocol struct { Format []string } //封包 func (p *Protocol) Pack(args .....阅读全文

博文 2015-04-08 04:00:00 wangxusummer

悟空:用Go语言编写的全文搜索引擎

最近Go语言1.5版正式发布,国内关于Go语言的学习和应用也逐渐火热,InfoQ也将关注并推动国内Go语言社区的发展。悟空开源项目是用Go语言编写的全文搜索引擎,InfoQ记者采访了它的作者陈辉,了解了这个项目背后的一些信息。 悟空搜索引擎的特点是高度可定制,具有如下特性: 高效索引和搜索(1M条微博500M数据28秒索引完,1.65毫秒搜索响应时间,19K搜索QPS) 支持中文分词(使用作者自己研发的Go语言中文分词工具sego分词包并发分词,速度27MB/秒) 支持计算关键词在文本中的紧邻距离(token proximity) 支持计算BM25相关度 支持自定义评分字段和评分规则 支持在线添加、删除索引 支持持久存储 可实现分布式索引和搜索 采用对商业应用友好的Apache Licens...阅读全文

博文 2015-09-08 03:00:00 starliu

Go语言 字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样(java也是),字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 字符串操作 编码过程中避免不了中文字符,那我们该如何提取一个中文呢?首先我们要知道string[index]获取的是字符byte,就无法像C#中"老虞"[0]来取到‘老’,在Go中需要将字符串转换成r...阅读全文

博文 2014-10-30 03:00:01 ghgyj

Go语言学习(四)常用类型介绍

1.布尔类型 var v1 bool v1 = true; v2 := (1==2) // v2也会被推导为bool类型 2.整型 类 型 长度(字节) 值 范 围 int8 1  128 ~ 127 uint8(即byte)1 0 ~ 255 int16 2  32 768 ~ 32 767 uint16 2 0 ~ 65 535 int32 4  2 147 483 648 ~ 2 147 483 647 uint32 4 0 ~ 4 294 967 295 int64 8  9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 uint64 8 0 ~ 18 446 744 073 709 551 615 int 平台相关 ...阅读全文

博文 2016-04-02 14:00:00 mChenys

分布式文件系统 SeaweedFS

SeaweedFS 是简单,高伸缩性的分布式文件系统,包含两部分:存储数十亿的文件;快速为文件服务。SeaweedFS 作为支持全 POSIX 文件系统语义替代,Seaweed-FS 选择仅实现 key-file 的映射,类似 "NoSQL",也可以说是 "NoFS"。 SeaweedFS 仅花费 40 字节的硬盘来存储每个文件的元数据。 基准测试基于 Mac Book,固态硬盘,CPU:1 Intel Core i7 2.6GHz。 编写 1 百万的 1KB 文件:

Concurrency Level:      16
Time taken for tests:   88.796 seconds
Complete requests:  ...阅读全文

golang的slice作为函数参数传值的坑

直接贴代码 func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, 6) } func main() { slice := []int{1, 2, 3, 4, 5} sliceModify(slice) fmt.Println(slice) } 返回的没变,坑爹的,这个设计太那啥了,可以正确跑出效果的版本如下: func sliceModify(slice *[]int) { *slice = append(*slice, 6) } func main() { slice := []int{1, 2, 3, 4, 5} sliceModify(&slice) fmt.Println(slice) ...阅读全文

博文 2014-10-04 19:26:12 ziyouchutuwenwu

golang 中io包用法(一)

本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些原语的已有实现,如 os 包中的那些,抽象成函数性的共享公共接口,加上一些其它相关的原语。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户不应假定它们对于并行执行是安全的。 在io包中最重要的是两个接口:Reader和Writer接口,首先来介绍这两个接口. type Reader interface { Read(p []byte) (n int, err error) } Reader 接口包装了基本的 Read 方法。 Read 将 len(p) 个字节读取到 p 中...阅读全文

博文 2015-06-19 01:00:27 chenbaoke

golang的io包

package io import "io" io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Index Variables type Reader type Writer type Closer type Seeker type ReadCloser type ReadSeeker type WriteCloser type WriteSeeker type ReadWriter type ReadWriteCloser type Read...阅读全文

博文 2014-10-04 19:26:40 刘地

Go语言 整数和浮点数性能对比

我们团队使用Go来开发游戏服务端,游戏服务端的战斗逻辑避免不了各种计算,C的编程经验告诉我们整数运算效率比浮点运算高,但是在Go语言中,这两种数据类型的运算效率到底差多少呢?是否有必要把浮点数转换成整数的万分数或者千分数进行运算呢?下面通过实验来对比。 实验代码(github): package labs05 import "testing" func Benchmark_IntAdd(b *testing.B) { var a = 0 for i := 0; i < b.N; i++ { a += 1 } } func Benchmark_Int8Add(b *testing.B) { var a int8 = 0 for i := 0; i < b.N; i++ { a += 1 } }...阅读全文

博文 2015-06-17 23:01:27 abv123456789

Go 语言的基本数据类型

Go 语言的基本数据类型 0)变量声明 var 变量名字 类型 = 表达式 例: var num int = 10 其中“类型”或“= 表达式”两个部分可以省略其中的一个。 1)根据初始化表达式来推导类型信息 2)默认值初始化为0。 例: var num int // var num int = 0 var num = 10 // var num int = 10 1)整型 1.1)整型类型 类型名称有无符号bit数 int8 Yes 8 int16 Yes 16 int32 Yes 32 int64 Yes 64 uint8 No 8 uint16 No 16 uint32 No 32 uint64 No 64 int Yes 等于cpu位数 uint No 等于cpu位数 rune Ye...阅读全文

博文 2016-09-08 12:00:01 fengbohello

golang中的时间和时区

先写一段测试代码: const TIME_LAYOUT = "2006-01-02 15:04:05" func parseWithLocation(name string, timeStr string) (time.Time, error) { locationName := name if l, err := time.LoadLocation(locationName); err != nil { println(err.Error()) return time.Time{}, err } else { lt, _ := time.ParseInLocation(TIME_LAYOUT, timeStr, l) fmt.Println(locationName, lt) return...阅读全文

博文 2018-09-19 19:34:40 云上听风

记一次golang gc优化过程

我们使用golang编写的线上服务,通常会设置一个golang runtime指标监控,包括goroutine num、gc num、gc pause 等等。最近的一次上线,发现 gc 相关的指标出现异常,gc num 和 gc pause 大幅升高。由于 golang 的 gc 是 stop the world 来做, gc 过多会抢占程序的正常执行时间,甚至影响对外提供的服务,因此暂停了上线,准备先把 gc 的问题修复下。 出问题时的 gc 监控如下: image.png 其中蓝色曲线表示 gc num,黄色曲线表示 gc pause(单位ms),两个指标都是30s的累计数据。可以看到每30s的pause达到了秒级别。 登录到线上机器,通过 go tool pprof --alloc_o...阅读全文

博文 2017-09-25 12:34:48 zippera

Go语言 时间处理详解

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include time_t n...阅读全文

博文 2015-06-17 20:05:17 abv123456789

go语言之整形和字节数组的转换

go语言之整形和字节数组的转换 //整形转换成字节 func IntToBytes(n int) []byte { tmp := int32(n) bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, tmp) return bytesBuffer.Bytes() } //字节转换成整形 func BytesToInt(b []byte) int { bytesBuffer := bytes.NewBuffer(b) var tmp int32 bin...阅读全文

博文 2015-06-17 23:01:43 bojie5744

golang(Go语言) byte/[]byte 与 二进制形式字符串 互转

效果 把某个字节或字节数组转换成字符串01的形式,一个字节用8个”0”或”1”字符表示。比如: byte(3) –> “00000011” []byte{1,2,3} –> “[00000001 00000010 00000011]” “[00000011 10000000]” –> []byte{0x3, 0x80} 开源库 biu 实际上我已经将其封装到一个开源库了(biu),其中的一个功能就能达到上述效果: //byte/[]byte -> string bs := []byte{1, 2, 3} s := biu.BytesToBinaryString(bs) fmt.Println(s) //[00000001 00000010 00000011] fmt.Println(biu....阅读全文

博文 2016-10-03 04:00:02 QQ245671051

Go语言圣经 2.3-复数

Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部:var x complex128 = complex(1, 2) // 1+2i var y complex128 = complex(3, 4) // 3+4i fmt.Println(x*y) // "(-5+10i)" fmt.Println(real(x*y)) // "-5" fmt.Println(imag(x*y)) // "10" 如果一个浮点数的字面量后面跟着一个i,例如3.141592i或2i,那么它将变成一个复数的虚部,这个复数的实部是0:fmt.Print...阅读全文

博文 2016-03-19 03:00:02 abv123456789

golang类型转换

golang是强类型语言,在应用过程中类型转换基本都会用到。下面整理一下常用的类型转换,会持续更新。 整形转字符串 fmt.Println(strconv.Itoa(100)) 该方法的源码是: // Itoa is shorthand for FormatInt(i, 10). func Itoa(i int) string { return FormatInt(int64(i), 10) } 可以看出是FormatInt方法的简单实现。 字符串转整形 i, _ := strconv.Atoi("100") fmt.Println(i) 64位整形转字符串 var i int64 i = 0x100 fmt.Println(strconv.FormatInt(i, 10)) FormatI...阅读全文

博文 2015-10-14 13:53:14 陈杰斌

老虞学GoLang笔记-字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样,字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 字符串操作 编码过程中避免不了中文字符,那我们该如何提取一个中文呢?首先我们要知道string[index]获取的是字符byte,就无法像C#中"老虞"[0]来取到‘老’,在Go中需要将字符串转换成rune数组,ru...阅读全文

博文 2015-07-21 15:00:00 Gopher老虞

golang reflect

reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值 type package main import ( "reflect" "fmt" ) type lx interface { SayHi() } type User struct { Name string Age int64 Sex string } func (u *User) SayHi() { fmt.Println("hello world") } f...阅读全文

博文 2015-10-05 10:00:04 别人说我名字很长

socket 接收数据 read 读取到字节数组的疑问

Receivebag := make([]byte, 1500) //数据包接收区 k, err := conn.Read(Receivebag) socket 通讯中接收到的数据包怎么会出现异常呢?比如说 发送端发送的是 0x01 0x02 0x03 0x04 但是我接收的时候有时候接受到的某个数据包最后一个字节会出现异常,我接收到的数据变成了 0x01 0x02 0x03 0x?? 每次出现这种问题的时候都是最后一个字节异常了,百思不得其解为什么会这样,求指教 谢谢@polari...阅读全文

go int 和 []byte互相转化

1,Int2Byte 把int的每个字节取出来放入byte数组中,存储采用Littledian2,Byte2Int 把byte Slice 中的每个字节取出来, 按Littledian端拼成一个intfunc Int2Byte(data int)(ret []byte){ var len uintptr = unsafe.Sizeof(data) ret = make([]byte, len) var tmp int = 0xff var index uint = 0 for index=0; index>(index*8)) } return ret } func ...阅读全文

博文 2017-08-06 03:59:04 jinjiashan

Golang 中 strings.builder 的 7 个要点

自从 Go 1.10 发布的一个月以来,我多少使用了一下 `strings.Builder`,略有心得。你也许知道它,特别是你了解 `bytes.Buffer` 的话。所以我在此分享一下我的心得,并希望能对你有所帮助。 ## 1. 4 类写入(write)方法 与 `bytes.Buffer` 类似,`strings.Builder` 也支持 4 类方法将数据写入 builder 中。 ```go func (b *Builder) Write(p []byte) (int, error) func (b *Builder) WriteByte(c byte) error func (b *Builder) WriteRune(r rune) (int, error) func (b *Bu...阅读全文

博文 2018-04-14 10:58:21 snowInPluto

[go] unsafe包

uintptr是go的内置类型,用于指针运算,其底层基于int类型。uintptr不是指针,GC会回收uintptr类型的对象。 unsafe.Sizeof unsafe.Sizeof函数返回的就是uintptr类型的值(表达式,即值的大小): var p float64 = 99 fmt.Println(reflect.TypeOf(unsafe.Sizeof(p))) fmt.Println(unsafe.Sizeof(p)) >>> uintptr >>> 8 unsafe.Sizeof接受任意类型的值(表达式),返回其占用的字节数,在上面的例子中float64的大小是8bytes。 如果传入一个指针类型的对象会返回多少呢? type W struct { a byte b int32...阅读全文

博文 2016-04-25 14:00:00 cc7756789w

golang printf中的%c,%d,%u.都分别代表输出的是什么类型的?

%表示格式化字符串输出目前printf支持以下格式的输出,例如:printf("%c",a);输出单个字符。printf("%d",a);输出十进制整数。printf("%f",a);输出十进制浮点数.printf("%o",a);输出八进制数。printf("%s",a);输出字符串。printf("%u",a);输出无符号十进制数。printf("%x",a);输出十六进制数...阅读全文

博文 2017-07-10 08:07:47 Robinbing

go圣经笔记--第三章

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型。 3.1. 整型 1)固定大小,int8、int16、int32和int64,分别对应8、16、32、64bit大小的有符号整形数,与此对应的是uint8、uint16、uint32和uint64四种无符号整形数类型。 2)不固定大小,int和uint,分别对应32或64bit 3)Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使用。同样byte也是uint8类型的等价类型。 4)还有一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。 5)运算符 算术运算符+、-、*和/可以适用与于整数、浮点数和复数,但是取模运算符%仅用于整数间的运...阅读全文

博文 2016-04-15 12:00:01 betterjun30

go语言中int和byte转换

主机字节序 主机字节序模式有两种,大端数据模式和小端数据模式,在网络编程中应注意这两者的区别,以保证数据处理的正确性;例如网络的数据是以大端数据模式进行交互,而我们的主机大多数以小端模式处理,如果不转换,数据会混乱 参考;一般来说,两个主机在网络通信需要经过如下转换过程:主机字节序 —> 网络字节序 -> 主机字节序 大端小端区别 大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端 低地址 --------------------> 高地址 高位字节 地位字节 小端模式:Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端 低地址 --------------------> 高地址 低位字节 高位字节 什么是高位字...阅读全文

博文 2018-11-11 12:34:39 wuzhc

用go语言读写通达信的日线数据

最近行情火爆,想利用go语言导入通达信软件的日线数据,做一些数据分析。初步完成的代码如下: 通达信日K线资料是存在 C:\new_gxzq_v6\Vipdoc\sh\lday(上海股票) C:\new_gxzq_v6\Vipdoc\sz\lday (深圳股票)两个地方,文件是以DAY为扩展名的。文件是以二进制格式存放。 每天的记录为32个字节。 * 以深发展1997年1月2日的数据为例: * 00000000h: 36 B8 30 01 72 06 00 00 86 06 00 00 60 06 00 00 ; * 00000010h: 72 06 00 00 77 69 D4 4C 68 FE 66 00 74 06 00 00 ; * 以下是分解 00000000...阅读全文