【Go自学版】01-基础

// 变量
var a, b, c = 8, 2.3, "hello"
var d float64;
e := 6var A []int;
var B [10]int;
C := [10]int{1, 2, 3, 4}
for i := 0; i < len(B); i ++ {}
for _, value := range C {}
D = make([]int, 3)
// len = 4, cap = 10, 扩容方式 cap*=2
E := make([]int, 4, 10)
E = append(E, 1)
E1 := E[0:2] // 浅拷贝,公用底层
E2 := make([]int, 3) 
copy(E2, E) // 深拷贝
E1[0] = 100 // E会改变,E2不会改变
// 导包方式
import (new_name "package_name1""package_name2". "package_name3"
)// typedef
type myint int
// map
var mp map[string]string
if mp == nil {fmt.Printf("空\n")}
mp = make(map[string]int, 10)
mp["one"] = 1
mp["two"] = 2cMap := make(map[string]string)
cMap["one"] = "1"
cMap["two"] = "22"
delete(cMap, "one")
cMap["two"] = "2"
// 析构函数, stack
func main() {defer fmt.Printf("defer 1\n")defer fmt.Printf("defer 2\n")
}
// 函数名开头小写表示私有,大写表示公有
func funName1() {}
func FunName2(a int, b string) (int, string) {ans := avar s string = breturn ans, s
}
// 本质是一个指针
type AnimalIF interface {Eat()Sleep()GetName() string
}type Dog struct {name string
}func (this *Dog) Eat() {fmt.Printf("Dog eat\n")
}func (this *Dog) Sleep() {fmt.Printf("Dog sleep\n")
}func (this *Dog) GetName() string {return this.name
}type Cat struct {name string
}func (this *Cat) Eat() {fmt.Printf("Cat eat\n")
}func (this *Cat) Sleep() {fmt.Printf("Cat sleep\n")
}func (this *Cat) GetName() string {return this.name
}func main() {var animal AnimalIFanimal = &Cat{"mike"}animal.Eat()animal.Sleep()dog := Dog{"jack"}fmt.Println(dog.GetName())
}
func testInterface(x interface{}) {value, f := x.(string)if f {fmt.Printf("value is %s", value)fmt.Printf("type is string")} else {fmt.Printf("type is not string")}
}
// [type, value]
type User struct {Id   intName string
}func (this User) Call() {fmt.Printf("user is called\n")fmt.Printf("%v\n", this)
}func reflectVar(x interface{}) {xValue := reflect.ValueOf(x)xType := reflect.TypeOf(x)fmt.Println(xType, xValue)for i := 0; i < xType.NumField(); i++ {field := xType.Field(i)value := xValue.Field(i).Interface()fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value)}for i := 0; i < xType.NumMethod(); i++ {m := xType.Method(i)fmt.Printf("%s: %v\n", m.Name, m.Type)}
}func main() {user := User{11, "mike"}reflectVar(user)
}
// 标签
type User struct {Id   int    `info:"id" doc:"编号"`Name string `info:"name" doc:"姓名"`
}func FindTag(x interface{}) {// 传指针 FindTag(&user)t := reflect.TypeOf(x).Elem()// 传值 FindTag(user)//t := reflect.TypeOf(x)for i := 0; i < t.NumField(); i++ {tagString := t.Field(i).Tag.Get("info")docString := t.Field(i).Tag.Get("doc")fmt.Println("info: ", tagString, ",", "doc: ", docString)}
}// json
type Moive struct {// 变量开头大写且加tag才能进jsonTitle  string   `json:"title"`Year   int      `json:"year"`Price  float64  `json:"price"`Actors []string `json:"actors"`
}func ReadJson(movie interface{}) {jsonStr, err := json.Marshal(movie)if err != nil {fmt.Printf("json marshal error %v\n", err)} else {fmt.Printf("jsonStr = %s\n", jsonStr)newMovie := Moive{}err = json.Unmarshal(jsonStr, &newMovie)if err != nil {fmt.Printf("json unmarshal error %v\n", err)} else {fmt.Printf("newMoive: %v\n", newMovie)}}}func main() {user := User{11, "mike"}fmt.Println(user)FindTag(&user)movie := Moive{"喜剧之王", 2000, 10, []string{"周星驰", "张柏芝"}}ReadJson(movie)
}
命令功能
go mod init生成 go.mod 文件
go mod vendor导出项目所有依赖到 vendor 目录
go mod edit编辑 go.mod 文件
go mod download下载 go.mod 文件中指明的所有依赖
go mod tidy整理现有的依赖
go mod graph查看现有的依赖结构
go mod verify校验一个模块是否被篡改过
go mod why查看为什么需要依赖某模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握PyTorch数据预处理(一):让模型表现更上一层楼!!!

引言 在PyTorch中&#xff0c;数据预处理是模型训练过程中不可或缺的一环。通过精心优化数据&#xff0c;我们能够确保模型在训练时能够更高效地学习&#xff0c;从而在实际应用中达到更好的性能。今天&#xff0c;我们将深入探讨一些常用的PyTorch数据预处理技巧&#xff0c;…

C++如何通过调用ffmpeg接口对H264文件进行编码和解码

C可以通过调用FFmpeg的API来对H264文件进行编码和解码。下面是一个简单的例子。 首先需要在代码中包含FFmpeg的头文件&#xff1a; extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale…

Linux系统编程:进程间通信总结

