Go语言学习笔记:随机数、接口、指针、微服务优化等
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语言编译的二进制文件可能较大,可通过交叉编译、动态链接、压缩等方式进行优化:
- 交叉编译: 在目标平台编译,避免包含无关代码。
- 动态链接: 将依赖库放在系统共享库中,减小文件大小。
- 压缩: 使用工具压缩二进制文件,但可能影响性能。
原文地址: http://www.cveoy.top/t/topic/jupI 著作权归作者所有。请勿转载和采集!