Post

Go start

Go 的入门笔记

Go start

基本概述

C语言与Go语言的对比:https://hyperpolyglot.org/c
C语言与Go语言的对比(多语言版):https://programming-idioms.org/cheatsheet/C/Go

学习文档:
Go语言官网(需要翻墙):https://golang.org/

go中文社区:https://studygolang.com

go中文在线文档:https://studygolang.com/pkgdoc

特点 + 编译

  1. 没有头文件概念, .go走天下
  2. 一个go语言的应用程序,在运行的时候是不需要依赖外部库的
    1. 把执行时需要的所有库都打包到程序中
    2. go程序比较大
    3. 如果import的包在程序中没有使用,那么程序不允许编译
  3. go语法是不区分平台的,在windows下面也可以编译一个程序,在linux下运行,需要两个环境变量来控制:
  4. GOOS:设定运行的平台
    1. mac:GOOS=darwin
    2. linux: GOOS= linux
    3. windows :GOOS=windows
  5. GOARCH: 目标平台的体系构架
    1. 386: GOARCH=386
    2. amd64: GOARCH=amd64
    3. arm : GOARCH=arm
    4. 例:GOOS=linux GOARCH=amd64 go build -o hello_linux main.go
  6. 输入go env可以查看上述变量环境

go命令(build/run/install/env)

  1. 编译.go文件,-o指定生成文件的命令
    1. go build -o test.exe main.go xxx.go
    2. go build *.go
  2. 直接运行程序,不会编译成exe文件
    1. go run *.go
  3. 安装程序 go install
    1. 拿到一个c源码,想自己编译出exe
      1. ./configure
      2. make
      3. make install ===> 将编译好的程序安装到指定的目录/usr/bin
    2. 使用go install,可以将应用程序安装到GOBIN下面: $GOPATH/bin
      1. go install ==> 需要实现在环境变量中设置GOBIN的目录
      2. go env,可以查看当前go的环境变量
      3. go env,可以查看当前go的环境变量
      4. 如果重新设置了环境变量,需要重新启动编译器才能生效
go install 使用
  1. 创建一个目录

    mkdir hello cd hello

  2. 创建 main.go 文件: 将上述代码保存为 main.go

  3. 初始化模块

    go mod init hello

  4. 安装程序: 运行以下命令来安装:

    go install

  5. 验证安装

安装后,你可以在 $GOPATH/bin 目录中找到生成的可执行文件。确保将 $GOPATH/bin 添加到你的 PATH 中,以便直接在命令行中运行。

hello

hello world详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//go程序,都有package main
//只有、且都是.go结尾


//pachage 表示定义一个包名,相当于命名空间 std::cout
//main包是特殊的、用于标识可独立运行程序
package main

//导入标准包 fmt, format 
//一般用于格式化输出
import "fmt"


//所有函数使用func开头
//一个函数的返回值放在参数后面
//函数的做花括号必须与函数名同行
func main(){

    //go语言语句 ;结尾不是必要的
    fmt.PrintLn("hello world)
}

工程管理

go语言的项目,有特定的目录结构进行管理,标准Go工程需要由三个目录:

  • GOPATH
    • src
      • 存放源代码
    • bin
      • 编译后的程序,执行go install后的存放路径
    • pkg
      • 缓存包

go语言的标准库:

  • GOROOT

基础语法

赋值

定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
//单纯定义
var 名字 类型 //变量
const 名字 类型 //常量

//直接赋值定义
var 名字 {类型} =   
address := "..." // 自动推导类型


//平行赋值
i, j := 10, 20
i, j = j, i
//i:20  j:10

数据类型

1
2
3
4
5
6
7
int,int8 int16, int32, int64
uint8 ... uint64

float32
float64

true/false

自增语法

go语言只有: i++, i– 且必须单独一行

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {
	i := 20
	i++
	//++i //这个也是错的, 语义更加明确
	//fmt.Println("i:", i++)  //这是错误的,不允许和其他代码放在一起,必须单独一行
	fmt.Println("i:", i)

}

指针

空指针, c: null , c++: nullptr, go: nil

不同语法汇总

  1. 不支持地址加减
  2. 不支持三目运算符 ? :
  3. 只有false才能代码逻辑假,数字0和nil不能(只有false/true才能表示逻辑真假,数字不能代表逻辑值)
if

if 不加(), 必须有{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {
	//if 0 {
	//	fmt.Println("hello")
	//}

	//if nil {
	//	fmt.Println("hello")
	//}

	if true {
		fmt.Println("hello")
	}

	//a, b := 1, 2
	//x := a > b ? 0:-1
}

基础函数

输入输出

1
2
3
4
5
6
7
8
9
10
11
12
var name string
name = "ZHQ"
age := 18
fmt.Println("name:", name, age)
//output:
//name:ZHQ 18
//
fmt.Print("name is %s, age %d\n", name, age)
//output:
//name is ZHQ, age 18
//

This post is licensed under CC BY 4.0 by the author.