美文网首页
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、程序实体

    1、声明变量的方式 第一种用 var 例如 第二种 短变量声明 例如 2、Go语言类型推断可以带来哪些好处 Go语...

  • Home Assistant系列 -- 自定义实体

    实体是由组件程序生成的,同时组件程序会决定实体在前端的显示特性(是否可见、图标、名称等)。但我们也可以事后对实体的...

  • 零售业使用小程序的8大优势

    目前小程序用户已达4亿,然而还有很多实体店对小程序还不是很了解,不明白为什么要花钱去制作开发一款小程序,也不知道自...

  • 程序思维-实体和程序

    法律中《民法典》是关于人们应该做什么,是跟实体的钱和物有关的法律,而《民事诉讼法》则是关于使民法典有关法律实现,做...

  • Live555 源代码分析(五)

    1 主程序 1.1 基本概念与实体 下图展示主程序中涉及的主要概念与实体。 MediaServer是服务器的抽象。...

  • 线程和进程的区别

    先讲清楚程序的概念:程序是一个没有生命的实体。CPU赋予了程序有时限的生命,这样它就成为了一个“活”的实体-...

  • Go语言-程序实体与关键字

    任何Go语言源码文件都由若干个程序实体组成的。在Go语言中,变量、常量、函数、结构体和接口被统称为“程序实体”,...

  • Go语言-程序实体与关键字

    任何Go语言源码文件都由若干个程序实体组成的。在Go语言中,变量、常量、函数、结构体和接口被统称为“程序实体”,而...

  • 多线程

    1.程序是一个可执行文件 2.进程是程序执行的一个操作实体 3.进程是线程的集合 4.多线程就是在一个程序(一个进...

  • 2018-03-05

    关于柚安米小程序,实体店必须知道这些! 关于刷爆了朋友圈的小程序,传统企业实体品牌零售需要知道哪些? 小程序不只是...

网友评论

      本文标题:4、程序实体

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