基础语法
Golang是谷歌开发的一种静态强类型,编译型语言。go语言特点包括:1、高性能,高并发。2、语法简单,学习曲线平缓。3、具有丰富的标准库。4、完善的工具链。5、静态链接。6、快速编译。7、跨平台。8、垃圾回收。
下面分别介绍go语言的基本类型。
1、变量
变量是程序的基本组成单位,且要注意变量表示内存中的一个存储区域。go语言共有3种变量的使用方式。
//第一种:指定变量类型
func main () {
var i int
fmt.Println("i= ",i)
}
//第二种:类型推导
func main () {
var = 10.1
fmt.Println("num=", num)
}
//第三种
func main () {
name := "jack"
fmt.Println("name=", name)
}
2、循环语句
在go语言中只有for语句作为循环语句。go语言还提供了for range,可以方便遍历字符串和数组。
func main () {
for i := 0 ;i <= 10;i++
fmt.Println("你好 ,字节",i)
}
3、数组
func main () {
var a [5]int
a[4] = 100//下标为4的数
fmt.Println(a[4],len(a))
}
b := [5]int{1,2,3,4,5}
fmt.Println(b)
var twoD [2][3]int
for i := 0;i <=2;i++ {
for j := 0; j <= 3; j++ {
twoD[2][3] = i + j
}
}
fmt.Println("2d:",twoD)
4、切片
切片是运用类型,在进行传递时要遵循引用传递的机制。切片的长度可以变化的,因此切片是一个动态变化数组。
func main () {
var intArr [5]int = [...]int{1,2,3,4,5}
slice := intArr[1:3]
fmt.Println("intArr:",intArr)
}
func main () {
s := make([]string , 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:",s[2])
fmt.Println("len:",len(s))
}
5、map
map在实际中使用的最为频繁,我们可以用make函数来创建一个空map,在里面存了两个类型,一个是key 是string,还有一个就是value,这里是int。这里要注意golang的map是完全无序的,遍历不会按照字母顺序,也不会顺序插入,是随机的。
func main() {
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m)
fmt.Println(len(m))
fmt.Println(m["one"])
fmt.Println(["unknow"])
r, ok := m["unknow"]
fmt,Println(r,ok)
delete(m,"one")
m2 := map[ string]int{"one" : 1, "two" : 2}
var m3 = map[ string]int{ "one" : 1,"two":2}
fmt.Println( m2,m3 )
}
6、指针
指针的一个主要的用途是对于传入的参数进行修改。
package main
import "fmt"
func add2(n int ) {
n+=2
}
func add2ptr( n *int ) i
*n += 2
}
func main( ) {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt .Println(n) // 7
}
7、结构体方法
package main
import "fmt"
type user struct {
name string
password string
}
func (u user ) checkPassword( password string ) bool {
return u.password == password
}
func ( u *user ) resetPassword( password string) {
u.password = password
}
func main( ) {
a := user{name : "wang" , password: "1024"}
a.resetPassword ( "2048")
fmt. Println( a.checkPassword( "2048")) //true
}
7、JSON处理
go语言里面的json ,对一个已有的结构体,只要保证每个字段的第一个字母是大写的,就成了公开字段。那这个结构体就可以用JSON.marshaler去序列化,变成一个json的字符串。反序列化则用JSON.unmarshaler.
8、时间处理
go语言最常用的是time.now()来获取当前时间,在go语言的time包中有详细使用介绍。
实战总结
对golang标准库文档里面的常用包的用法要熟记于心,比如要设置随机数种子,用启动的时间戳来初始化随机数种子,time.now.unix来初始化随机数种子。
- 错误处理:在代码中要充分考虑错误处理。例如,当向字典中添加键值对时,需要检查是否存在重复键,并在必要时返回错误信息。
- 代码复用:尽量使用模块化和可复用的代码结构。将通用的功能封装为函数或方法,以便在不同的场景中重复使用。这样可以提高代码的可维护性和可扩展性。
- 对以前学的json序列化和反序列化又复习了一遍,加深了印象,学到了一些快速生成的方式。
- 要完成一个SOCKS5代理要了解TCP/IP协议和Socket编程,掌握网络通信的基本原理和相关概念。了解SOCKS5协议的规范和定义,包括那几个阶段。由于代理服务器需要同时处理多个连接,了解多线程和并发编程的基本概念和技术,确保代理服务器的性能。还有一些测试,以及安全和防护。