Go学习笔记(二)

一。变量

1.变量

2.常量

3.基本类型

4.引用类型

5.类型转换

6.字符串

7.指针

8.自定义类型



1.多变量赋值时,先计算所有相关值,然后再从左到右依次赋值。

data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)

2.编译器会将未使用的局部变量当做错误。

var s string // 全局变量没问题。
func main() {
i := 0 // Error: i declared and not used。 (可使用"_ = i" 规避)
}

3.在常量组中,如不提供类型和初始化值,那么视作与上一常量相同。

const (
s = "abc"
x // x = "abc"
)

4.如果iota 自增被打断,须显示恢复。

const (
A = iota // 0
B // 1
C = "c" // c
D // c,与上一行相同。
E = iota // 4,显式恢复。注意计数包含了 C、 D 两行。
F // 5
)

5.可通过自定义类型来实现枚举类型限制。

package main

import "fmt"

type Color int

const(
    Black Color = iota
    Red
    Blue
)

func test(c Color){
    fmt.Printf("test func\n")
    fmt.Println(c)
}

func main() {
    c:=Black
    test(c)

    test(1)//Ok,常量会被编译器自动转换。

    x:=1
    test(x)//Error: cannot use x (type int) as type Color in function argument

    
}

6.不支持隐式转换,即便是从窄向宽转换也不行。

var b byte = 100
// var n int = b // Error: cannot use b (type byte) as type int in assignment
var n int = int(b) // 显式转换


同样,不能将其他类型当bool值使用。

a := 100
if a { // Error: non-bool a (type int) used as if condition
println("true")
}

rune是int32的别名 7.要修改字符串,可先将其转换成 []rune []byte,完成后再转换为 string。无论哪种转换,都会重新分配内存,并复制字节数组。
func main() {
s := "abcd"
bs := []byte(s)
bs[1] = 'B'
println(string(bs))

u := "电脑"
us := []rune(u)
us[1] = '话'
println(string(us))
}


8.用 for 循环遍历字符串时,也有 byte rune 两种⽅式。

func main() {
s := "abc汉字"
for i := 0; i < len(s); i++ { // byte
fmt.Printf("%c,", s[i])
}
fmt.Println()
for _, r := range s { // rune
fmt.Printf("%c,", r)
}
}
输出:
a,b,c,æ,±,,å,­,,
a,b,c,汉,字,



9.指针

默认值 nil,没有 NULL 常量。
操作符 "&" 取变量地址, "*" 透过指针访问⺫标对象。
不⽀持指针运算,不⽀持 "->" 运算符,直接⽤ "." 访问⺫标成员。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值