Go语言学习笔记:随机数、接口、指针、微服务优化等

本文总结了一些Go语言学习过程中的实用技巧,包括随机数生成、接口定义、指针用法、以及微服务二进制文件优化等方面。

1. Go语言随机数使用示例

package main

import (
    'fmt'
    'math/rand'
    'time'
)

func main() {
    // 设置随机数种子,保证每次运行结果不同
    rand.Seed(time.Now().UnixNano())

    // 生成0-99之间的随机整数
    fmt.Println('随机整数:', rand.Intn(100))

    // 生成0.0-1.0之间的随机浮点数
    fmt.Println('随机浮点数:', rand.Float64())

    // 生成指定范围内的随机浮点数
    fmt.Println('指定范围内的随机浮点数:', rand.Float64()*(10.0-5.0)+5.0)
}

2. Go语言同步和异步接口示例

同步接口示例

package main

import (
    'fmt'
    'net/http'
)

func main() {
    http.HandleFunc('/', handler)
    http.ListenAndServe(':8080', nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, 'Hello World!')
}

异步接口示例

package main

import (
    'fmt'
    'net/http'
)

func main() {
    http.HandleFunc('/', handler)
    http.ListenAndServe(':8080', nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    go func() {
        fmt.Println('异步执行...')
    }()
    fmt.Fprintf(w, 'Hello World!')
}

3. Go语言定义查询接口

package main

import (
    'encoding/json'
    'fmt'
    'net/http'
)

type Student struct {
    ID     string 'json:"id"'
    Name   string 'json:"name"'
    Age    int    'json:"age"'
    Gender string 'json:"gender"'
    Class  string 'json:"class"'
}

var students []Student = []Student{
    {ID: '1', Name: '张三', Age: 18, Gender: '男', Class: '1班'},
    {ID: '2', Name: '李四', Age: 17, Gender: '女', Class: '2班'},
    {ID: '3', Name: '王五', Age: 19, Gender: '男', Class: '3班'},
}

func main() {
    http.HandleFunc('/api/students', handler)
    http.ListenAndServe(':8080', nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    school := r.FormValue('school')
    name := r.FormValue('name')
    id := r.FormValue('id')
    age := r.FormValue('age')
    gender := r.FormValue('gender')
    class := r.FormValue('class')
    var result []Student
    for _, student := range students {
        if (school == '' || school == 'xxx学校') &&
            (name == '' || name == student.Name) &&
            (id == '' || id == student.ID) &&
            (age == '' || age == fmt.Sprintf('%d', student.Age)) &&
            (gender == '' || gender == student.Gender) &&
            (class == '' || class == student.Class) {
            result = append(result, student)
        }
    }
    response, err := json.Marshal(result)
    if err != nil {
        w.WriteHeader(http.StatusInternalServerError)
        return
    }
    w.Header().Set('Content-Type', 'application/json')
    w.Write(response)
}

4. Go语言nil的作用

在 Go 语言中,nil 是一个预定义的标识符,用于表示变量的零值或空值,例如指针、切片、Map、Channel、接口等的初始值。

5. Go语言微服务二进制文件优化

Go语言编译的二进制文件可能较大,可通过交叉编译、动态链接、压缩等方式进行优化:

  • 交叉编译: 在目标平台编译,避免包含无关代码。
  • 动态链接: 将依赖库放在系统共享库中,减小文件大小。
  • 压缩: 使用工具压缩二进制文件,但可能影响性能。
Go语言学习笔记:随机数、接口、指针、微服务优化等

原文地址: http://www.cveoy.top/t/topic/jupI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录