1、设置环境变量
Go中需要配置三个环境变量,分别是:
【注意】将GOROOT和PATH配置到系统的环境变量中,但是GOPATH不直接在系统变量中配置成一个固定的配置,因为我们可能在一个系统中创建多个Go项目,每一个项目都需要配置一个GOPATH变量,这显然是繁琐而且非常难以管理的,所以我们在创建项目的时候,直接通过IDE在创建项目的时候来配置GOPATH变量,这样就可以给每个Go项目都配置上对应的GOPATH路径。
2、新建项目3、编写第一个go程序代码:package mainimport ( "fmt" "os")func main() { fmt.Println(os.Args) if len(os.Args) > 1 { fmt.Println("Hello World ", os.Args[1]) } os.Exit(-1)}
退出返回值
与其他主要编程语言的差异
fmt标准库地址:https://pkg.go.dev/fmt@go1.18.1
5.1、输出函数func Printf(format string, a ...interface{}) (n int, err error)
package mainimport "fmt"func main() { num := 15 fmt.Printf("十进制 = %d\n", num) fmt.Printf("八进制 = %o\n", num) fmt.Printf("十六进制 = %x\n", num) fmt.Printf("二进制 = %b\n", num)}
package mainimport "fmt"func main() { type Person struct { name string age int } num1 := 10 num2 := 3.14 per := Person{"lnj", 33} fmt.Printf("num1 = %T\n", num1) // int fmt.Printf("num2 = %T\n", num2) // float64 fmt.Printf("per = %T\n", per) // main.Person}
package mainimport "fmt"func main() { type Person struct { name string age int } num1 := 10 num2 := 3.14 per := Person{"lnj", 33} // 此时相当于把%v当做%d fmt.Printf("num1 = %v\n", num1) // 10 // 此时相当于把%v当做%f fmt.Printf("num2 = %v\n", num2) // 3.14}
采用默认格式将其参数格式化并写入标准输出输出之后会在结尾处添加换行传入多个参数时, 会自动在相邻参数之间添加空格,传入符合类型数据时, 会自动生成对应格式后再输出
package mainimport "fmt"func main() { num1 := 10 num2 := 3.14 fmt.Println(num1, num2) // 10 3.14 fmt.Println("num1 =", num1, "num2 =", num2) // num1 = 10 num2 = 3.14 type Person struct { name string age int } per := Person{"lnj", 33} fmt.Println(per) // {lnj 33}}
和Println几乎一样输出之后不会在结尾处添加换行传入多个参数时, 只有两个相邻的参数都不是字符串,才会在相邻参数之间添加空格传入符合类型数据时, 会自动生成对应格式后再输出
package mainimport "fmt"func main() { num1 := 10 num2 := 3.14 fmt.Print(num1, num2) // 10 3.14 fmt.Print("num1 =", num1, "num2 =", num2) // num1 =10 num2 =3.14 type Person struct { name string age int } per := Person{"lnj", 33} fmt.Print(per) // {lnj 33}}
以下三个函数和Printf/Println/Print函数一样, 只不过上面三个函数是输出到标准输出, 而下面三个函数可以通过w指定输出到什么地方
package mainimport ( "fmt" "net/http" "os")func main() { // os.Stdout 写入到标准输出 name := "lnj" age := 33 // 第一个参数: 指定输出到什么地方 // 第二个参数: 指定格式控制字符串 // 第三个参数: 指定要输出的数据 fmt.Fprintf(os.Stdout, "name = %s, age = %d\n", name, age) // http.ResponseWriter 写入到网络响应 http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { fmt.Fprintf(writer, "name = %s, age = %d\n", name, age) }) http.ListenAndServe(":8888", nil)}
以下三个函数和Printf/Println/Print函数一样, 只不过上面三个函数是输出到标准输出,而下面三个函数是将字符串返回
package mainimport ( "fmt" "net/http" "os")func main() { name := "lnj" age := 33 // 按照指定的格式生成字符串 str := fmt.Sprintf("name = %s, age = %d\n", name, age) // 输出生成的字符串 fmt.Println(str)}5.2、输入函数
package mainimport "fmt"func main() { var num1 int var num2 int fmt.Scanf("%d%d", &num1, &num2) fmt.Println(num1, num2)}
和C语言scanf函数几乎一样, 只不过不用指定格式化字符串
package mainimport "fmt"func main() { var num1 int var num2 int fmt.Scan(&num1, &num2) fmt.Println(num1, num2) var num3 float32 var num4 float32 fmt.Scan(&num3, &num4) fmt.Println(num3, num4)}
和C语言用法几乎一模一样, 只不过不用指定格式化字符串, 并且只能输入一行数据
package mainimport "fmt"func main() { var num1 int var num2 int fmt.Scanln(&num1, &num2) fmt.Println(num1, num2)}
以下三个函数和Scan/Scanln/Scanf函数一样, 只不过上面三个函数是从标准输入读取数据, 而下面三个函数可以通过r指定从哪读取数据
package main import "fmt" func main() { var num1 int var num2 int // 第一个参数: 指定从哪读取数据 // 第二个参数: 指定格式控制字符串 // 第三个参数: 指定要输出的数据 fmt.Fscanf(os.Stdin, "%d%d", &num1, &num2) fmt.Println(num1, num2) s := strings.NewReader("lnj 33") var name string var age int // 从指定字符串中扫描出想要的数据 // 注意: fmt.Fscanf(s, "%s%d", &name, &age) fmt.Println("name =",name, "age =",age) }
以下三个函数和Scan/Scanln/Scanf函数一样, 只不过上面三个函数是通过r指定从哪读取数据, 而下面三个函数是从字符串中读取数据
package main import "fmt" func main() { str := "lnj 33" var name string var age int //fmt.Sscanf(str, "%s %d",&name, &age) //fmt.Sscanln(str,&name, &age) fmt.Sscan(str,&name, &age) fmt.Println("name =",name, "age =",age) }
场景:如何从标准输入读取带空格的字符串?
方法:使用bufio包里带缓冲的Reader实现带空格字符串的输入
package intoutimport ( "bufio" "fmt" "os" "strconv" "strings")func ReadFromASpaceString() { inputReader := bufio.NewReader(os.Stdin) fmt.Println("Please input your name: ") //input, err := inputReader.ReadBytes('\n') input, err := inputReader.ReadString('\n') if err == nil { //fmt.Printf("Your bname is :%s, and type is %T\n", input, input) //ss := strings.Split(input, " ") ss := strings.Trim(input, "\n") ss1 := strings.Split(ss, " ") fmt.Printf("Your name is :%v, and type is %T\n", ss, ss) fmt.Printf("Your name is :%v, and type is %T\n", ss1, ss1) fmt.Printf("Your name is :%v, and type is %T\n", ss1[0], ss1[0]) num1, err := strconv.Atoi(ss1[0]) if err != nil { fmt.Println(err) } fmt.Printf("Your name is :%v, and type is %T\n", num1, num1) }}6、go命令行操作指令
标准go语言项目文件目录格式项目文件夹就是GOPATH指向的文件夹src文件夹是专门用于存放源码文件的main文件夹是专门用于存储package main包相关源码文件的其它文件夹是专门用于存储除package main包以外源码文件的bin文件夹是专门用于存储编译之后的可执行程序的pag文件夹是专门用于存储编译之后的.a文件的
|—项目文件夹
-----------|--------src文件夹
-----------------------------|--------main文件夹
-----------------------------|--------其它文件夹
-----------|--------bin文件夹
-----------|--------pkg文件夹
go version 查看当前安装的go版本
go env 查看当前go的环境变量
go fmt 格式化代码,会将指定文件中凌乱的代码按照go语言规范格式化
go run 命令文件 编译并运行go程序
go build 编译检查
go install 安装程序
ion` 查看当前安装的go版本
go run 命令文件 编译并运行go程序
go build 编译检查
go install 安装程序