v.(string)这是什么语法?

taatcc · 2018-03-02 11:45:09 · 4476 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-02 11:45:09 的主题,其中的信息可能已经有所发展或是发生改变。

if t,ok := v.(string)
if t,ok := v.([]string)
是什么语法啊,显式指定v的类型吗?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4476 次点击  ∙  1 赞  
加入收藏 微博
11 回复  |  直到 2021-12-03 12:58:24
xialeistudio
xialeistudio · #1 · 7年之前

interface{}类型转换而已

jthmath
jthmath · #2 · 7年之前

类型断言

tk103331
tk103331 · #3 · 7年之前

@taatcc 这是类型断言, if t,ok := v.(string),如果v是string类型的话,ok就是true,t就是string类型v的值;否则ok为false,t就是string类型的初始化

taatcc
taatcc · #4 · 7年之前

哦,谢谢各位,这语相当于是判断和赋给的结合 ,简洁是简洁,就是不明了

yanyumiao
yanyumiao · #5 · 3年之前
tk103331tk103331 #3 回复

@taatcc 这是类型断言, if t,ok := v.(string),如果v是string类型的话,ok就是true,t就是string类型v的值;否则ok为false,t就是string类型的初始化

good

liangmanlin
liangmanlin · #6 · 3年之前

一百不应该用这个,switch是更有的代码方案

lilianwen
lilianwen · #7 · 3年之前
liangmanlinliangmanlin #6 回复

一百不应该用这个,switch是更有的代码方案

这个,有没有代码可以参考以下,学习学习。

liangmanlin
liangmanlin · #8 · 3年之前
lilianwenlilianwen #7 回复

#6楼 @liangmanlin 这个,有没有代码可以参考以下,学习学习。

switch v.(type) {}

taatcc
taatcc · #9 · 3年之前
lilianwenlilianwen #7 回复

#6楼 @liangmanlin 这个,有没有代码可以参考以下,学习学习。

package main

import "fmt"

type Student struct {
    name string
    id   int
}

func main() {
    i := make([]interface{}, 3)
    i[0] = 1                    //int
    i[1] = "hello go"           //string
    i[2] = Student{"mike", 666} //Student

    //类型查询,类型断言
    for index, data := range i {
        switch value := data.(type) {
        case int:
            fmt.Printf("x[%d] 类型为int, 内容为%d\n", index, value)
        case string:
            fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value)
        case Student:
            fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id)
        }

    }
}
lilianwen
lilianwen · #10 · 3年之前
taatcctaatcc #9 回复

#7楼 @lilianwen ```go package main import "fmt" type Student struct { name string id int } func main() { i := make([]interface{}, 3) i[0] = 1 //int i[1] = "hello go" //string i[2] = Student{"mike", 666} //Student //类型查询,类型断言 for index, data := range i { switch value := data.(type) { case int: fmt.Printf("x[%d] 类型为int, 内容为%d\n", index, value) case string: fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value) case Student: fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id) } } } ```

谢谢大佬,学习了,受益匪浅!

rookiesky
rookiesky · #11 · 3年之前

学习了。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传