一、Java、C++、C程序员在学习编写Go时存在的误区 当Java、C++、C等编程语言的程序员开始学习编写Go语言时,可能会遇到一些误区,因为Go在某些方面与这些传统语言有所不同。以下是一些常见的误区:
过度使用传统的并发模型: 传统的编程语言如Java、C++、C在处理并发时通常使用线程和锁来实现,但在Go中,使用协程(goroutine)和通道(channel)是更好的方式。新学习Go的程序员可能会继续使用传统的并发模型,而不充分利用Go的轻量级协程和通道,从而失去了Go的并发优势。
过度使用指针: C和C++等语言强调指针的使用,但Go语言在设计时避免了过多的指针操作。新学习Go的程序员可能会过度使用指针,导致代码变得复杂。在Go中,尽量避免使用指针,除非真正需要对值进行修改。
忽视错误处理: Go鼓励显式地处理错误,而不是简单地忽略它们。这与一些其他语言的习惯不同,其中错误往往被忽略或简单地抛出。新学习Go的程序员可能会忽视错误处理,导致潜在的问题未被检测到。
过度使用全局变量: 在C和C++等语言中,全局变量可能是常见的做法。然而,在Go中,全局变量的使用被视为不良实践。Go鼓励使用局部变量和传递参数的方式来传递数据,以避免引入不必要的耦合和副作用。
不熟悉切片和映射: Go中的切片和映射是强大的数据结构,但对于其他语言的程序员来说可能不太熟悉。学习如何正确使用切片和映射是很重要的,因为它们在Go中广泛用于集合和数据处理。
错误的Go风格: 每种语言都有其独特的编码风格和惯例。新学习Go的程序员可能会在Go代码中应用其他语言的编码风格,这可能会使代码难以阅读和理解。
二、环境准备(以Mac说明)
一)环境设置
在macOS上设置Go语言开发环境非常简单,可以按照以下步骤进行操作:
一)环境设置
在macOS上设置Go语言开发环境非常简单,可以按照以下步骤进行操作:
-
使用Homebrew安装: 如果您使用Homebrew包管理器,这是最方便的方法。打开终端,并运行以下命令来安装Go语言:
brew install go -
手动安装: 如果想手动安装Go语言,可以按照以下步骤操作:
a. 访问官方网站[下载安装包`goX.X.X.darwin-amd64.pkg](https://golang.org/dl/%EF%BC%89%E5%B9%B6%E4%B8%8B%E8%BD%BD%E9%80%82%E7%94%A8%E4%BA%8EmacOS%E7%9A%84%E5%AE%89%E8%A3%85%E5%8C%85%EF%BC%8C%E9%80%9A%E5%B8%B8%E6%98%AF%E4%B8%80%E4%B8%AA%E5%90%8D%E4%B8%BA%60goX.X.X.darwin-amd64.pkg%60%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E5%85%B6%E4%B8%AD%60X.X.X%60%E8%A1%A8%E7%A4%BAGo%E7%9A%84%E7%89%88%E6%9C%AC%E5%8F%B7%E3%80%82 "下载安装包`goX.X.X.darwin-amd64.pkg ")
b. 双击下载的安装包,按照指示运行安装程序。按照默认设置即可,安装路径通常是`/usr/local/go`。
3.设置环境变量: 一旦安装完成,需要将Go语言的二进制路径添加到自己的终端配置文件中的PATH环境变量中。这样就可以在终端中直接运行Go命令。
a. 打开终端,并使用文本编辑器(如nano、vim或任何您喜欢的编辑器)编辑终端配置文件。例如:
nano ~/.bash_profile b. 在文件中添加以下行(根据安装路径进行调整),然后保存并退出编辑器:
export PATH=$PATH:/usr/local/go/bin c. 使配置生效,可以运行以下命令或者重启终端:
source ~/.bash_profile
4.1. 验证安装: 打开终端,输入以下命令来验证Go是否已正确安装:
```
go version
```
如果看到了Go的版本号,表示安装成功。
(二)IDE选择说明
我个人使用的GoLand,直接官网下载后,上网购买破解版即可,这里不在多说!
三、Go语言程序学习 创建自己的工程目录/Users/zyf/zyfcodes/go/go-learning,新建src目录。
(一)第一个Go语言编写 src目录下创建chapter1/hello目录,新建hello.go文件,编写代码如下:
package main
import (
"fmt"
"os"
)
/**
* @author zhangyanfeng
* @description 第一个godaima
* @date 2023/8/20 23:45
* @param
* @return
**/
func main() {
if len(os.Args) > 1 {
fmt.Println("Hello World", os.Args[1])
}
}
这段代码是一个简单的Go语言程序,它接受命令行参数并打印出一条带参数的 "Hello World" 消息。下面是对代码的逐行分析:
package main: 声明这个文件属于名为 "main" 的包,这是一个Go程序的入口包名。
import ("fmt" "os"): 引入了两个标准库包,分别是 "fmt" 用于格式化输出,和 "os" 用于与操作系统交互。
func main() { ... }: 这是程序的入口函数,它会在程序运行时首先被调用。
if len(os.Args) > 1 { ... }: 这个条件语句检查命令行参数的数量是否大于1,也就是判断是否有参数传递给程序。os.Args 是一个字符串切片,它包含了所有的命令行参数,第一个参数是程序的名称。
fmt.Println("Hello World", os.Args[1]): 如果有参数传递给程序,就会执行这行代码。它使用 fmt.Println 函数打印一条消息,消息由字符串 "Hello World" 和 os.Args[1] 组成,os.Args[1] 表示传递给程序的第一个参数。
综上所述,这段代码涵盖了以下知识点:
包导入和使用标准库:通过 import 关键字导入 "fmt" 和 "os" 包,然后在代码中使用这些包提供的函数和类型。
命令行参数获取:使用 os.Args 获取命令行参数。
条件语句:使用 if 条件语句来判断是否有命令行参数传递给程序。
字符串操作:使用字符串连接操作将 "Hello World" 与命令行参数拼接在一起。
格式化输出:使用 fmt.Println 函数将消息输出到标准输出。
注意:如果没有传递参数给程序,那么这段代码不会打印任何消息。如果传递了多个参数,代码只会使用第一个参数并忽略其他参数。
在该目录下执行“go run hello.go ZYF”,运行结果为“Hello World ZYF”。