美文网首页
php 转 go 基本区别

php 转 go 基本区别

作者: 蛐蛐儿阳 | 来源:发表于2020-04-23 21:13 被阅读0次

    1, 整数类型。 go

    序号 类型和描述
    1 uint8
    无符号 8 位整型 (0 到 255)
    2 uint16
    无符号 16 位整型 (0 到 65535)
    3 uint32
    无符号 32 位整型 (0 到 4294967295)
    4 uint64
    无符号 64 位整型 (0 到 18446744073709551615)
    5 int8
    有符号 8 位整型 (-128 到 127)
    6 int16
    有符号 16 位整型 (-32768 到 32767)
    7 int32
    有符号 32 位整型 (-2147483648 到 2147483647)
    8 int64
    有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

    以下代码证明占用字节数并不相同

    package main
    
    import (
        "fmt"
        "unsafe"
    )
    
    func main() {
        var num1 int8 = 8
        var num2 int64 = 9
        var num3 uint32 = 99
        fmt.Print(unsafe.Sizeof(num1))
        fmt.Print("\n")
        fmt.Print(unsafe.Sizeof(num2))
        fmt.Print("\n")
        fmt.Print(unsafe.Sizeof(num3))
    }
    输出
    1
    8
    4
    
    

    字符串多行拼接用+号,换行时+号必须在上一行。
    go中字符默认值

    int 0
    float 0
    string ''
    flloat false
    

    类型强制转换

    int()
    float32()
    

    强制转换会二进制溢出,并不是取余数。

    import 时 前面添加 _  可以暂时忽略包。
    

    如果变量名,函数名,常量名首字母大写, 可以被其他的包访问,小写则不可以,可简单理解为,首字母大写是公用的,小写是私有的。

    注释一般用 // 就可以
    声明和导入包

    package main
    
    import (
        "fmt"
        "path"
        "test/model"
    )
    func main() {
        fmt.Print(path.Base("R"))
        fmt.Print(model.Name)
    }
    

    go 中没有前 ++

    比如
    ++i
    --i 是错误的
    

    go 中switch 语句,默认有break.
    switch 数据类型要一致,否则报错。

    for range 类似foreach 写法

    package main
    
    import "fmt"
    
    func main() {
        var str string = "hello word"
        for key, val := range str {
            fmt.Printf( "key=%d val=%c \n", key,  val)
        }
    }
    注意下这里替换字符串用的%c, 输出函数用的Printf.
    

    init 初始化函数。

    defer, 在函数使用完资源释放资源, 例如链接数据库。defer是栈先入后出。


    image.png

    go 没有try catch ,捕获异常这么用, 有匿名函数,defer + recover


    image.png

    1, 切片简单来说是可变的数组。 切片是数组的引用。
    append 增加切片数组。


    image.png

    2, map 容易被检索的二维数组。 遍历要用for-range. 不能用for,因为没数字下标

    go语言没有类, 用结构体 struct 结构体完成相应功能。

    简单的结构体
    package main
    
    import "fmt"
    
    type  Cat struct {
        Name string
        Age int
        Color string
    }
    
    func main() {
        var cat1 Cat
        cat1.Name = "nihao"
        fmt.Print(cat1)
        fmt.Print(cat1.Name)
    }
    
    

    有意思的是,同一个文件夹下,结构体名称不能重复。
    结构体方法的使用。

    
    import "fmt"
    
    type  Dog struct {
        Name string
    }
    
    func (d Dog)  test() {
        fmt.Print(d.Name)
    }
    
    
    func main() {
        var dog Dog
        dog.Name = "tom"
        dog.test()
    }
    

    是又写了一个函数,将结构体传入,然后操作结构体参数,并在函数中实现逻辑。 调用时用点。

    goroutine, 利用多个cpu。


    image.png

    只是用go 后面跟一个函数, 两块代码将会穿插执行, 可发挥多cup功能。

    runtime 包可获取机器cpu数量,从而更好运行进程。
    直接go 会运行多个协成, 多个协成不能同时操作一个map, 就是不能同时写一个文件,会报错。

    go 处理协议,有默认的net包, 文档
    http://docscn.studygolang.com/pkg/net/

    image.png

    相关文章

      网友评论

          本文标题:php 转 go 基本区别

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