博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang 基础知识3
阅读量:5056 次
发布时间:2019-06-12

本文共 1272 字,大约阅读时间需要 4 分钟。

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\n", 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是不会变的

 

转载于:https://www.cnblogs.com/jay--zhang/p/8258613.html

你可能感兴趣的文章
[区块链] 密码学——椭圆曲线密码算法(ECC)
查看>>
第6周学习进度
查看>>
数据库运行在非归档模式下,数据文件被误删的解决方法
查看>>
再要你命3K的任务总结
查看>>
小白学数据分析------>描述性统计术语汇总
查看>>
mvc 在IIS5,iis6和iis7上的部署
查看>>
Spring HttpInvoker 从实战到源码追溯
查看>>
Vue——vue-cli 进行vue开发的脚手架工具
查看>>
jQuery 插件 flexslider 初步使用
查看>>
树和二叉树总结(一)
查看>>
caffe神经网络模型的绘图
查看>>
Javasript中Date日期常用用法(正则、比较)
查看>>
《代码阅读方法与实践》--读书笔记
查看>>
C++[Tarjan求点双连通分量,割点][HNOI2012]矿场搭建
查看>>
JAVASCRIPT共通関数--文字列の空白を取り除く
查看>>
ysj的模拟赛
查看>>
[Java] Java 获取数据库所有表基本信息和表中的所有列基本信息代码
查看>>
[Hadoop 周边] Hadoop技术生态圈
查看>>
初识php
查看>>
看了很多人问香港10周年晚会上的开幕动画中的小猪麦兜为什么总问橡皮,写个小故事....
查看>>