文章目录
一、安装 go
# 找到源码包
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.5.linux-amd64.tar.gz
# 添加环境变量到~/.profile 或者/etc/profile
export PATH=$PATH:/usr/local/go/bin
# 更新环境
source ~/.profile
二、安装 goland
安装好后,在file -settiing -go -gopath 设置程序环境
三、go 入门
1、Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
# 运行
$ go run hah.go
Hello, World!
# 编译二进制文件
$ go build hah.go
$ ./hah
Hello World!
2、注释符号
和c语言相同
// 或者 /* 内容 */
3、基础语法
1) 连接字符串 +
fmt.Println("Good" + " Bye!")
2) 格式化字符串 fmt.Sprintf
func main() {
var num = 1234
var date = "2021-11-30"
var url = "num is: %d date is: %s"
var buf = fmt.Sprintf(url, num, date)
fmt.Println(buf)
}
3) 定义变量
var str = "haha"
# 定义未声明的变量,只能出现在函数中
num := 1234
# 一次定义多个
func main() {
num, buf := 123, "haha"
zz := fmt.Sprintf("num %d char %s", num, buf)
fmt.Print(zz)
}
4) 返回多个值
func getnum()(int, int, string) {
a, b, c := 11, 22, "str"
return a,b,c
}
// _可以代表空
func main() {
_, num, str := getnum()
fmt.Println(num,str)
}
四、socket 编程
服务端
package main
import (
"fmt"
"net"
"os"
)
func main() {
service := ":12345"
addr, err := net.ResolveTCPAddr("tcp4", service)
if err != nil {
fmt.Println("ResolveTCPAddr error!")
os.Exit(1)
}
listen, err := net.ListenTCP("tcp", addr)
if err != nil {
fmt.Println("ListenTCP error!")
os.Exit(1)
}
for {
conn, err := listen.Accept()
if err != nil {
continue
}
buf := make([]byte, 1024)
conn.Read(buf)
fmt.Printf("#recv: %s\n", []byte(buf))
conn.Write(buf)
conn.Close()
}
}
客户端
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:12345")
if err != nil {
fmt.Println("net.Dial error!")
os.Exit(1)
}
defer conn.Close()
conn.Write([]byte("Hello World!"))
}