上篇我简单介绍了Go语言,接下来我会比较整体的介绍一下Go语言的基础语法和标准库。
Go语言的基础语法:
- 包声明:每个Go程序都是由包组成的,使用
package关键字进行声明。包声明应放在文件的开头。
package main
- 导入包:使用
import关键字导入需要使用的包。可以导入多个包,多个包之间用逗号分隔。
import (
"fmt"
"math"
)
- 函数:使用
func关键字定义函数。函数可以有参数和返回值。
func add(a, b int) int {
return a + b
}
- 变量:使用
var关键字声明变量。可以指定变量类型,也可以使用类型推断。
var x int
x = 5
var y = 10
z := 15
- 常量:使用
const关键字声明常量。
const P = 3.14159
- 条件语句:使用
if关键字进行条件判断。可以使用else if和else进行多条件判断。
if x > 10 {
fmt.Println("x is greater than 10")
} else if x < 10 {
fmt.Println("x is less than 10")
} else {
fmt.Println("x is equal to 10")
}
- 循环语句:使用
for关键字进行循环。可以使用break和continue控制循环流程。
for i := 0; i < 5; i++ {
fmt.Println(i)
}
sum := 0
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
sum += i
}
fmt.Println(sum)
- 数组和切片:使用
[]来声明数组和切片。数组长度是固定的,切片长度是可变的。
var arr [5]int
arr[0] = 1
arr[1] = 2
slice := []int{1, 2, 3, 4, 5}
- 结构体:使用
type关键字定义结构体。可以在结构体中定义字段和方法。
type Person struct {
name string
age int
}
func (p Person) sayHello() {
fmt.Println("Hello, my name is", p.name)
}
- 指针:使用
*来声明指针变量。可以使用&获取变量的地址,使用*获取指针指向的值。
var x int = 10
var p *int = &x
fmt.Println(*p)
Go标准库提供了许多常用的包,包括但不限于:
Go语言的标准库是Go语言内置的一些包,提供了丰富的功能和工具,方便开发者进行各种操作。下面简单介绍一些常用的标准库包及其功能:
fmt:提供了格式化输入输出的函数,如Println、Printf等。可以用于输出文本、格式化字符串、打印调试信息等。
import "fmt"
func main() {
fmt.Println("Hello, World!")
fmt.Printf("The value of x is %d\n", x)
}
os:提供了与操作系统交互的函数和类型。可以用于读取环境变量、执行系统命令、获取当前工作目录等。
import "os"
func main() {
username := os.Getenv("USERNAME")
fmt.Println("Username:", username)
cwd, _ := os.Getwd()
fmt.Println("Current working directory:", cwd)
}
io:提供了输入输出相关的接口和函数。可以用于读取和写入文件、网络连接等。
import (
"fmt"
"io/ioutil"
)
func main() {
data, _ := ioutil.ReadFile("file.txt")
fmt.Println(string(data))
ioutil.WriteFile("file.txt", []byte("Hello, World!"), 0644)
}
net:提供了网络相关的函数和类型,如Listen、Dial等。可以用于创建网络连接、发送和接收数据等。
import (
"fmt"
"net/http"
)
func main() {
resp, _ := http.Get("http://example.com")
defer resp.Body.Close()
data, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(data))
}
http:提供了HTTP相关的函数和类型,如Get、Post等。可以用于创建HTTP服务器、发送HTTP请求等。
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
json:提供了JSON编码和解码相关的函数和类型,如Marshal、Unmarshal等。可以用于处理JSON数据。
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
jsonStr := `{"name":"John","age":30}`
var person Person
json.Unmarshal([]byte(jsonStr), &person)
fmt.Println(person.Name, person.Age)
person.Age = 40
jsonData, _ := json.Marshal(person)
fmt.Println(string(jsonData))
}
time:提供了时间相关的函数和类型,如Now、Sleep等。可以用于获取当前时间、定时任务等。
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println("Current time:", now.Format("2006-01-02 15:04:05"))
time.Sleep(2 * time.Second)
fmt.Println("2 seconds later:", time.Now())
}
这些只是标准库中的一小部分,标准库还包含了很多其他的包,提供了各种功能,如加密、压缩、并发编程、数据库操作等。开发者可以根据自己的需求选择合适的标准库包来使用,可以参考《Go语言标准库》The Golang Standard Library by Example(books.studygolang.com/The-Golang-…) 。