goalng基础类型

重学golang,看看大佬对底层的理解,也看看有什么不明白的地方

变量的声明

1.short variable declaration

init obviously

不提供类型

仅限函数内部(退化赋值,

x := 100
 println(&x)
x, y := 200, "abc"  // x 退化赋值,y 是新变量。
$ go build -gcflags "-N" $ go tool objdump -S -s "main\.main" ./test

func main() {x, y := 1, 2

MOVQ $0x1, 0x10(SP)    ; x
MOVQ $0x2, 0x8(SP)    ; y

x, y = y+3, x+2

MOVQ 0x10(SP), AX    
ADDQ $0x2, AX        
MOVQ AX, 0x18(SP)   ; tmp = x + 2

MOVQ 0x8(SP), AX    
ADDQ $0x3, AX        ; AX = y + 3
MOVQ AX, 0x10(SP)    ; x = AX

MOVQ 0x18(SP), AX    
MOVQ AX, 0x8(SP)    ; y = tmp

*/

2.常量

常量组中的定义

     const (
        x uint16 = 120
        y
        s = "abc"
        z
    )

    fmt.Printf("%T, %v\n", y, y)   // uint16, 120
    fmt.Printf("%T, %v\n", z, z)   // string, abc
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

3.枚举

iota

4.别名

type X =int

注意别名与自定义类型的区别

type X int 为自定义类型

倘若使用自定义类型,不能直接比较,也不能隐式转换

type X int

   ~~~~~~ invalid operation: mismatched types int and X

}

# 2.2引用类型

new按类型大小分配零值内存,返回指针,只关心类型长度sizeof

make类型构造函数,完成内部初始化

  1. 返回类型new 返回指针(*T)(类似与malloc),make 返回初始化的类型(T)。
  2. 适用类型new 可用于任何类型,make 仅用于切片、映射和通道。
  3. 内存初始化new 分配的内存被清零,make 分配的内存被初始化为某种类型的非零值。

类型转换

(*int)(p) // --> 如果没有括号 --> *(int(p)) (<-chan int)(c) // <-(chan int(c)) (func())(x) // func() x

func()int(x) // --> 有返回值的函数类型可省略括号,但依然建议使用。 (func()int)(x)

自定义类型

//golang中类型转换必须显式进行

底层类型相同也非统一类型

除运算符外,不继承任何信息

不能隐式转换,也不能直接比较

类型断言,将具体类型的值转换为接口类型

func main() {
 var a int = 100
// var b X = a
//           ~ cannot use a (int) as type X
//var b X=X(a)//可以显式转换,如果底层相同的话。底层不同的话不可以转换
b := X(a)
println(b)

// println(a == b)
//  


//
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值