• golang 基础知识3


    1. 断言: 参考 https://studygolang.com/articles/3314

    var.(T)类型断言失败时会返回T类型的“0值”,而不是变量原始值。 var是要判断的变量,T类型,例如:sss.(string),T是type最好用的是interface或者一个strcut

    其中var为interface{}类型 T是要断言的类型。

    简单的string可以不使用这个

    1)直接断言使用

    var a interface{}

    a = "xxxx"

    fmt.Println("Where are you,Jonny?", a.(string))

    但是如果断言失败一般会导致panic的发生。所以为了防止panic的发生,我们需要在断言前进行一定的判断

    value, ok := a.(string)     //value在正常值true/false, 如果没错误 ok是没有值的,如果有panic则ok是有值的

    if value, ok := a.(string) ,ok {

      fmt.Println(value, ok)   //xxxx,true

    }

    if value, ok := a.(string) ,ok {

      fmt.Println(value, ok)   

    } else {

        fmt.Println(value, ok)   //<nil>, false  如果ok为false则ok为false

    }

    2.receiver函数的"仿重载",也就是继承的问题,继承不覆盖父的方法

    package main

    import (
    "fmt"
    )

    type S1 struct{}

    func (s1 S1) f() {
    fmt.Println("S1.f()")
    }
    func (s1 S1) g() {
    fmt.Println("S1.g()")
    }

    type S2 struct {
    S1
    }

    func (s2 S2) f() {
    fmt.Println("S2.f()")
    }

    type I interface {
    f()
    }

    func printType(i I) {
    fmt.Printf("1,%T ", i)
    if s1, ok := i.(S1); ok {
    s1.f()
    s1.g()
    }
    if s2, ok := i.(S2); ok {
    s2.f()
    s2.g()
    }
    }

    func main() {
    printType(S1{})
    printType(S2{})
    }

    3.string转换为[]byte

      s := "123"

      1.取这个字符串的指针   b := []byte(*s | s)  //直接用字符串生成byte的数组,这个时候生成的byte数组的内容就会跟s无关了

      2.修改这个byte的值: b[1] = '0'    //单引号是byte 可以使用这样来修改byte数组的值,s是不会变的

  • 相关阅读:
    CA 证书和数字证书
    PHP获取不了内网IP?
    站点速度检测工具
    Mac地址
    交互机和路由器区别
    关于实体店收银系统和cookie实现登录状态
    Python3 的序列
    Python3 字符串格式化
    Python3 的元组
    Python3 的列表
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/8258613.html
Copyright © 2020-2023  润新知