Golang 第一个程序HelloWorld

1 gopath目录

gopath目录就是我们存储我们所编写源代码的目录。该目录下往往要有3个子目录:src,bin,pkg。

  • src ---- 里面每一个子目录,就是一个包。包内是Go的源码文件
  • pkg ---- 编译后生成的,包的目标文件
  • bin ---- 生成的可执行文件。

2 编写第一个程序

2.1.在HOME/go的目录下,(就是GOPATH目录里),创建一个目录叫src,然后再该目录下创建一个文件夹叫hello,在该目录下创建一个文件叫helloworld.go,并双击打开,输入以下内容:

package main
 
import "fmt"
 
func main() {
   fmt.Println("Hello, World!")
}


2.2.执行go程序

执行go程序由几种方式

方式一:使用go run命令

​ step1:打开终端:

​ window下使用快捷键win+R,输入cmd打开命令行提示符

​ linux下可以使用快捷键:ctrl+alt+T

​ mac下command+空格,输入termainl

​ step2:进入helloworld.go所在的目录

​ step3:输入go run helloworld.go命令并观察运行结果。

方式二:使用go build命令

​ step1:打开终端:在任意文件路径下,运行:
​ go install hello

​ 也可以进入项目(应用包)的路径,然后运行:
​ go install

注意,在编译生成go程序的时,go实际上会去两个地方找程序包:
GOROOT下的src文件夹下,以及GOPATH下的src文件夹下。

在程序包里,自动找main包的main函数作为程序入口,然后进行编译。

​ step2:运行go程序
​ 在/home/go/bin/下(如果之前没有bin目录则会自动创建),会发现出现了一个hello的可执行文件,用如下命令运行:
​ ./hello

3 第一个程序的解释说明


3.1 package

  • 在同一个包下面的文件属于同一个工程文件,不用import包,可以直接使用
  • 在同一个包下面的所有文件的package名,都是一样的
  • 在同一个包下面的文件package名都建议设为是该目录名,但也可以不是

3.2 import

import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包的函数,fmt 包实现了格式化 IO(输入/输出)的函数

可以是相对路径也可以是绝对路径,推荐使用绝对路径(起始于工程根目录)

点操作

我们有时候会看到如下的方式导入包

import(
 . "fmt"
) 

这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调

用的fmt.Println("hello world")可以省略的写成Println("hello world")

别名操作

别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字

import(
 f "fmt"
) 

别名操作的话调用包函数时前缀变成了我们的前缀,即f.Println("hello world")

_操作

这个操作经常是让很多人费解的一个操作符,请看下面这个import

import (
  "database/sql"
  _ "github.com/ziutek/mymysql/godrv"
) 


_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数

3.3 main

main(),是程序运行的入口。
 

go get的一些使用细节

添加-x参数:打印安装的具体过程,(golang安装遵循的是linux的哲学,没有消息就是最好的消息,所有默认是没有任何提示的)

添加-d参数:只下载代码包到src目录下,不编译和安装

添加-u参数:该命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包。

添加-f参数:仅在使用-u标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里Fork过来的,那么这样做就尤为重要了。

添加-fix参数:修复因Go语言规范变更而造成的语法级别的错误

添加-t参数:让命令额外下载代码包中测试源码文件中依赖的代码包

添加-insecure参数:允许命令程序使用非安全的scheme(如HTTP)去下载指定的代码包。如果你用的代码仓库(如公司内部的Gitlab)没有HTTPS支持,可以添加此标记。请在确定安全的情况下使用它。

你可能感兴趣的:(golang,golang)