go语言(基础知识)

go语言(基础知识),第1张

1. 基本数据的转换 Go在不同类型的变量之间赋值时需要显示转换,即golang中数据类型不能自动转换;被转换的是变量存储的数据(值),变量本身的数据类型没有变化;范围小向范围大转换时,按溢出处理,不会报错 2. 常见的引用类型与值类型 值类型: int, float, bool, string, 数组, 结构体struct引用类型:指针、slice切片, map, 管道chan, interface 3. 标识符注意事项 下划线"_" 本身是一个特殊的标识符,用于忽略某个返回值;int, float系列不是系统保留关键字,可作为标识符,但不推荐;变量名、函数名、常量名首字母大写,则可以被其他的包访问,首字母小写,则只能在本包中使用;系统保留关键字有25个,预定标识符为36个。 4. 原码,反码及补码 二进制的最高位是符号位,0表示正数,1表示负数;正数的原码,反码,补码都一样;负数的反码 = 它的原码符号位不变,其它位取反;负数的补码 = 它的反码 + 1;0的反码、补码都是0;在计算机运算的时候,都是以补码的方式来计算的。 5. 易漏运算符 异或运算符^ 对应位不同结果为1,否则为0右移运算符>> 低位溢出,符号位不变,并用符号位补溢出的高位左移运算符<< 符号位不变,低位补0 6. break与continue区别 break用于终止某个语句块的执行,用于终端当前for循环或跳出switch语句continue语句用于结束本次循环,继续执行下一循环 7. 函数的注意事项 go语言不支持函数重载(指函数名相同,但形参数目或类型不同)在go中,函数本身也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用函数既然是一种数据类型,因此在go中,函数可以作为形参,并且被调用 8. 关于init的面试题 如果main.go和utils.go都含有变量定义,init函数时,执行的流程为utils.go: 变量定义 - init函数 -main.go: 变量定义 - init函数 - main函数 9.匿名函数:没有名字的函数 如果某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可实现多次调用(将匿名函数赋给一个变量) 10.闭包:一个函数和其相关的引用环境组合的一个整体(实体)
var n int = 10
return func(x int) int{
       n = n + x
       return n
}
如上代码块,返回的是一个匿名函数,但是这个匿名函数引用到函数外的n,因此这个匿名函数就和n形成一个整体,构成闭包说明:当我们反复的调用f函数时,因为n是初始化一次,因此每调用一次就进行累计,体现出闭包的优越性 11.defer 当执行到defer时,会将defer后面的语句压入到独立的栈(defer栈),当函数执行完毕后,再从defer栈,按照先入后出的方式出栈,执行 12.字符串中常用的系统函数 字符串转整数
n, err := strconv.Atoi("12")
整数转字符串
str := strconv.Itoa("12")
字符串转 []byte
var bytes = []byte("hello go")
[]byte转字符串
str = string([]byte{97,98,99})
10进制转2,8,16进制
str = strconv.FormatInt(123, 2) //2->8,16

*查找子串是否在指定的字符串中

strings.Contains ("seafood", "food") //true

*统计一个字符串有几个指定的子串

strings.Count ("ceheese", "e") //4

*不区分大小写的字符串比较(==是区分大小写的)

strings.EqualFold ("abc", "ABC") //true

*返回子串在字符串第一次出现的index值,如果没有返回-1

strings.Index("NLT_abc", "abc") //4

*返回子串在字符串最后一次出现的index值,如果没有返回-1

strings.LastIndex("go golang", "go") //3

*将指定的子串替换成另一个子串,n可以指定你希望替换几个,n=-1表示全部替换

strings.Replace("go golang", "go","go语言",n) //3

*按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组

strings.Split("NLT_abc,123,ok", ",") 
*将字符串的字母进行大小写的转换
```go
strings.ToLower("GO")  //go
strings.ToUpper("gO")  //GO
13.内置函数new和make的区别 new: 用来分配内存,主要是用来分配值类型,比如int,float, struct返回的是指针make: 用来分配内存,主要用来分配引用类型,比如channel, map, slice 14. 错误处理机制 使用defer+recover处理错误,好处:进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加的健壮自定义错误,使用errors.New和panic内置函数(输出错误信息,并退出程序) 15.map map的key必须是可比较的类型,因此key不能是slice、map、function类型删除使用delete(map, “key”),如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历key,逐个删除;或者map= make(…), make一个新的,让原来的称为垃圾,被gc回收查找, 若ok为true,则cities存在”no1"这个key,值为val; ok为false表示没有
val, ok := cities["no1"]
map的容量达到后,再向map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对 16.JSON json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写。同时也易于机器解析和生成在编程语言中,一切都是对象。因此,任何的数据类型都可以通过Json来表示,例如字符串、数字、对象、数组、map、结构体等 17. 单元测试 测试用例文件名必须以_test.go结尾。比如cal_test.go,cal不是固定的测试用例函数必须以Test开头,一般来说就是Test+被测试的函数名,比如TestAddUpperTestAddUpper (t testing.T)的形参类型必须是testing.T一个测试用例文件中,可以有多个测试函数

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/995680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存