• 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是不会变的

  • 相关阅读:
    request内置对象
    JSP页面、包含
    HTTP协议
    html简介
    数据访问层工具类
    数据运算
    可变于不可变对象分类
    有序 无序 的区别
    字符串方法
    day01_final
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/8258613.html
Copyright © 2020-2023  润新知