目录:
“本文首发于CSDN,作者:lomtom 原文链接https://blog.csdn.net/qq_41929184/article/details/119995270 你的支持就是我最大的动力。 ”
Go系列:
go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”
目前Go语言已经被⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
Go语言结构(组成部分):
包声明
引入包
函数
变量
语句 & 表达式
注释
例如hello.go
package main
//标准输出库
import "fmt"
//主函数:包名需要为main才可以运行
func main() {
//输出
fmt.Println("Hello World")
}
当大括号的前半部分没有和函数名在同一行时,程序会报错
错误示例:
package main
//标准输出库
import "fmt"
//主函数:包名需要为main才可以运行
func main()
{
//输出
fmt.Println("Hello World")
}
报错:
# command-line-arguments
.\print.go:8:6: missing function body
.\print.go:9:1: syntax error: unexpected semicolon or newline before {
Go语言每行结尾可以不加分号;
变量声明
int
类型的变量a,那么则是:var a int
即:var关键字 + 变量名 + 变量类型
var a int = 1
可以省略成 a := 1
const
赋值后(为常量),其值不可改变,再次赋值会报错。
注:常量可用于枚举:
const (
Unknown = 0
Female = 1
Male = 2
)
package main
import
"fmt"
func
main() {
const (
a = iota
//0
b //1
c //2
d = "ha"
//独立值,iota += 1
e //"ha" iota += 1
f = 100
//iota +=1
g //100 iota +=1
h = iota
//7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
//输出 0 1 2 ha ha 100 100 7 8
}
Go不支持三目运算符
Go的返回类型在函数小括号后面,大括号前面,支持返回多个值 例如:
package main
/* 函数返回两个数的和 */
func sum(num1, num2 int) int {
return num1 + num2
}
func swap(x, y string) (string, string) {
return y, x
}
Go中的结构体跨包调用,属性首字母必须大写否则会爆unexported field
错误
Go不支持隐式的类型转换
Go中实现异步执行
// 异步执行
go task2.SendMail()
time.Sleep(time.Duration(2)*time.Second)
package main
import (
"fmt"
"net/http"
"strings"
"github.com/gin-gonic/gin"
)
func main() {
// 1.创建路由
r := gin.Default()
// 2.绑定路由规则,执行的函数
// gin.Context,封装了request和response
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello World!")
})
r.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
action = strings.Trim(action,"/")
c.String(http.StatusOK,name + " is a " + action)
})
r.GET("/url", func(c *gin.Context) {
name := c.DefaultQuery("name","小葛")
c.String(http.StatusOK,fmt.Sprintf("hello %s",name))
})
r.POST("/form", func(c *gin.Context) {
types := c.DefaultPostForm("type","post")
username := c.PostForm("username")
password := c.PostForm("password")
c.String(http.StatusOK,fmt.Sprintf("username = %s , password = %s , types = %s",username,password,types))
})
// 分组使用
v1 := r.Group("/v1")
{
v1.GET("/api1",api1)
v1.GET("/api2",api2)
}
v2 := r.Group("/v2")
{
v2.POST("/api1",api1)
v2.POST("/api2",api2)
}
// 3.监听端口,默认在8000
// Run("里面不指定端口号默认为8000")
r.Run(":8000")
}
func api1(c *gin.Context) {
name := c.DefaultQuery("name", "小欧")
c.String(200, fmt.Sprintf("hello %s", name))
}
func api2(c *gin.Context) {
name := c.DefaultQuery("name", "小欧")
c.String(200, fmt.Sprintf("hello %s", name))
}
gin集成swag
Go 返回统一封装 首先进行响应结果的封装
package result
type Result struct {
Status int `json:"status"` //状态码
ResMsg string `json:"resMsg"` //状态描述
Data map[string]interface{} `json:"data"` //数据
}
/*
统一返回接口
*/
func result(status int, msg string) *Result {
return &Result{
Status: status,
ResMsg: msg,
Data: make(map[string]interface{},0),
}
}
//WithMsg 设置提示信息
func (r *Result) WithMsg(msg string) *Result {
r.ResMsg = msg
return r
}
//WithData 设置数据
func (r *Result) WithData(key string,data interface{}) *Result {
r.Data[key] = data
return r
}
其次,对结果进行统一管理
package result
var (
OK = result(200,"ok") // 通用成功
ERROR = result(500,"error") // 通用失败
UserNotFind = result(404,"user not find") //未找到用户
RegisterFailed = result(400,"user register failed") //注册失败
ParameterError = result(500,"parameter error") //参数错误
)
使用
c.JSON(result.Status, result.OK)
Gin的body的参数只能获取一次
1、标准输出
https://blog.csdn.net/liumiaocn/article/details/54882507
type person struct {
Id int
Name string
Country string
}
person1 := person{Id: 1001, Name: "lomtom", Country: "China"}
tmpl := template.New("tmpl1")
registerContent1 :=" 尊敬的{{.Name}}您好:\n" +"\n"+
" 您已被设置为该主账户的消息接收人。若同意接收该账户下的消息通知,请单击下列链接。\n" +" 如果单击链接没有反应,请复制到浏览器中。\n" +
"\n" +
" 致敬!\n\n" +
"LStack团队"
tmpl.Parse(registerContent1)
tmpl.Execute(os.Stdout, person1)
2、输出到变量
模板输出
https://blog.csdn.net/changzhe1253/article/details/100963119
person := make(map[string]string)
person["Name"] = "lomtom"
tmpl := template.New("tmpl1")
registerContent :="尊敬的{{.Name}}您好:\n" +
"\t您已被设置为该主账户的消息接收人。若同意接收该账户下的消息通知,请单击下列链接。\n" +" 如果单击链接没有反应,请复制到浏览器中。\n" +
" 致敬!\n\n" +
"LStack团队"
tmpl.Parse(registerContent)
var str bytes.Buffer
tmpl.Execute(&str, person)
fmt.Println(str.String())
[1]
Go(一)基础入门: https://blog.csdn.net/qq_41929184/article/details/119995270
[2]
Go(二)结构体: https://blog.csdn.net/qq_41929184/article/details/119995581
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有