当前位置: 首页 > news >正文

怎么做html5网站关键词排名优化软件

怎么做html5网站,关键词排名优化软件,北京移动端网站公司,做笔记的网站源码文章目录 demo1 数据类型判断demo2 打印任意类型数据 demo1 数据类型判断 使用reflect.TypeOf()方法打印go中数据类型,可参考go官方API文档;使用格式化参数%T也能打印数据类型。 package mainimport "fmt" import "reflect" import "io&…

文章目录

  • demo1 数据类型判断
  • demo2 打印任意类型数据

demo1 数据类型判断

  1. 使用reflect.TypeOf()方法打印go中数据类型,可参考go官方API文档;
  2. 使用格式化参数%T也能打印数据类型。
package mainimport "fmt"
import "reflect"
import "io"
import "os"func main() {TypeTest()
}func TypeTest() {tInt := reflect.TypeOf(3)               // inttStr := reflect.TypeOf("文字")           // stringtBool := reflect.TypeOf(true)            // booltFloat := reflect.TypeOf(3.14)           // float64tSlice := reflect.TypeOf([]int{1, 2})    // []inttMap := reflect.TypeOf(map[int]string{}) // map[int]stringvar w io.Writer = os.Stdout              // *os.FiletW := reflect.TypeOf(w)fmt.Println(tInt, tStr, tBool, tFloat, tSlice, tMap, tW)fmt.Printf("%T %T %T %T %T %T %T", 3, "feng", true, 3.14, []int{1, 2}, map[int]string{}, os.Stdout)
}

输出

int string bool float64 []int map[int]string *os.File
int string bool float64 []int map[int]string *os.File

demo2 打印任意类型数据

开始写代码之前,简单了解一些reflect包中的结构体和方法。

1.结构体:reflect.Value(类型+数据指针)

type Value struct {typ *rtypeptr unsafe.Pointerflag
}
type flag uintptr

2.方法:reflect.ValueOf()
入参:接口interface{},也就是任意类型
出参:reflect.Value结构体

func ValueOf(i any) Value {if i == nil {return Value{}}escapes(i)return unpackEface(i)
}

3.方法:reflect.Value{}.Interface()
将Value的数据值转为interface{}类型

func (v Value) Interface() (i any) {return valueInterface(v, true)
}

4.类型:reflect.Kind
实际上Kind是一个uint类型的别名,使用Kind类型定义了go中各种数据类型,枚举如下
(iota变量是0,常量块定义中使用iota,后面的如果没有指定数值,一般就是自增)

type Kind uintconst (Invalid Kind = iotaBoolIntInt8Int16Int32Int64UintUint8Uint16Uint32Uint64UintptrFloat32Float64Complex64Complex128ArrayChanFuncInterfaceMapPointerSliceStringStructUnsafePointer
)
  1. 结构体:reflect.Type(数据类型)
type Type interface {// 对齐方式Align() int// 结构体字段的对齐方式FieldAlign() int// 从方法集合中返回索引为i的方法Method(int) Method// 通过方法名在方法集合中找方法,返回方法和是否找到的bool类型结果MethodByName(string) (Method, bool)// 返回方法数量NumMethod() int// 返回类型的名称,例如 int、string等Name() string//  返回包路径,例如"encoding/base64"PkgPath() string// 返回类型大小,比如int占8字节Size() uintptr// 返回最段的类型,例如”base64“而不是"encoding/base64"String() string// 返回类型的数字枚举Kind() Kind// 返回u类型是否实现了接口Implements(u Type) bool// 当前类型的值是否可以赋值为u类型AssignableTo(u Type) bool// 当前类型的值是否可以转换为u类型,就算可转换,依然可能会panic。比如数组大小不匹配时进行转换ConvertibleTo(u Type) bool// 此类型是否可比较,返回true在比较时也可能panic,因为interface是可比较的,但是interface的子类可能是不可比较的Comparable() boolBits() intChanDir() ChanDirIsVariadic() bool// 返回此类型的元素类型,必须是Array、Chan、Map、Pointer、Slice类型调用,否则会panicElem() Type// 返回索引为i的结构体类型的字段Field(i int) StructField// 必须是结构体调用,否则会panic。返回嵌套字段FieldByIndex(index []int) StructField// 根据名字获取字段,找到返回trueFieldByName(name string) (StructField, bool)// 根据条件查找字段FieldByNameFunc(match func(string) bool) (StructField, bool)// In returns the type of a function type's i'th input parameter.// It panics if the type's Kind is not Func.// It panics if i is not in the range [0, NumIn()).In(i int) Type// Key returns a map type's key type.// It panics if the type's Kind is not Map.Key() Type// Len returns an array type's length.// It panics if the type's Kind is not Array.Len() int// NumField returns a struct type's field count.// It panics if the type's Kind is not Struct.NumField() int// NumIn returns a function type's input parameter count.// It panics if the type's Kind is not Func.NumIn() int// NumOut returns a function type's output parameter count.// It panics if the type's Kind is not Func.NumOut() int// Out returns the type of a function type's i'th output parameter.// It panics if the type's Kind is not Func.// It panics if i is not in the range [0, NumOut()).Out(i int) Typecommon() *rtypeuncommon() *uncommonType
}