管道 在Linux中&#xff0c;管道是一种进程间通信方式&#xff0c;它允许一个进程&#xff08;写入端&#xff09;将其输出直接连接到另一个进程&#xff08;读取端&#xff09;的输入。从本质上说&#xff0c;管道也是一种文件&#xff0c;但它又和一般的文件有所不同。 具体…

Docker部署开源分布式任务调度平台DolphinScheduler并实现远程访问办公

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

前端知识笔记(二十七)———CSS核心功能手册:从熟悉到精通

参考HTML代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

12.9_黑马数据结构与算法笔记Java

目录 057 多路递归 e03 杨辉三角2 thinking&#xff1a;二维数组的动态初始化&#xff1f; 057 多路递归 e03 杨辉三角3 058 链表 e01 反转单向链表1 058 链表 e01 反转单向链表2 058 链表 e01 反转单向链表3 递归 058 链表 e01 反转单向链表4 为什么是returnn1呢&…

【Cisco Packet Tracer】路由器 NAT实验

NAT的实现方式有三种&#xff0c;即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。 静态转换是指内部本地地址一对一转换成内部全局地址&#xff0c;相当内部本地的每一台PC都绑定了一个全局地址。一般用于在内网中对外提供服务的服务器。 [3] 动态转换是指…

C++ 迭代器

迭代器 迭代器类似于指针类型&#xff0c;也提供了对对象的间接访问。 就迭代器而言&#xff0c;其对象是容器中的元素或 string 对象中的字符。 获取迭代器 容器的迭代器类型 使用作用域运算符来说明我们希望使用的类型成员&#xff1b;例&#xff1a;string::iterator it…

探秘MSSQL存储过程:功能、用法及实战案例

在现代软件开发中&#xff0c;高效地操作数据库是至关重要的。而MSSQL&#xff08;Microsoft SQL Server&#xff09;作为一款强大的关系型数据库管理系统&#xff0c;为我们提供了丰富的功能和工具来处理数据。其中&#xff0c;MSSQL存储过程是一项强大而又常用的功能&#xf…

改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制

🗝️改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制 代码ACmixBiFormerBAMBlock加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的yaml结构,读者可以获…

C++ 的关键字(保留字)介绍

一.C中部分关键字的用法 1. auto 关键字auto是C11引入的&#xff0c;它可以用于变量声明和函数返回类型的推导。当你不关心变量的具体类型时&#xff0c;可以使用auto来让编译器根据初始化表达式推导出变量的类型。这样可以简化代码&#xff0c;提高可读性。 1.在for循环中遍…

Mysql索引一篇就够了

索引 定义 索引是对数据库表中一列或者多列的值进行排序的结构。 目的 数据库索引好比一本书的目录&#xff0c;提高查询效率。但是为表设置索引要付出相应的代价&#xff1a; 增加了数据库的存储空间 在插入和修改时需花费更多的时间&#xff08;因为索引也要随之变动&#…

一、C#笔记

1.注释 /*多行注释*/class HelloWorld{ void Hello(){Console.WriteLine("Hello!");//单行注释}} 2.理解语句 2.1方法、语法、语义 2.2使用标识符 标识符语法规则&#xff1a; 只能使用字母&#xff08;大写和小写&#xff09;、数字和下划…

C++相关闲碎记录(5)

1、容器提供的类型 2、Array Array大小固定&#xff0c;只允许替换元素的值&#xff0c;不能增加或者移除元素改变大小。Array是一种有序集合&#xff0c;支持随机访问。 std::array<int, 4> x; //elements of x have undefined value std::array<int, 5> x {…

渗透测试——七、网站漏洞——命令注入和跨站请求伪造(CSRF)

渗透测试 一、命令注入二、跨站请求伪造(CSRF)三、命令注入页面之注人测试四、CSRF页面之请求伪造测试 一、命令注入 命令注入(命令执行) 漏洞是指在网页代码中有时需要调用一些执行系统命令的函数例如 system()、exec()、shell_exec()、eval()、passthru()&#xff0c;代码未…

基于ssm在线云音乐系统的设计与实现论文

摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经常会用到的就是在线云音乐系统…

走迷宫(详细分析)

目录 一、课题描述 输入样例&#xff1a; 输出样例&#xff1a; 二、需求分析 输入的形式和输入值的范围&#xff1a; 输出的形式&#xff1a; 程序所能达到的功能&#xff1a; 三、概要设计 四、流程图 五 、代码详细注释 六、测试数据和结果 一、课题描述 以一个…

freeswitch webrtc video_demo客户端进行MCU的视频会议

系统环境 一、编译服务器和加载模块 二、下载编译指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新启动 四、MCU通话测试 1.如何使用video_demo 2.测试结果 五、MCU的通话原理及音频/视频/布局/管理员等参数配置 附录 freeswitch微信交流群 系统环境 lsb_rel…

MyBatis处理映射关系

在Mybatis实现数据处理过程中&#xff0c;字段名符合数据库的规则&#xff0c;属性一般为驼峰规则&#xff0c;因此字段名和属性名通常不一致&#xff0c;此时可以通过以下两种方式对数据库字段进行映射处理&#xff1a; 为字段起别名&#xff0c;保证和实体类中的属性名一致在…

lv11 嵌入式开发 IIC(下) 20

目录 1 Exynos4412下IIC控制器介绍 1.1 总览 1.2 特征 1.3 工作框图 1.4 其他内容介绍 1.5 四种工作模式寄存器流程 2 IIC寄存器详解 2.1 概述 2.2 控制寄存器 2.3 状态寄存器 2.4 地址寄存器 2.5 数据寄存器 2.6 其他寄存器 3 MPU06050 3.1 简介 3.2 MPU6050主…