go为什么不能直接比较空字符串
String 是对象,如果用==号就是比较两个String对象内存地址是否一样,equals()比较的是String内容时候一样,不过不同的编程语言两者不太一样
go语言教程
下面是一份简单的 Go 语言教程,适合初学者入门:
1. 安装 Go 语言环境:下载安装包并安装完成后,设置环境变量。
2. 学习基础语法:Go 语言的基础语法简单易学,可以通过学习变量、数据类型、运算符、条件语句、循环语句等基础语法进行入门。
3. 理解函数:函数是Go语言的重要部分,可以通过函数的定义和使用来体验Go语言的特性。
4. 了解数组和切片:数组和切片是Go语言中的常用数据结构,可以通过学习数组和切片的基本操作来提高代码的效率。
5. 了解结构体和面向对象:Go 语言不像其他语言那样有类、继承和多态等面向对象的概念,但支持结构体,可以通过结构体的定义和方法来实现面向对象的编程。
6. 掌握并发编程:Go 语言天生支持并发编程,可以方便地进行协程、通道等操作,可以学习并发编程以提高代码的效率。
7. 学习标准库:Go 语言的标准库非常丰富,涵盖了大量常用的功能,例如字符串处理、文件操作、网络编程等,可以阅读官方文档来了解标准库的使用。
总之,学习过程中要多写代码并进行实践,这样才能更好地掌握 Go 语言。
如何使用Go语言实现远程执行命令
import (
"bytes"
"fmt"
"os/exec"
)
func exec_shell() (string, error){
//函数返回一个*Cmd,用于使用给出的参数执行name指定的程序
cmd := exec.Command("shutdown", "-h","now")
//读取io.Writer类型的cmd.Stdout,再通过bytes.Buffer(缓冲byte类型的缓冲器)将byte类型转化为string类型(out.String():这是bytes类型提供的接口)
var out bytes.Buffer
cmd.Stdout = &out
//Run执行c包含的命令,并阻塞直到完成。 这里stdout被取出,cmd.Wait()无法正确获取stdin,stdout,stderr,则阻塞在那了
err := cmd.Run()
return out.String(), err
}
func main(){
if result,err:=exec_shell();err!=nil{
fmt.Println("error:",err)
}else{
fmt.Println("exec succ ", result)
}
}
go的所有知识点
以下几个方面:
1. 基础语法:包括数据类型、变量、常量、运算符、控制流程等基本语法元素。
2. 函数和方法:包括函数和方法的定义、传参和返回值、匿名函数、变参函数等。
3. 数据结构:包括数组、切片、链表、栈、队列、树、图等常用数据结构的使用和操作。
4. 并发编程:包括goroutine的创建和管理、channel的使用、锁机制、waitGroup、select语句等。
5. 错误处理:包括错误类型定义、错误处理机制、错误传播、defer语句等。
6. 文件操作:包括文件的读写、文件打开和关闭、文件指针的定位等。
7. 网络编程:包括TCP和UDP的网络编程、socket操作、HTTP请求和响应、解析和生成JSON/XML等。
8. 包和模块:包括包的导入和使用、包的初始化和生命周期、模块的划分和设计。
9. 反射:包括类型的反射、值的反射、方法的反射、通过反射获取和修改对象的属性和方法等。
10. 测试和调试:包括单元测试、性能测试、代码覆盖率、调试技巧等。
11. 高级特性:包括接口、结构体、匿名字段、类型断言、类型转换、函数回调、嵌套函数等高级语法和特性。
12. 项目实践:包括项目的组织架构、代码规范、文档编写、版本控制、持续集成等实践经验。
以上只是Go语言的一些常用知识点,还有很多其他的特性和技巧可以深入学习和了解。
还没有评论,来说两句吧...