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)
}

这个实现使用了:

  1. map[string]Atom 存储原子数据,便于通过符号查找
  2. 结构体Atom使数据组织更清晰
  3. fmt.Scan()接收用户输入
  4. 独立的函数处理电负性计算和键类型判断
  5. switch语句处理键类型分类,便于扩展

要添加新原子,只需在atomsmap中添加新条目即可。

回到顶部