了解反射包下的基本数据结构和方法后,下面开始编程

package mainimport ("fmt""reflect""strconv"
)// 任何类型转打印
func AnyToString(a interface{}) string {// v是Value类型,属性包含a的实际类型+值v := reflect.ValueOf(a)// 判断v的类型switch v.Kind() {case reflect.Invalid: // 无效值return "invalid"case reflect.String: // 字符串return v.String()case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: // 数字类型return strconv.FormatInt(v.Int(), 10)case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: // 无符号数字类型return strconv.FormatUint(v.Uint(), 10)case reflect.Bool: // 布尔类型return strconv.FormatBool(v.Bool())case reflect.Float64, reflect.Float32: // 浮点数类型return strconv.FormatFloat(v.Float(), 'f', -1, 64)case reflect.Ptr: // 指针类型if v.IsNil() {return "<nil>"}// v.Elem()取出指针指向的数据,类型为reflect.Value// v.Elem().Interface()将reflect.Value转为interface{}// AnyToString(v.Elem().Interface()) 递归再次获取字符串return AnyToString(v.Elem().Interface())case reflect.Slice, reflect.Array: // 切片和数组类型s := "["// 获取数组或者切片的长度length := v.Len()for i := 0; i < length; i++ {// v.Index(i)为获取下标为i的reflect.Value类型数据// v.Index(i).Interface() 将reflect.Value转为interface{}// AnyToString(v.Index(i).Interface()) 递归再次获取字符串s += AnyToString(v.Index(i).Interface())if i < length-1 {s += ","}}s += "]"return scase reflect.Map: // 字典类型// 反射获取map的所有keykeys := v.MapKeys()// 获取map的长度length := len(keys)s := "{"for i := 0; i < length; i++ {key := keys[i]// 获取map的valuevalue := v.MapIndex(key)s += fmt.Sprintf("%s", AnyToString(key.Interface())) // 拼接keys += ": "s += AnyToString(value.Interface()) // 拼接valueif i < length-1 {s += ", "}}s += "}"return scase reflect.Struct: // 结构体类型s := "{"count := v.NumField() // 获取结构体的字段数量for i := 0; i < count; i++ {// v.Type().Field(i) s += fmt.Sprintf("%s:%s", v.Type().Field(i).Name, AnyToString(v.Field(i).Interface()))if i < count-1 {s += ","}}s += "}"return sdefault: // 其他类型return fmt.Sprintf("%+v", v)}
}func main() {fmt.Println(AnyToString(1))fmt.Println(AnyToString("字符串"))fmt.Println(AnyToString(3.1415926))fmt.Println(AnyToString(255))fmt.Println(AnyToString([]int{1, 2, 3}))fmt.Println(AnyToString(map[string]int{"age": 1}))account := &Account{Age:  2,Name: "jinnian",}accountList := []Account{{1, "wo"},{0, "c"},}fmt.Println(AnyToString(accountList))fmt.Println(AnyToString(account))fmt.Println(AnyToString(nil))fmt.Println(AnyToString(true))fmt.Println(AnyToString(&accountList))
}

输出

1
字符串
3.1415926
255
[1,2,3]
{age: 1}
[{Age:1,Name:wo},{Age:0,Name:c}]
{Age:2,Name:jinnian}
invalid
true
[{Age:1,Name:wo},{Age:0,Name:c}]

开始学起来吧

http://www.mmbaike.com/news/81773.html

相关文章:

  • 网站建设和连接器区公司名字国家职业技能培训平台
  • 网站开发维护合同样板头条今日头条
  • 网站建设与用户体验平台做推广的技巧
  • 网站设计最新风格全部列表支持安卓浏览器软件下载
  • 建网站的域名seo监控
  • 房地产开发公司网站建设方案影视后期培训班一般要多少钱
  • 网站优化建设河南免费域名申请个人网站
  • 学校网站建设培训方案seo搜索培训
  • 如何制作网站视频教程今日小说百度搜索风云榜
  • 坪山网站建设哪家便宜写文章免费的软件
  • 什么是企业网站建设seo技巧
  • 一个网站做十个二级域名互联网营销师考试题库
  • 安阳做网站百度搜索热词查询
  • 做兼职网站的项目方案网络营销的未来6个发展趋势
  • o2o 网站产品推广文案怎么写
  • html5怎么做网站正规营销培训
  • 五易网络关键词优化快速排名
  • 服务类网站建设服务公司合肥网站制作公司
  • wordpress做社交网站吗域名注册查询网站
  • 徐州做网站的公司哪些好最近的新闻摘抄
  • 东莞注塑切水口东莞网站建设app开发公司排名
  • 有没有专门做帽子的网站合肥网站建设优化
  • 建设网站需要什么硬件设施指数是指什么
  • 做平面那个网站素材好杭州seo网站推广排名
  • 做外贸建网站需要推广吗推广品牌的方法
  • 网站在线答题怎么做制作自己的网站
  • 建筑网站设计模版湖北seo服务
  • 做企业网站建设挣钱吗广告关键词有哪些
  • 东莞网站建设aj图片外链生成工具在线
  • 旅游网站建设ppt模板网站怎么收录到百度