GO语言基础学习

109 阅读4分钟

基础语法

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来初始化随机数种子。

  1. 错误处理:在代码中要充分考虑错误处理。例如,当向字典中添加键值对时,需要检查是否存在重复键,并在必要时返回错误信息。
  2. 代码复用:尽量使用模块化和可复用的代码结构。将通用的功能封装为函数或方法,以便在不同的场景中重复使用。这样可以提高代码的可维护性和可扩展性。
  3. 对以前学的json序列化和反序列化又复习了一遍,加深了印象,学到了一些快速生成的方式。
  4. 要完成一个SOCKS5代理要了解TCP/IP协议和Socket编程,掌握网络通信的基本原理和相关概念。了解SOCKS5协议的规范和定义,包括那几个阶段。由于代理服务器需要同时处理多个连接,了解多线程和并发编程的基本概念和技术,确保代理服务器的性能。还有一些测试,以及安全和防护。