Golang中用户输入与变量选择的最佳实践探讨
Golang中用户输入与变量选择的最佳实践探讨 我需要研究switch语句还是其他方法,或者我理解错了?
我想我只需要写一个函数,对吧!?
我希望知道,如果我修改这段代码以允许用户输入选择两个原子(atom_A 和 atom_B),我能否编写代码,让if语句接收用户请求的原子,查看这些原子对应的数组切片,并输出其负电性原子键类型。我已经为三种原子键类型编写了if语句。
否则,我就必须为数组切片变量块中的每一对原子编写if else代码。我知道目前只有氢和氧。
但我希望将来也能包含其他原子…
package main
import (
"fmt"
)
var (
// Atom Slice Array's [Electron's,Proton's,Neutron's,ElectroNegativity]
atom_H = []float32 {1,1,0,2.20}
atom_O = []float32 {8,8,8,3.44}
// Molecule Element Count [In Order OF Element's]
molecule_H2O = []string {"2","1"}
electronegativity_difference float32 = 0
)
func main() {
fmt.Printf("Hydrogen:\nE:%v P:%v N:%v EN:%v\n",atom_H[0],atom_H[1],atom_H[2],atom_H[3])
fmt.Printf("Oxygen:\nE:%v P:%v N:%v EN:%v\n",atom_O[0],atom_O[1],atom_O[2],atom_O[3])
fmt.Println("H20:",molecule_H2O[0:]) //Println function good for printing 'string slices'.
goto atomic_bond
atomic_bond:
if (atom_O[3] - atom_H[3]) > 0 {electronegativity_difference = (atom_O[3] - atom_H[3])
} else {electronegativity_difference = (atom_H[3] - atom_O[3])}
if electronegativity_difference >= 0.0 && electronegativity_difference <0.3 {fmt.Println("nonpolar-covalent bond")
} else if electronegativity_difference >=0.3 && electronegativity_difference <1.4 {fmt.Println("polar-covalent bond")
} else if electronegativity_difference >1.4 {fmt.Println("ionic bond")}
fmt.Println()
}
更多关于Golang中用户输入与变量选择的最佳实践探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
请编辑您的问题,确保所有代码都已正确格式化。选中您的代码并点击编辑器顶部的</>按钮。这将格式化您的代码,以便我们能够阅读它。
更多关于Golang中用户输入与变量选择的最佳实践探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中处理用户输入和变量选择,使用map结合switch或if语句是最佳实践。以下是改进后的代码示例:
package main
import (
"fmt"
)
type Atom struct {
Electrons float32
Protons float32
Neutrons float32
Electronegativity float32
}
var atoms = map[string]Atom{
"H": {1, 1, 0, 2.20},
"O": {8, 8, 8, 3.44},
"C": {6, 6, 6, 2.55},
"N": {7, 7, 7, 3.04},
}
func getBondType(diff float32) string {
switch {
case diff >= 0.0 && diff < 0.3:
return "nonpolar-covalent bond"
case diff >= 0.3 && diff < 1.4:
return "polar-covalent bond"
case diff >= 1.4:
return "ionic bond"
default:
return "invalid bond"
}
}
func calculateElectronegativityDiff(atomA, atomB Atom) float32 {
diff := atomA.Electronegativity - atomB.Electronegativity
if diff < 0 {
return -diff
}
return diff
}
func main() {
var atomA, atomB string
fmt.Print("Enter first atom symbol (H, O, C, N): ")
fmt.Scan(&atomA)
fmt.Print("Enter second atom symbol (H, O, C, N): ")
fmt.Scan(&atomB)
a, existsA := atoms[atomA]
b, existsB := atoms[atomB]
if !existsA || !existsB {
fmt.Println("Invalid atom symbol entered")
return
}
fmt.Printf("\n%s: E:%.0f P:%.0f N:%.0f EN:%.2f\n",
atomA, a.Electrons, a.Protons, a.Neutrons, a.Electronegativity)
fmt.Printf("%s: E:%.0f P:%.0f N:%.0f EN:%.2f\n",
atomB, b.Electrons, b.Protons, b.Neutrons, b.Electronegativity)
diff := calculateElectronegativityDiff(a, b)
bondType := getBondType(diff)
fmt.Printf("\nElectronegativity difference: %.2f\n", diff)
fmt.Printf("Bond type: %s\n", bondType)
}
这个实现使用了:
map[string]Atom存储原子数据,便于通过符号查找- 结构体
Atom使数据组织更清晰 fmt.Scan()接收用户输入- 独立的函数处理电负性计算和键类型判断
- switch语句处理键类型分类,便于扩展
要添加新原子,只需在atomsmap中添加新条目即可。

