zoukankan      html  css  js  c++  java
  • 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是不会变的

  • 相关阅读:
    报告论文:数字图像噪音处理研究
    报告论文:汽车GPS调度系统车载终端设计技术方案
    疾病研究:我是一名34岁的进行性肌营养不良症患者
    08年最热门七大技术和最紧缺的IT人才
    C#序列化
    网络游戏的数据管理
    2008年3月Google占美国搜索请求量市场份额达67.3%
    C#反转字符串效率最高的方法
    何时应该使用极限编程
    几种字符串反转方法效率比较
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/8258613.html
Copyright © 2011-2022 走看看