原站地址:Go语言核心36讲_Golang_Go语言-极客时间
1. 两种声明变量方式的差异:
短变量声明 name := "abc" 只能在函数体内部使用。
var name = "abc" 这方式才可以用在所有地方。
2. 类型推断有什么好处? 代码重构时更方便,只要修改一处定义数据类型的代码,其他位置的数据类型都会自动推断。
3. 变量的重声明是什么?有什么好处?
var err error
n, err := io.WriteString(os.Stdout, "Hello, everyone!\n")
err 被声明了两次,这就是重声明。好处是可以重复使用同一个变量名,拷贝代码方便。
4. 重声明 有什么限制条件?
(1) 再次声明时的数据类型不能改变。
(2) 需要使用短变量声明。
(3) 声明并赋值的变量必须有多个,并且至少要有一个是新的变量
5. 具有嵌套关系的不同代码块间,存在重名的变量
(1) 可以编译通过,内层代码块中,会使用内层的变量,屏蔽掉外层的。
(2) 内层和外层的变量是两个独立的变量,所以可以数据类型不同。它们只是名字相同。
(3) 代码运行是,查找变量的顺序是,从内部往外部。
var block = "package"
func main() {
block := "function"
{
block := "inner"
}
}
6. 类型转换: value := []string(变量x)。需要主义的几点:
(1) 整数值、常量之间的类型转换,只要源值在目标类型的可表示范围内就是合法的。
(2) 把整数值转换为string类型是可行的,被转换的整数值需要是有效的 Unicode 代码点,否则转换的结果将会是"�"乱码
(3) string类型向[]byte类型转换,代表着以 UTF-8 编码的字符串会被拆分成字节。
7. 如何正确判断变量的类型?
使用“类型断言”表达式:
value, ok := interface{}(container).([]string)
(1) 先把变量 container 转换成空接口 interface{}(container )
(2) 再进行类型断言 .([]string)
(3) 判断返回的两个值 value , ok
如果类型配的话,ok的值是true,转换后的结果赋值给value,成为字符串切片
如果类型不匹配的话,ok的值是false。
如果只声明value, 没有声明ok,并且当类型不匹配的话,会触发panic
8. 声明别名类型的两种方式:
(1) type MyString = string, 两者完全相等
(2) type MyString2 string (没有等号),两者不同,是两个类型。
MyString2 和 string 可以进行类型转换,但 []MyString2与[]string 就不能进行类型转换。
9. byte是uint8的别名类型,而rune是int32的别名类型