golang中builtin包说明
builtin包是go的预声明定义,包括go语言中常用的各种类型和方法声明,包括变量和常量两部分.其详细声明在builtin.go文件中,链接:http://golang.org/src/builtin/builtin.go
首先介绍一下golang中常量.
常量:
const (true = 0 == 0 // Untyped bool.false = 0 != 0 // Untyped bool. )
true和false是两个无类型的bool值
const iota = 0 // Untyped int.无类型int
iota是预声明标示符,它只能用在常量声明中,并且其值从0开始,在const中每新增一行将使得iota计数一次,即iota自己增长1(从这点来看,iota可以看成const块中的行索引,记录行数),其值一直自增1直到遇到下一个const关键字,其值才被重新置为0.
1在常量声明中,如果一个常量没有赋值,则他就跟上一行的赋值相同,这个可以用在如果多个常量其值相同时,则只需给1个常量赋值,其他常量跟在他后面即可.
package main
import ("fmt"
)
const (a = iota //iota默认初始值为0b = 100c //c默认跟上一个赋值相同d = iota //iota默认每行加1,故此时其值为3
)
func main() {fmt.Println(a, b, c, d)
}
运行结果: 0 100 100 3
2在变量声明中,每新增一行,iota值采增加1,如果多个变量在一行中声明,iota值只增加1次
package mainimport ("fmt"
)
const (a = iotab, c = iota, iotad = iota
)
func main() {fmt.Println(a, b, c, d)
}
运行结果:0 1 1 2
3iota遇到下一个const关键字,其值重新被赋值为0
package mainimport ("fmt"
)const (a = iotab, c = iota, iotad = iota
)
const e = iota //再次遇到const关键字,iota值变为0func main() {fmt.Println(a, b, c, d, e)
}
运行结果:0 1 1 2 0
4常量定义方式: const 名字[数据类型]=表达式,其中数据类型可有可无,但是使用数据类型时其必须注意:两个带类型常量不能写在同一行,带类型常量必须赋值,不能为空,如下所示:
const (a = 1
d int //错误b int, c int = 1, 1 //错误)
正确写法如下:
const (a int = 1d intb, c = 1, 1
)
所以在定义const常量时,除非特别强调常量类型,否则可以不带数据类型.
变量:
func append(slice []Type, elems ...Type) []Type
其使用有两种方式:
slice = append(slice, elem1, elem2) //直接在slice后面添加单个元素,添加元素类型可以和slice相同,也可以不同 slice = append(slice, anotherSlice...) //直接将另外一个slice添加到slice后面,但其本质还是将anotherSlice中的元素一个一个添加到slice中,和第一种方式类似.
作为一种特殊情况,将字符串添加到字节数组之后是合法的.
package mainimport ("fmt"
)func main() {slice := append([]byte("hello "), "world"...) //其实考虑一下,这也是很正常的,因为在go中[]byte和string是可以直接相互转换的.fmt.Println(string(slice))
}
运行结果:hello world
func len(v Type) int
len()是go中使用频率比较高的一个函数,其用来返回Type v的length,其对应的类型以及返回的值如下:
数组:数组长度 数组指针:数组长度 slice/map:slice 或者map中元素个数 string:字符串中字节数 channel:通道中现有数量
func cap(v Type) int
cap()返回的是容器的容量,有时候和len()返回的值是不同的,其对应的类型和返回情况如下:
数组:数组长度 数组指针:数组长度 slice:slice重新分配后能够达到最大长度 channel:分配channel中缓存的大小
通过对比我们可以看到,在面对数组类型以及数组指针时,len和cap的值都是一样的,都是数组长度.
异同点:cap不支持map,string类型.而在slice 和channel,二者获取的值也是不同的,len取得的是现有值,而cap取得的是最大值.例子如下:
package mainimport ("fmt"
)func main() {a := make(chan int, 10)fmt.Println(cap(a)) //10fmt.Println(len(a)) //0b := make([]int, 2)b = append(b, 1)fmt.Println(len(b)) //3fmt.Println(cap(b)) //4
}
运行结果:10 0 3 4
func close(c chan<- Type)
close()只能用来关闭channel,并且其只能在发送端关闭,不能在接受端关闭.具体参见http://blog.csdn.net/chenbaoke/article/details/41647865
func complex(r, i FloatType) ComplexType //将两个浮点数类型转换为一个复数,其中实部和虚部二者类型必须一致,并且只能为float32和float64的一种
func imag(c ComplexType) FloatType //获取复数的虚部
func real(c ComplexType) FloatType //获取复数的实部
package mainimport ("fmt"
)
func main() {a := complex(1, 2)b := imag(a)c := real(a)fmt.Println(a, b, c)
}
运行结果:(1+2i) 2 1
func copy(dst, src []Type) int
copy实现两个slice之间的复制,其中复制的长度是dst和src中长度比较小的长度,返回的也是比较小的长度,copy过程中允许覆盖.
package mainimport ("fmt"
)func main() {a := make([]int, 1)b := []int{1, 2}c := copy(a, b) //由于a的大小为1,所以b只给a复制了1个元素1,并且返回c的长度也是1fmt.Println(a, b, c)
}
运行结果:[1] [1 2] 1
func delete(m map[Type]Type1, key Type)
从map中删除相应的元素,如果无此key,则不做任何操作
func make(Type, size IntegerType) Type
只能用于map,slice,channel
func new(Type) *Type //初始化对象并返回一个指向对象的指针
func panic(v interface{}) //停止goroutine执行,先执行defer函数,待defer函数执行完,将出错信息向其panic调用者传递panic相关信息.
func recover() interface{} //defer函数中通过recover获取panic调用的错误信息,并恢复正常执行.如果没有panic,则recover会返回nil.
func print(args ...Type)
func println(args ...Type) //暂时没有明白其用法
type ComplexType //表示所有的复数类型complex64 或 complex128
type FloatType //表示所有的浮点类型:float32 或 float64
type IntegerType
type Type
type Type1
type bool
type byte //等价与uinit8,习惯上用它来区分字节值和8位无符号整数
type complex128
type complex64
type error
type float32
type float64
type int //带符号整型,其大小与机器总线数量有关,但是他是一种具体的类型,而不是int32或者int64的别名.
type int16
type int32
type int64
type int8
type rune //int32别名,习惯上用它来区分字符值和整数值
type string //8位字节的字符串合集,string可为空,但是不能为nil,不能够对string进行修改.
type uint
type uint16
type uint32
type uint64
type uint8
type uintptr //其为整数类型,其大小足以容纳任何指针的位模式.
var nil Type //nil只能表示指针,channel,函数,interface,map或者slice类型,不能够表示其他类型.
参考:http://golang.org/pkg/builtin/
golang中builtin包说明相关推荐
- golang中的包管理工具——govendor和godep简单学习
为什么用vendor目录 依赖问题 我们知道,一个工程稍大一点,通常会依赖各种各样的包.而Go使用统一的GOPATH管理依赖包,且每个包仅保留一个版本.而不同的依赖包由各自的版本工具独立管理,所以当所 ...
- golang 中regexp包用法
本文转自Golove博客:http://www.cnblogs.com/golove/p/3270918.html regexp 包中的函数和方法 目录 1.判断在 []byte 中能否找到正则表达式 ...
- Golang中time包
转载自https://studygolang.com/articles/4331 time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const ( ANSIC ...
- php_os用法,golang中os包用法
os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...
- golang 中io包用法(一)
本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些 ...
- golang 中 signal 包的 Notify 函数用法介绍
函数声明为: func Notify(c chan<- os.Signal, sig ...os.Signal) 官方描述: Notify函数让signal包将输入信号转发到c.如果没有列出要传 ...
- Golang中path包和filepath包使用方法
path path实现了对斜杠"/"分隔的路径的实用操作函数. path.Base --获取文件名 func Base(path string) string Base函数返回路径 ...
- golang中time包用法
time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const (ANSIC = "Mon Jan _2 15:04:05 2006"Uni ...
- golang 中 strings 包的 Replace 用法介绍
函数声明为: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替 ...
最新文章
- Docker基本命令汇总
- python tqdm包_python tqdm库的使用
- 网络营销专员浅析网络营销过程中如何做好网站权重流量的优化
- 【MM系列】SAP 簇表 A017 物料信息记录 (指定工厂) 包含的透明表
- Anaconda安装和使用指南教程:环境管理、包管理、离线安装第三方包
- 剑指 Offer II 014. 字符串中的变位词
- SAP Spartacus和Table相关的配置结构ResponsiveTableConfiguration
- LeetCode MySQL 1821. 寻找今年具有正收入的客户
- Objective-C 日记③ 字符串
- 字符串处理 —— 模拟与暴力
- [转]Oracle中字符集的类型决定varchar2的字符长度
- 学生信息管理系统问题集锦(一)
- 中国特威兹勒行业市场供需与战略研究报告
- 使用新操作码在比特币现金上进行首次原子竞猜
- 「小程序JAVA实战」小程序开源搜索组件(53)
- java实践_java基础实践
- 【优化布局】基于matlab GUI遗传算法求解PCB元器件布局优化问题【含Matlab源码 694期】
- 财经管理中的计算机应用 课后答案,财经管理中的计算机应用
- 用 cmd 查询硬盘序列号、笔记本电脑序列号、主板型号、电脑配置、WiFi 密码
- 爱奇艺涨价背后,还有四步大棋