美文网首页
4、程序实体

4、程序实体

作者: 凌云丶 | 来源:发表于2019-04-01 23:20 被阅读0次

    1、声明变量的方式

    第一种用 var 例如

    var name string
    

    第二种 短变量声明 例如

    name := "name"
    

    2、Go语言类型推断可以带来哪些好处

    Go语言是静态类型的,所以一旦在初始化变量时确定了它的类型,之后就不可能再改变。这种类型的确定是在编译期完成的,因此不会对程序的运行效率产生任何影响

    Go语言的类型推断可以明显提升程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护性带来额外负担(实际上,它恰恰可以避免散弹式的代码修改),更不会会损失程序的运行效率

    3、程序实体作用域

    一个程序实体的作用域总是会被限制在某个代码块中,而这个作用域最大的用处,就是对程序实体的访问权限的控制
    例如

    import "fmt"
    var block="package"
    func main() {
        block:="function"
        {
            block:="inner"
            fmt.Printf("The block is %s.\n",block)
        }
        fmt.Printf("The block is %s.\n",block)
    }
    打印结果
    The block is inner.
    The block is function.
    

    4、怎样判断一个变量的类型

    使用“类型断言”表达式 如下

    var container = []string{"zero", "one", "two"}
    //判断变量container 是否是 []string 类型
    value,ok := interface{}(container).([]string)
    

    类型断言表达式的语法类型是 x.(T) ,其中x代表要被判断类型的值,这个值当下的类型必须是接口类型,所以这里的container要转成接口类型,写成interface{}(container),其中ok是布尔类型值,它代表类型判断的结果,true或false,如果是true,那么被判断的值将会自动转换为T类型的值并赋值给value,否则value将被赋予nil(即“空”)

    例如下面的例子就不用转

    package main
    
    import "fmt"
    
    var err error
    
    type world struct {
        Hello string
    }
    
    func (w world) Error() string {
        panic("implement me")
    }
    
    func main() {
        value, ok := err.(world)
        if ok {
            fmt.Printf("The element is %q.\n", value)
        }
    }
    
    

    5、类型转换需要注意的地方

    类型转换表达式的语法形式为 T(x) ,其中的x可以是一个变量,也可以是一个代表值得字面量(12.3和strcut{ }),还可以是一个表达式,如果是表达式,那么表达式的结果只能是一个值,而不能是多个值,在这个上下文中,x可以被叫做源值,它的类型就是源类型,而那个T代表的类型就是目标类型

    类型转换的坑
    例:

    func main() {
        var srcInt = int16(-255)
        dstInt := int8(srcInt)
        fmt.Printf("dstInt:%d", dstInt)
    }
    //打印的结果为:dstInt:1
    

    例:

    fmt.Printf("string: %s", string(-1))
    //打印的结果为
    string: �
    

    6、别名类型与潜在类型

    别名类型的声明 例

    type MyString =string
    

    这条语句表示 MyString是string的别名类型,别名类型与源类型的区别只是在名称上,它们是完全相同的,别名类型主要是为了代码重构而存在

    type MyStirng2 string
    

    这条语句表示的就是类型的再定义,把string类型再定义成了另外的一个类型MyString2 ,这里的string就可以称为MyString 的潜在类型

    潜在类型的含义是:某个类型在本质上是哪个类型,或者是哪个类型的集合

    如果两个值得潜在类型相同,却属于不同的类型,它们之间是可以进行类型转换的,因此,MyString2类型的值可以和string类型的值进行类型转换

    但对于集合类型[]MyString2和[]string来说就不能进行值得类型转换,因为它们的潜在类型一个是MyString2,另一个是string,它们的潜在类型不同

    另外,即使两个类型的潜在类型相同,它们的值之间也不能进行判等或比较,它们的变量之间也不能赋值

    相关文章

      网友评论

          本文标题:4、程序实体

          本文链接:https://www.haomeiwen.com/subject/rmkibqtx.html