Golang里的类型断言及注意问题

go语言里的断言功能是对 interface 类型的识别,可以对内置类型及自定义类型作识别。

Golang里的类型断言及注意问题

参见下面的代码:

Go:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
	"fmt"
)

type (
	mb  = []byte
	ms  = string
	mb2 []byte
)

func (b mb2) String() string {
	return string(b)
}

func main() {
	var ss ms
	ss = "hikj"
	itfs := []interface{}{
		mb{97, 98, 99},
		"def",
		[]byte{103, 104, 105},
		ss,
		mb2{97, 98, 99},
	}
	for _, v := range itfs {
		switch vs := v.(type) {
		case string:
			fmt.Println("v is string", vs)
		case []byte:
			fmt.Println("v is []byte", string(vs))
		case mb2:
			fmt.Println("v is mb2", vs.String())
		}
	}
}

运行输出:

1
2
3
4
5
v is []byte abc
v is string def
v is []byte ghi
v is string hikj
v is mb2 abc

注意的问题

使用类型别名时是相同的类型

1
2
mb  = []byte
	ms  = string

使用类型再定义时是不同的类型

1
mb2 []byte

如果使用别名就添加不了自定义方法,如果要使用类型再定义,则在断言里需要指定识别该类型。

本文网址: https://pylist.com/topic/199.html 转摘请注明来源

Suggested Topics

在 Nginx 和 Golang web 上抢先体验 QUIC

QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于 UDP 的传输协议,它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低网络延迟。QUIC 是使用 UDP 协议,可以与原来的 TCP 服务不冲突。...

一个简单高效的LRU 缓存,golang 实现

LRU(Least recently used,最近最少使用)是根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。...

golang 计算大文件md5

以前介绍过用python 计算大文件的md5 值,这里将介绍使用 golang 计算大文件md5...

go map 的性能问题

Map 是 go 语言里最常用的数据结构之一,想必都很关注它的性能。下面是一些关于go map 的性能问题的经验,仅供参考...

使用Golang selenium WebDriver 自动登录微博

有时候在Golang 程序里需要读取微博的某个页面内容,提示需要登录。最简单的方法是在浏览器里登录后,直接复制Cookie 的内容,然后 http 请求带上Cookie。这样会有人工介入,不是很方便,这里借用 selenium WebDriver 来打开微博登录页面,然后自动填入用户名与密码。...

Golang结合OpenCC实现高效的中文简体繁体互转

之前在页面中使用简体转繁体的功能一般是使用JS对页面进行字典替换,这样可以解决大部分问题,但要进行精确的转换,才发现简繁体的转换是个复杂的过程。幸好有个非常棒的繁体转简体开源项目OpenCC可以很好的工作。...

Leave a Comment