golang相关知识总结

实数

三个语句效果一样:

days := 365.2425

var days=365.2425

var days float64 = 365.2425 //只要含有小数部分,那么它的类型就是浮点类型float64

浮点类型

float64(双精度):64位、8字节、double(默认)。math操作的都是这种,首选!

float32(单精度):32位、4字节、单精度。应用于处理大量数据

如果数是指数形式,默认是float64

零值

未赋值默认是零

打印

Print、Println:尽可能的多显示几位小数

Printf:格式化输出,

fmt.Printf("%v\n",an) %v:通用格式。%f:浮点。 %.3f:小数后三位。

%T:打印数据类型。

%x:打印十六进制

%4.3f:小数点后三位,总体长度最少4位(包括小数点)不足则左边填充空格,超过不舍弃

%04.3f:小数点后三位,总体长度最少4位(包括小数点)不足则左边填充0,超过不舍弃

%b:打印二进制。 %08b:宽度8位

an:=32

fmt.Print(an+32,"F\n") //64F

%+v:把字段名显示出来

浮点类型精度不准

a:=0.1

a+=0.2

fmt.Println(a==0.3) //false

fmt.Println(math.Abs(a-0.3)<0.0001) //true

go cap和len的区别

首先要搞清楚容量和长度的区别:

容量是指底层数组的大小,长度指可以使用的大小

容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否则,go 会新申请一个底层数组,拷贝这边的值过去,把原来的数组丢掉。也就是说,容量的用途是:在数据拷贝和内存申请的消耗与内存占用之间提供一个权衡。

而长度,则是为了帮助你限制切片可用成员的数量,提供边界查询的。所以用 make 申请好空间后,需要注意不要越界【越 len 】

整数类型

10种类型,取值范围有8种

有符号:int 可能是32位或者64位

无符号:uint可能是32位或者64位

大量数据用int64 uint 64。uint8表示颜色

Int8:-128-127

math.MaxInt16 //只针对于架构无关的

math.MinInt64

整数环绕

var m uint8=255//0-255

m++

fmt.Println(m) //0

十六进制

var b uint8= 0x00

time

future:=time.Unix(176362383612.0) //该时间到1970.1.1的秒数

math

b:=math.Trunc(a/10) //若a=18则b=1

os

os.Exit():程序退出

encoding/json

json 包的 Marshal 函数可以将 struct 中的数据转化为 JSON 格式。(例子 21.9)

•Marshal 函数只会对 struct 中被导出的字段(只有大写字母才能被导出)进行编码。

很大数

int64——》uint64--〉--》float64--〉big包

如果数是指数形式,默认是float64

big包

big.Int:较大的整数

a=big.NewInt(2828) //int64-->big,但括号内的数可能超过int64

所以:

a:=new(big.Int)

a.SetString("2828282828288282828",10) //10表示10进制

a.Div(a,b) //a=a/b

等式两边都为big.Int

big.Float:任意精度

big.Rat:分数

较大数值的常量

比较大的数直接使用

const distance= 99 //untyped 无类型

const di uint64 = 99 //uint64

类型间转换

连接两个字符串,使用+运算符号,但+前后类型须一致

整型和浮点型也不能混着用

a:=2

b:=float64(a)

无符号和有符号 不同大小 的整数类型之间需要转换

字符串转换

想把数值转换为string,前提是能转换为code point--》

  1. strconv.Itoa(a)

  2. Sprintf会返回一个string,相当于转成字符串

  3. a, err := strconv.Atoi("10")

    if err!= nil{ //nil相当于null,如果为nil相当于没错误

    fmt.Println(err.Error())

    }

布尔类型的转换

不能使用string(false) int(false) bool(1) bool("tesm")

1和0不是true或false

函数

声明使用func关键字,函数的参数可以多个参数

func Intn(n int) int

调用:1.包名.函数名(实参)

2.同一个包下直接:函数名(实参)

其他包可以调用大些开头的函数、变量或其他标志符

函数的参数如果多个参数类型都一样:func Ab(a,b int64) Time

函数的返回值也可以多个:func Atoi(s string) (i int, err error) 或func Atoi(s string) (int, error)

fmt.Println(a...interface{}) (n int ,err error) : ...表示参数数量可变 a的类型为interface{},为空接口,所有类型都实现这个,所以可以接受任何类型的参数

->fmt.Println(18,"seconds")

方法

type声明新类型

type a float64

var b a=20 //b为float64类型,a为类型别名

不同类型无法混用:var c float64 =10

b+=c //报错

type a float64

type e float64

关联:func (k a) d() e{

} //(k a) :只能有一个接收者,但不能是int float64等预类型, d():方法名,可以加参数或者不加

关联方法的调用:

var f a=20

g=f.d()

一等函数

函数遇到小括号才执行

声明函数类型

•为函数声明类型有助于精简和明确调用者的代码。

•例如:type sensor func() kelvin

•所以:func measureTemperature(samples int, s func() kelvin)

•可以精简为:func measureTemperature(samples int, s sensor)

闭包和匿名函数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值