- 分类接口
- 文章接口
- 图片新闻
- 会员接口
- 账户中心
- 收藏接口
- 评论接口
- 地址接口
- 商品品牌
- 商品接口
- 订单接口
- 通知接口
- 话题接口
文章详情
开发中
POST
/Article/Detail
请求参数
Header 参数
UTK
string
必需
默认值:
{{UTK}}
RTK
string
必需
默认值:
{{RTK}}
Body 参数multipart/form-data
Id
integer
文章主键
示例值:
108
UseCache
string
可选
示例值:
y
返回响应
🟢200成功
application/json
Body
object {0}
示例
{
"data": {
"Id": 118,
"CategoryId": 10005,
"CategoryName": "编程技巧",
"Title": "Golang 类型断言 ",
"ImageUrl": "",
"Images": "[]",
"Keywords": "Golang,类型,断言 ",
"Description": "Go语言的interface中可以是任何类型,所以Go给出了类型断言来判断某一时刻接口中所含有的类型 ",
"Content": "<h3>一,如何检测和转换接口变量的类型</h3><p>在Go语言的interface中可以是任何类型,所以 Go 给出了类型断言来判断某一时刻接口中所含有的类型,例如现在给出一个接口,名为InterfaceText:</p><pre><code class=\"language-go\">x,err:=interfaceText.(T)//T是某一种类型</code></pre><p>上式是接口断言的一般形式,因为此方法不一定每次都可以完好运行,所以err的作用就是判断是否出错。所以一般接口断言常用以下写法:</p><pre><code class=\"language-go\">if v,err:=InterfaceText.(T);err {//T是一种类型\r\n possess(v)//处理v\r\n return\r\n}</code></pre><p>如果转换合法,则v为InterfaceText转换为类型T的值,err为ture,反之err为false。</p><p>值得注意的是:InterfaceText必须是接口类型!!!</p><p>有些时候若是想仅判断是否含有类型T,可以写为:</p><pre><code class=\"language-go\">if _,err:=InterfaceText.(T);err{\r\n //..\r\n return \r\n}</code></pre><p>下面给出一个具体的例子帮助理解:</p><pre><code class=\"language-go\">package main\r\nimport (\r\n\t\"fmt\"\r\n \"math\"\r\n)\r\ntype Square struct{\r\n slide float32\r\n}\r\ntype Circle struct{\r\n radius float32\r\n}\r\ntype Figure interface{\r\n Area() float32\r\n}\r\nfunc main(){\r\n var fi Figure\r\n sq:=new(Square)\r\n sq.slide=5\r\n fi=sq\r\n if v,err:=fi.(*Square);err {\r\n fmt.Printf(\"fi contain a variable of type : %v\\n\",v)\r\n }else {\r\n fmt.Println(\"fi does not contain a variable of Square\")\r\n }\r\n if v2,ok:=fi.(*Circle);ok {\r\n fmt.Printf(\"fi contain a variable of type : %v\\n\",v2)\r\n }else {\r\n fmt.Println(\"fi does not contain a variable of Circle\")\r\n }\r\n}\r\nfunc (s *Square) Area() float32{\r\n return s.slide*s.slide\r\n}\r\nfunc (c *Circle) Area() float32{\r\n return c.radius*c.radius*math.Pi\r\n}</code></pre><h3>二,类型判断:type-switch</h3><p>这是另一种类型判断的方法,此方法和switch很相似。直接看代码:</p><pre><code class=\"language-go\">switch x:=InterfaceText.(type) {\r\n case *Square:\r\n fmt.Printf(\"text:%v\",i)\r\n case *Circle:\r\n //..\r\n case nil:\r\n //..\r\n default:\r\n //..\r\n //..and so forth\r\n}\r\n\r\n// 理解思路和switch很相似,如果InterfaceText中有*Square,*Circle,nil三种类型,就会执行对应的代码,若都没有,便会执行default里的代码。\r\n//如果仅判断,而不使用值的话可以写为:\r\nswitch InterfaceText.(type) {\r\n case *Square:\r\n fmt.Printf(\"text:%v\",i)\r\n case *Circle:\r\n //..\r\n case nil:\r\n //..\r\n default:\r\n //..\r\n //..and so forth\r\n}</code></pre><p>有时为了方便,我们可以把它打包成一个函数来判断一些未知类型:</p><pre><code class=\"language-go\">func classify(items...interface{}){\r\n for i,x:=range items {\r\n switch x.(type) {\r\n case bool:\r\n fmt.Printf(\"text:%v\",i)\r\n case int:\r\n //..\r\n case float32:\r\n //..\r\n default:\r\n //..\r\n //..and so \r\n }\r\n}</code></pre><p> <br></p>",
"ViewNumber": 99,
"CreateTime": 1672295606,
"Status": 1,
"Picked": 2,
"Path": "0ac30f5b1e02e5798c1b4708b22dadd5",
"ImageList": null,
"ImagesCount": 0,
"CreateTimeFormat": "",
"ContentItems": [
{
"content": "一,如何检测和转换接口变量的类型",
"type": "h3"
},
{
"content": "在Go语言的interface中可以是任何类型,所以 Go 给出了类型断言来判断某一时刻接口中所含有的类型,例如现在给出一个接口,名为InterfaceText:",
"type": "text"
},
{
"content": "x,err:=interfaceText.(T)//T是某一种类型",
"type": "pre"
},
{
"content": "上式是接口断言的一般形式,因为此方法不一定每次都可以完好运行,所以err的作用就是判断是否出错。所以一般接口断言常用以下写法:",
"type": "text"
},
{
"content": "if v,err:=InterfaceText.(T);err {//T是一种类型\r possess(v)//处理v\r return\r}",
"type": "pre"
},
{
"content": "如果转换合法,则v为InterfaceText转换为类型T的值,err为ture,反之err为false。值得注意的是:InterfaceText必须是接口类型!!!有些时候若是想仅判断是否含有类型T,可以写为:",
"type": "text"
},
{
"content": "if _,err:=InterfaceText.(T);err{\r //..\r return \r}",
"type": "pre"
},
{
"content": "下面给出一个具体的例子帮助理解:",
"type": "text"
},
{
"content": "package main\rimport (\r\"fmt\"\r \"math\"\r)\rtype Square struct{\r slide float32\r}\rtype Circle struct{\r radius float32\r}\rtype Figure interface{\r Area() float32\r}\rfunc main(){\r var fi Figure\r sq:=new(Square)\r sq.slide=5\r fi=sq\r if v,err:=fi.(*Square);err {\r fmt.Printf(\"fi contain a variable of type : %v\\n\",v)\r }else {\r fmt.Println(\"fi does not contain a variable of Square\")\r }\r if v2,ok:=fi.(*Circle);ok {\r fmt.Printf(\"fi contain a variable of type : %v\\n\",v2)\r }else {\r fmt.Println(\"fi does not contain a variable of Circle\")\r }\r}\rfunc (s *Square) Area() float32{\r return s.slide*s.slide\r}\rfunc (c *Circle) Area() float32{\r return c.radius*c.radius*math.Pi\r}",
"type": "pre"
},
{
"content": "二,类型判断:type-switch",
"type": "h3"
},
{
"content": "这是另一种类型判断的方法,此方法和switch很相似。直接看代码:",
"type": "text"
},
{
"content": "switch x:=InterfaceText.(type) {\r case *Square:\r fmt.Printf(\"text:%v\",i)\r case *Circle:\r //..\r case nil:\r //..\r default:\r //..\r //..and so forth\r}\r\r// 理解思路和switch很相似,如果InterfaceText中有*Square,*Circle,nil三种类型,就会执行对应的代码,若都没有,便会执行default里的代码。\r//如果仅判断,而不使用值的话可以写为:\rswitch InterfaceText.(type) {\r case *Square:\r fmt.Printf(\"text:%v\",i)\r case *Circle:\r //..\r case nil:\r //..\r default:\r //..\r //..and so forth\r}",
"type": "pre"
},
{
"content": "有时为了方便,我们可以把它打包成一个函数来判断一些未知类型:",
"type": "text"
},
{
"content": "func classify(items...interface{}){\r for i,x:=range items {\r switch x.(type) {\r case bool:\r fmt.Printf(\"text:%v\",i)\r case int:\r //..\r case float32:\r //..\r default:\r //..\r //..and so \r }\r}",
"type": "pre"
},
{
"content": " \n",
"type": "text"
}
]
},
"errcode": 0
}
修改于 2023-06-05 08:33:59