Go 语法基础
1. 结构体
Go语言中的结构体是一种用户定义的数据类型,可以用来表示一组相关字段的集合。在代码示例中,我们定义了一个名为"user"的结构体,用于表示用户的信息,包括姓名(name)和密码(password)。结构体可以拥有方法,这些方法可以对结构体进行操作。
方法1:checkPassword
checkPassword方法用于检查用户密码是否正确。它接收一个字符串参数password,并返回一个布尔值表示密码是否匹配。
方法2:resetPassword
resetPassword方法用于重置用户的密码。它接收一个字符串参数password,并将结构体中的密码字段更新为新密码。
主函数main
在主函数中,我们首先创建一个用户实例a,并通过调用resetPassword方法将其密码重置为"2048"。然后,我们调用checkPassword方法检查密码是否正确,并输出结果。
// 定义一个用户结构体
type user struct{
name string
password string
}
// 定义一个检查密码是否正确的方法
func(u user) checkPassword(password string) bool{
return u.password==password
}
// 定义一个重置密码的方法
func (u *user) resetPassword(password string){
u.password=password
}
func main() {
// 创建一个用户实例
a:=user{name:"w",password: "1024"}
// 重置密码
a.resetPassword("2048")
// 检查密码是否正确并输出结果
fmt.Println(a.checkPassword("2048"))
}
2. JSON处理
JSON(JavaScript Object Notation)是一种常用的数据交换格式,Go语言提供了对JSON的编码和解码支持。在代码示例中,我们定义了一个用户结构体,其中年龄字段使用了json标签。
json.Marshal
json.Marshal函数将用户结构体转换为JSON格式的字节切片。
json.MarshalIndent
json.MarshalIndent函数将用户结构体转换为JSON格式的字节切片,并进行格式化,增加了可读性。
json.Unmarshal
json.Unmarshal函数用于将JSON格式的数据解码为用户结构体。
// 导入必要的包
package main
import (
"encoding/json" // 导入json包
"fmt" // 导入fmt包
)
// 定义用户结构体
type user struct {
name string // 用户名
Age int `json:"age"` // 年龄,使用json标签
Password []string // 密码,使用字符串切片
}
// 主函数
func main() {
// 创建用户实例
a := user{name: "12w", Age: 18, Password: []string{"q421"}}
// 将用户实例转换为json格式
buf, err1 := json.Marshal(a)
if err1 != nil {
panic(err1)
}
// 输出json格式的用户实例
fmt.Println(buf)
// 输出json格式的用户实例,转换为字符串格式
fmt.Println(string(buf))
// 将用户实例转换为json格式,并进行格式化
buf, err1 = json.MarshalIndent(a, "", "\t")
if err1 != nil {
panic(err1)
}
// 输出格式化后的json格式的用户实例,转换为字符串格式
fmt.Println(string(buf))
// 将json格式的用户实例转换为用户结构体
var b user
err1=json.Unmarshal(buf,&b)
if err1!=nil{
panic(err1)
}
// 输出转换后的用户结构体
fmt.Printf("%#v",b)
}
3. 数字解析
在Go语言中,strconv包提供了字符串和基本数据类型之间的转换函数。在代码示例中,我们使用strconv.ParseFloat函数将字符串"1.1234"转换为浮点型数值。
strconv是Go语言中的一个标准内置包,它提供了各种函数实现,用于将字符串转换为int, float, boolean等类型。
func ParseT(inputstring string, bitSize int) (精度, error)
package main
import(
"fmt"
"strconv"
)
func main(){
f,_:=strconv.ParseFloat("1.1234",64)//转化为浮点型
//把Float替换为Int则是转化为整型
n,_:=strconv.Atoi("123")//自动转化,反过来Rtoi
}
4. 进程信息
在Go语言中,os和os/exec包提供了与操作系统交互和执行外部命令的函数。在代码示例中,我们演示了如何获取命令行参数、获取和设置环境变量,以及执行外部命令并获取输出结果。
os.Args
os.Args是一个字符串切片,包含了命令行传入的所有参数。
os.Getenv
os.Getenv函数用于获取指定环境变量的值。
os.Setenv
os.Setenv函数用于设置指定环境变量的值。
exec.Command
exec.Command函数用于执行外部命令。它接收命令名和命令参数作为参数,并返回一个*Cmd类型的实例,代表了正在准备执行的命令。
CombinedOutput
CombinedOutput方法用于执行命令,并返回命令的标准输出和标准错误合并后的输出结果。
// 导入必要的包
package main
import(
"fmt" // 格式化输入输出
"os" // 提供了一些与操作系统交互的函数和变量
"os/exec" // 执行外部命令
)
func main(){
fmt.Println(os.Args) // 打印命令行参数
fmt.Println(os.Getenv("PATH")) // 获取环境变量
fmt.Println(os.Setenv("AA","BB")) // 设置环境变量
buf,err:=exec.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput() // 执行命令
if err!=nil{
panic(err) // 如果出错则抛出异常
}
fmt.Println(string(buf)) // 打印命令输出结果
}
总结
本文介绍了Go语言中结构体、JSON处理、数字解析和进程信息相关的基础知识。结构体是一种用于组织数据的数据类型,可以包含字段和方法。JSON处理是在Go语言中进行数据编码和解码的常见操作,用于数据交换和存储。数字解析是将字符串转换为数字类型的常见需求,Go语言中的strconv包提供了相应的函数支持。进程信息相关的操作允许我们与操作系统交互,获取命令行参数、环境变量,并执行外部命令。
在学习和使用这些知识点时,我们需要注意错误处理,避免程序运行过程中发生未处理的异常。同时,理解和熟练使用这些基础知识是编写更复杂、功能更强大的Go程序的基础。在实际项目中,可以根据需求扩展这些基础知识,实现更加复杂的功能和逻辑。
请注意,本文中的示例代码可能不完整或包含错误,建议在实际开发中结合文档和实践进行学习和调试。