我是Golang的新手,希望为物理设备建模,以测量光强度,质量,电流等数量。因此,作为起点,我将按如下方式定义设备结构:
const (
// Light can be measured in the form of luminosity
Light = 1<< iota
Mass
ElectricalCurrent
)
type PhysicalDevice struct{
Owner string
ID string
Description string
}
我现在很困惑如何表达设备的功能(它可以测量什么)和测量单位。例如,我想表达一个物理设备可以测量安培的电流。但是,我还想表达一下,PhysicalDevice可以测量多个数量。例如,它可以测量电流和温度。
PhysicalDevice的功能事先不知道,可以包含任意组合的功能。
我在考虑使用与C ++ bitset相当的东西来表示设备可以测量的物理量(这首先是正确的方法吗?)。
我没有找到Go bitset类型,也不确定如何表达。我还需要将测量的物理量映射到相应的单位。
答案 0 :(得分:2)
使用= 1 << iota
定义功能:
const (
Light Capability = 1 << iota
Mass
ElectricalCurrent
Energy
)
请注意,表达式仅在第一个常量上需要。相同的表达式(但更新值为iota
)将用于同一组中的连续行。
这是一个完整的工作示例:
package main
import (
"fmt"
"strings"
)
type Capability int
const (
// Light can be measured in the form of luminosity
Light Capability = 1 << iota
Mass
ElectricalCurrent
Energy
)
func (c Capability) String() string {
var caps []string
if c&Light > 0 {
caps = append(caps, "Light")
}
if c&Mass > 0 {
caps = append(caps, "Mass")
}
if c&ElectricalCurrent > 0 {
caps = append(caps, "ElectricalCurrent")
}
if c&Energy > 0 {
caps = append(caps, "Energy")
}
return strings.Join(caps, "|")
}
type PhysicalDevice struct {
Owner string
ID string
Description string
Capability Capability
}
func (pd PhysicalDevice) String() string {
return "Owner: " + pd.Owner + "\n" +
"ID: " + pd.ID + "\n" +
"Description: " + pd.Description + "\n" +
"Capability: " + pd.Capability.String() + "\n"
}
func main() {
dev := PhysicalDevice{
Owner: "Albert Einstein",
ID: "E=mc^2",
Description: "My well-known formula as a device",
Capability: Energy | Mass | Light,
}
fmt.Println(dev)
}
代码可以在The Go Playground找到。
答案 1 :(得分:1)
你应该明白,试图在Go中复制另一种语言的功能通常被认为是一个坏主意。有一个&#39; go&#39;做事的方式。
您可能需要考虑$(document).ready(function(){
$(".saninput").each(function( index ) {
alert($(this).val());
});
});
和像this example on the Go playground这样的位掩码操作。我也在这里包含了代码(在所有剽窃的荣耀中):
iota