- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个允许传入值片段的包/API。例如:
type ConstType string
const (
T_Option1 ConstType = "OPTION-1"
T_Option2 ConstType = "OPTION-2"
T_Option3 ConstType = "OPTION-3"
)
注意这个类型是字符串的别名。
我遇到的我认为是非惯用步骤的地方是我无法将这种类型别名的一部分转换或推断为 []string
slice 。
type constTypes struct {
types []ConstType
}
func (s *constTypes) SetConstTypes(types []ConstType) {
s.types = types
}
func (s *constTypes) String() string {
// this generates a compile error because []ConstType is not
// and []string.
//
// but, as you can see, ConstType is of type string
//
return strings.Join(s.types, ",")
}
我把它放在 Playground 上来展示一个完整的例子:
http://play.golang.org/p/QMZ9DR5TVR
我知道 Go 的解决方案是将其转换为类型(显式类型转换,喜欢这个规则!)。我只是不知道如何在不遍历集合的情况下将类型的一部分转换为 []string。
我喜欢 Go 的原因之一是强制执行类型转换,例如:
c := T_OPTION1
v := string(c)
fmt.Println(v)
播放:http://play.golang.org/p/839Qp2jmIz
不过,我不确定如何在不循环的情况下跨 slice 执行此操作。我必须循环吗?
鉴于此,遍历集合并不是什么大问题,因为最多只能设置 5 到 7 个选项。但是,我仍然觉得应该有一种可转换的方法来做到这一点。
最佳答案
正如@Not_a_Golfer 指出的那样,您确实应该遍历 constType
slice 并构建一个新的 string
slice 。这有复制每个元素的缺点(这对您来说可能重要也可能不重要)。
还有另一种解决方案,尽管它涉及标准库中的unsafe
包。我修改了您发布到 Go Playground 的示例(新链接是 http://play.golang.org/p/aLmvSraktF)
package main
import (
"fmt"
"strings"
"unsafe"
)
type ConstType string
const (
T_Option1 ConstType = "OPTION-1"
T_Option2 ConstType = "OPTION-2"
T_Option3 ConstType = "OPTION-3"
)
// constTypes is an internal/private member handling
type constTypes struct {
types []ConstType
}
func (s *constTypes) SetConstTypes(types []ConstType) {
s.types = types
}
func (s *constTypes) String() string {
// Convert s.types to a string slice.
var stringTypes []string // Long varibale declaration style so that you can see the type of stringTypes.
stringTypes = *(*[]string)(unsafe.Pointer(&s.types))
// Now you can use the strings package.
return strings.Join(stringTypes, ",")
}
func main() {
types := constTypes{}
// a public method on my package's api allows this to be set via a slice:
types.SetConstTypes([]ConstType{T_Option1, T_Option2, T_Option3})
fmt.Println(types.String())
}
关于types - 如何将别名类型(成本)连接到 strings.Join(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299180/
如果您想使用 String.Concat() 连接 5 个或更多字符串,则它会使用 Concat(String[])。 为什么不一直使用 Concat(String[]) 而不再需要 Concat(S
今天在使用 String 时,我遇到了一种我以前不知道的行为。我无法理解内部发生的事情。 public String returnVal(){ return "5";
似乎在我所看到的任何地方,都有一些过时的版本,这些版本不再起作用。 我的问题似乎很简单。我有一个Java类,它映射到derby数据库。我正在使用注释,并且已经成功地在数据库中创建了所有其他表,但是在这
一、string::size_type() 在C++标准库类型 string ,在调用size函数求解string 对象时,返回值为size_type类型,一种类似于unsigned类型的int 数据
我正在尝试将数据保存到我的 plist 文件中,其中包含字符串数组的定义。我的plist - enter image description here 我将数据写入 plist 的代码是 -- let
我有一个带有键/值对的 JavaScript 对象,其中值是字符串数组: var errors = { "Message": ["Error #1", "Error #2"], "Em
例如,为了使用相同的函数迭代 List 和 List> ,我可以编写如下内容: import java.util.*; public class Test{ public static voi
第一个Dictionary就像 Dictionary ParentDict = new Dictionary(); ParentDict.Add("A_1", "1")
这是我的 jsp 文件: 我遇到了错误 The method replace(String, String, String) in the type Functions is not appl
我需要一些帮助。我有一个方法应该输出一个包含列表内容的 txt 文件(每行中的每个项目)。列表项是字符串数组。问题是,当我调用 string.Join 时,它返回文字字符串 "System.Strin
一位同事告诉我,使用以下方法: string url = "SomeURL"; string ext = "SomeExt"; string sub = "SomeSub"; string s
给定类: public class CategoryValuePair { String category; String value; } 还有一个方法: public
我正在尝试合并 Stream>>对象与所有 Streams 中的键一起映射到单个映射中. 例如, final Map someObject; final List>> list = someObjec
在这里使用 IDictionary 的值(value)是什么? 最佳答案 使用接口(interface)的值(value)始终相同:切换到另一个后端实现时,您不必更改客户端代码。 请考虑稍后分析您的代
我可以知道这两个字典声明之间的区别吗? var places = [String: String]() var places = [Dictionary()] 为什么当我尝试以这种方式附加声明时,只有
在 .NET 4.0 及更高版本中存在 string.IsNullOrWhiteSpace(string) 时,在检查字符串时使用 string.IsNullOrEmpty(string) 是否被视为
这个名字背后的原因是什么? SS64在 PowerShell 中解释此处的字符串如下: A here string is a single-quoted or double-quoted string
我打算离开 this 文章,尝试编写一个接受字符串和 &str 的函数,但我遇到了问题。我有以下功能: pub fn new(t_num: S) -> BigNum where S: Into {
我有一个结构为 [String: [String: String]] 的多维数组。我可以使用 for 循环到达 [String: String] 位,但我不知道如何访问主键(这个位 [String:
我正在尝试使用 sarama(管理员模式)创建主题。没有 ConfigEntries 工作正常。但我需要定义一些配置。 我设置了主题配置(这里发生了错误): tConfigs := map[s
我是一名优秀的程序员,十分优秀!