无效操作:类型接口{}不支持索引
我是Golang的新手,在阅读嵌套的JSON响应时,我有问题. var d interface{} json.NewDecoder(response.Body).Decode(&d) test :=d["data"].(map[string]interface{})["type"] response.Body看起来像这个 { "links": { "self": "/domains/test.one" }, "data": { "type": "domains", "id": "test.one", "attributes": { "product": " Website", "package": "Professional", "created_at": "2016-08-19T11:37:01Z"
12 2023-11-08
编程技术问答社区
在一个新的create-react-app项目中,通过 "as "关键字进行的类型断言导致 "解析错误: 未预期的标记,预期为";"`。
我通过yarn create react-app my-app --template typescript创建了一个新的CRA项目,运行开发服务器(yarn start)时会遇到以下错误: src/App.tsx Line 5:24: Parsing error: Unexpected token, expected ";" 3 | import "./App.css"; 4 | > 5 | const _window = window as any; | ^ 6 | 7 | const App: FC = () => { 8 | return ; 我仅在CRA服务器中获取错误,IDE打字机引擎对代码没有任何问题.什么可能导致这个? 我的软件包: { "name": "xxx", "version": "0.1.0", "private": t
4 2023-11-01
编程技术问答社区
学习TypeScript-铸造类型
我是TypeScript的新手,并且正在使用各种语言功能.以下是我在众多在线课程之一中一直在研究的代码示例. 我遇到了继承和超负荷以正常工作的问题. 在整个代码中,我使用的是基地汽车的汽车,以及一辆不在儿童级卡车的卡车. 我试图看看是否有可能将汽车铸造为卡车并访问专业功能Honkhorn. 另外,我正在尝试将卡车送回汽车并访问Witteretails的基本功能. 在这两种情况下,似乎都存在原始类型的对象.因此,typecast4.HonkHorn();生成一个运行时错误: undurect typeError:typecast4.honkhorn不是功能. 试图将卡车倒回自动将始终导致拨号的专门替代.铸造代码一直在样本的底部. 有人可以帮助我理解为什么会发生这种情况吗? 预先感谢! // defines the structure of auto options interface IAutoOptions{ engine: Eng
4 2023-10-31
编程技术问答社区
如何在打字稿中断言一种类型的HTMLEMENT?
我正在尝试这样做: var script:HTMLScriptElement = document.getElementsByName("script")[0]; alert(script.type); 但它给我一个错误: Cannot convert 'Node' to 'HTMLScriptElement': Type 'Node' is missing property 'defer' from type 'HTMLScriptElement' (elementName: string) => NodeList 除非我将其投入正确的类型,否则我无法访问脚本元素的"类型"成员,但是我不知道该怎么做.我搜索了文档和样本,但找不到任何东西. 解决方案 打字稿使用''来包围铸件,因此上述变为: var script = document.getElementsByName("script")[0]; 但是,不幸的是
8 2023-10-31
编程技术问答社区
" AS Const"在打字稿中是什么意思,其用例是什么?
我对as const演员感到困惑.我检查了一些文档和视频,但不完全理解. 我担心的是as const在下面的代码中意味着什么?使用它的好处是什么? const args = [8, 5] as const; const angle = Math.atan2(...args); console.log(angle); 解决方案 这被称为 const断言. A const断言告诉编译器推断最狭窄 *或最特定的类型可以用于表达式.如果将其删除,编译器将使用其默认类型推理行为,这可能会导致 em 或更通用的类型. 请注意,它称为"断言",而不是"铸造".通常在打字稿中避免"铸造"一词;当人们说"铸造"时,他们通常意味着可以在运行时观察到的某种效果,但是Typescript的类型系统(包括类型断言和const断言)完全从发射的JavaScript中删除.因此,使用as const的程序和不这样的程序之间的运行时间绝对没有差异. 在编译时,存在明显的差异.让我们看看当您
14 2023-10-31
编程技术问答社区
类型转换和类型断言之间有什么区别?
: 之间的主要区别是什么 v = t.(aType) // type assertion v = aType(t) // type conversion 我应该在哪里使用类型的断言或类型转换? 解决方案 一种类型断言t(接口类型)实际上是aType和t将是aType;即包裹在t接口中的那个.例如.如果您知道您的var reader io.Reader实际上是*bytes.Buffer,则可以做var br *bytes.Buffer = reader.(*bytes.Buffer). 类型转换将一个(非接口)类型转换为另一种(例如a var id int64 = int64(x) to and int64,例如var id int64 = int64(x). 经验法则:如果您必须将混凝土类型包裹在接口中并希望将混凝土类型返回,请使用类型的断言(或类型开关).如果您需要将一种混凝土类型转换为另一种混凝土类型,请使用类型转换. 其他解决方案 tl; d
2 2023-10-30
编程技术问答社区
在函数中传入一个类型变量
我正在尝试通过将类型传递到函数中来实现类型的主张.换句话说,我正在尝试实现这样的目标: // Note that this is pseudocode, because Type isn't the valid thing to use here func myfunction(mystring string, mytype Type) { ... someInterface := translate(mystring) object, ok := someInterface.(mytype) ... // Do other stuff } func main() { // What I want the function to be like myfunction("hello world", map[string]string) } 我需要在myfunction中使用什么正确的函数声明,以成功地执行myfunction
2 2023-10-30
编程技术问答社区
我可以输入断言的界面值的片断吗?
我正在尝试从[]Node,[]Symbol键入断言.在我的代码中,Symbol实现Node接口. 这是一些周围的代码: 43 func applyLambda(args []Node, env Env) Node { 44 if len(args) > 2 { 45 panic("invalid argument count") 46 } 47 fixed, rest := parseFormals(args.([]Symbol)) 48 return Func{ 49 Body: args[1], 50 FixedVarNames: fixed, 51 RestVarName: rest, 52 } 53 } 这是我遇到的错误: ./builtins.go:47: invalid type assertion: args.([]Symbol
2 2023-10-30
编程技术问答社区
在围棋中,类型断言/类型转换的性能不好/很慢吗?
在GO中使用类型主张/类型开关的速度如何,作为运行时类型发现的方法? 我听说过,例如,在C/C ++中,在运行时发现类型的性能不佳.要绕过这一点,通常您将类型成员添加到类中,因此您可以对其进行比较而不是铸造. 我在整个www中都没有找到明确的答案. 这是我要问的一个示例 - 与其他类型检查方法相比,这是 fast (如上所述,还是我不知道的其他类型)? func question(anything interface{}) { switch v := anything.(type) { case string: fmt.Println(v) case int32, int64: fmt.Println(v) case SomeCustomType: fmt.Println(v) default: f
4 2023-10-30
编程技术问答社区
点括号 "语法的含义是什么?
我正在研究将数据存储在mongoDB中的样本GO应用程序.该行中的代码(/blob/master/context.go#l36 )似乎访问了存储在大猩猩会话中的用户ID: if uid, ok := sess.Values["user"].(bson.ObjectId); ok { ... } 有人可以在这里向我解释语法吗?我了解sess.Values["user"]从会话中获得一个值,但是随后的部分是什么?为什么括号中的点之后的表达方式?这是函数调用吗? 解决方案 sess.Values["user"]是interface{},括号之间的内容称为 a> .它检查sess.Values["user"]的值是否为bson.ObjectId类型.如果是,那么ok将为true.否则,它将是false. 例如: var i interface{} i = int(42) a, ok := i.(int) // a == 42 and ok == true b
2 2023-10-13
编程技术问答社区
通过字符串名称将结构类型分型为特定的结构类型
我想通过使用struct/interface的字符串名称值来将特定变量输入特定定义的结构/接口. 例如: type Testing interface{} 和新变量 stringName := "Testing" newTestingVariable.(stringName) 这可能偶然吗?也许使用反射? 欢呼 解决方案 这是不可能的. GO是一种静态打字的语言,这意味着必须在编译时知道变量和表达式的类型. 在 type断言: x.(T) [...]如果类型断言成立,则表达式的值是存储在x中的值,其类型为T. . 因此,您使用类型断言获取(或测试)您指定的类型的值. 何时会这样: stringName := "Testing" newTestingVariable.(stringName) 类型断言结果的类型是什么?你没有告诉.您指定了包含类型名称的string值,但这只能在运行时确定. (是的,在上面的示例中,
6 2023-10-03
编程技术问答社区
从一个类型断言的界面片中删除一个元素
在戈兰(Golang)宣称切片后,如何从上述切片中删除元素? 例如,以下返回错误cannot assign to value.([]interface {}) value.([]interface{}) = append(value.([]interface{})[:i],value.([]interface{})[i+1:]...) 解决方案 如果您的接口中包裹了切片值,则无法更改它.您无法更改任何包裹在接口中的值. 创建接口值以包装值时,将制作并存储在接口中. 当您输入键入时,您将获得该值的副本,但是您不能在接口中更改值.这就是为什么不允许它为其分配值的原因,好像允许它一样,您只会为副本分配一个新值(您是由于类型断言而获得的).但是,存储在接口中的值将不更改. 如果这确实是您想要的,则必须将切片指针存储在界面中,例如*[]interface{}.这不会改变您无法更改界面中值的事实,但是由于这是指指针,我们不想更改指针,而是 pointed 值(这是
6 2023-09-04
编程技术问答社区
是否有更简单的方法在Go中对这个json进行解码?
我试图将一些JSON从JIRA解析为变量.这是使用go-jira软件包( https://godoc.org/github.com/andygrunwald/go-jira ) 目前,我有一些代码来吸引开发人员: dev := jiraIssue.Fields.Unknowns["customfield_11343"].(map[string]interface{})["name"] 和team := jiraIssue.Fields.Unknowns["customfield_12046"].([]interface{})[0].(map[string]interface{})["value"] 让团队成为来自. 的一部分 让他们参加的团队有点粗糙,除了必须键入断言,设置索引,然后再次输入断言外,还有一种更干净的方式来获得团队吗? 这是完整的JSON(修改但结构相同,其方式太长): { "expand":"renderedFields,
18 2023-05-23
编程技术问答社区
为什么在一个直接实现的接口上的这个类型断言会失败?
我在GO的类型断言机制上挣扎.在下面的示例中,Qux.(Bar)的类型断言失败. 为什么直接实现DoBar() at Qux Bar接口不完全填充? 包装主 import ( "fmt" ) type Nameable interface { Name() string } type Foo interface { Nameable DoFoo() string } type Bar interface { Nameable DoBar() string } type bar struct { name string } func (b bar) Name() string { return b.name } // Qux embeds bar and is expected to fullfill Nameable interface type Qux struct { bar }
32 2023-03-27
编程技术问答社区
Golang:将一个接口动态地转换为一个类型的变量
在Go中,是否可以动态地投射变量? 例如,如果简单的演员阵容是: var intAge = interfaceAge.(int) 如果我不知道年龄是事先的,该怎么办?一种简单的写作方式将是 var x = getType() var someTypeAge = interfaceAge(.x) 是否有一种实现这样的方法?反射软件包提供了一些在运行时确定或施放类型的方法 - 但是我找不到上述内容(一种适用于所有类型的通用方案). 解决方案 不,你不能. GO是一种静态的打字语言.变量的类型在编译时间确定. 如果要动态确定interface{}的type,则可以使用类型开关: var t interface{} t = functionOfSomeType() switch t := t.(type) { default: fmt.Printf("unexpected type %T", t) // %T prints wh
44 2023-03-08
编程技术问答社区
在Golang中使用类型断言检测数值超出范围的错误
给定以下代码: iv, err := strconv.ParseInt("18446744073709551448", 10, 64) fmt.Println(iv) fmt.Printf("%#v\n", err) fmt.Printf("%v\n", err) //Output: 9223372036854775807 &strconv.NumError{Func:"ParseInt", Num:"18446744073709551448", Err:(*errors.errorString)(0x1040a040)} strconv.ParseInt: parsing "18446744073709551448": value out of range 如何检测该函数由于不超出INT64的范围而失败? strconv.parseint 函数返回错误类型,但在这种情况下,它实际上是a strconv.numerror 按照%#v指示键入. 错误处理和go 文章提到您可以使
24 2022-10-14
编程技术问答社区
为什么地图和类型断言可以返回1或2个值?
要定义一个地图,我们可以这样做: value, present := m["key"] 或: value := m["key"] 通过类型断言,我们可以做到: var i interface{} = "hello" s := i.(string) fmt.Println(s) s, ok := i.(string) fmt.Println(s, ok) 但我找不到定义可以返回 1 个值或 2 个值的函数的方法. 例如: func hello() (string, error) { return "world", nil } 当我调用这个函数时,我得到: v, ok := hello() // valid v := hello() // invalid PS:我知道像 template.Must 这样的东西是如何工作的,但它似乎有所不同.我真的很想知道 Map 和类型断言是如何发挥作用的,所以我可以将它应用到函数中. 提前致
252 2022-08-15
编程技术问答社区
Golang中的 "点括号 "语法是什么意思?
我正在研究一个将数据存储在 mongodb 中的示例 Go 应用程序.这一行的代码 (https://github.com/zeebo/gostbook/blob/master/context.go#L36) 似乎访问了存储在 gorilla 会话中的用户 ID: if uid, ok := sess.Values["user"].(bson.ObjectId); ok { ... } 有人可以向我解释一下这里的语法吗?我知道 sess.Values["user"] 从会话中获取一个值,但是接下来的部分是什么?为什么括号中的点后面的表达式?这是函数调用吗? 解决方案 sess.Values["user"]是一个interface{},括号之间的就叫类型断言.它检查 sess.Values["user"] 的值是否属于 bson.ObjectId 类型.如果是,则 ok 将是 true.否则,它将是 false. 例如: var i interface{} i =
314 2022-08-15
编程技术问答社区
如何将nil接口转换为nil其他接口
我有一个经典的 Go nil 界面问题. 我正在尝试将我从 nil error 分配的 interface{} 断言回 error 接口.这句话令人困惑,所以我有一个方便的例子:https://play.golang.com/p/Qhv7197oIE_z package main import ( "fmt" ) func preferredWay(i interface{}) error { return i.(error) } func workAround(i interface{}) error { if i == nil { return nil } return i.(error) } func main() { var nilErr error fmt.Println(workAround(nilErr)) // Prints "" as expected. fm
362 2022-08-14
编程技术问答社区
golang无效操作:类型接口{}不支持索引
我是 golang 新手,在读取嵌套 JSON 响应时遇到问题. var d interface{} json.NewDecoder(response.Body).Decode(&d) test :=d["data"].(map[string]interface{})["type"] response.Body 看起来像这样 { "links": { "self": "/domains/test.one" }, "data": { "type": "domains", "id": "test.one", "attributes": { "product": " Website", "package": "Professional", "created_at": "2016-08-19T11:37:01Z" }
14906 2022-07-17
编程技术问答社区