golang-基础知识点笔记

Go init函数详解

init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。init 函数通常被用来:

  • 对变量进行初始化
  • 检查/修复程序的状态
  • 注册
  • 运行一次计算
  •  即使包被导入多次,初始化只需要一次。
  • init函数不需要传入参数,也不会返回任何值。与main相比而言,init没有被声明,因此也不能被引用

Go包导入规则的副作用

Go要求非常严格,不允许引用不使用的包。但是有时你引用包只是为了调用init函数去做一些初始化工作。此时空标识符(也就是下划线)的作用就是为了解决这个问题。

import _ "image/png"

golang中&^位清空操作

c = a &^ b:功能同a&(^b)相同,将运算符左边数据相异的位保留,相同位清零。


数据类型转换(strconv包)

Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。

strconv包提供了简单数据类型之间的类型转换功能。可以将简单类型转换为字符串,也可以将字符串转换为其它简单类型。

  • 字符串转int:Atoi()
  • int转字符串: Itoa()
  • ParseTP类函数将string转换为TP类型:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。因为string转其它类型可能会失败,所以这些函数都有第二个返回值表示是否转换成功
  • 其它类型转string类型:FormatBool()、FormatFloat()、FormatInt()、FormatUint()
  • AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、AppendFloat()、AppendInt()、AppendUint() 
  • ParseFloat()只能接收float64类型的浮点数
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

ParseInt()和ParseUint()有3个参数

bitSize参数表示转换为什么位的int/uint,有效值为0、8、16、32、64。当bitSize=0的时候,表示转换为int或uint类型。例如bitSize=8表示转换后的值的类型为int8或uint8。

base参数表示以什么进制的方式去解析给定的字符串,有效值为0、2-36。当base=0的时候,表示根据string的前缀来判断以什么进制去解析:0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析。

FormatInt()和FormatUint()有两个参数:

func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string
fmt.Println(strconv.Atoi("1"))
fmt.Println(strconv.Itoa(132))
fmt.Println(strconv.ParseBool("true"))
fmt.Println(strconv.ParseInt("12304", 8, 64))
fmt.Println(strconv.ParseInt("-42", 10, 64))
fmt.Println(strconv.FormatInt(-42, 16))

// 声明一个slice
b10 := []byte("int (base 10):")
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))

b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16)) 



golang-socket链接
golang相关博客链接