当前位置: 首页 > news >正文

【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查看为什么需要依赖某模块
参数功能
GO111MODULE是否开启 go modules 模式
GOPROXY项目第三方依赖下载源地址
GOSUMDB校验拉取的第三方库是否完整
GONOPROXY设置 GOPRIVATE 即可
GONOSUMDB设置 GOPRIVATE 即可
GOPRIVATE当前项目根据GOPRIVATE下载(可用通配符 eg:*.exmaple.com,https://github.com/xxxx/xxx)
文件功能
go.mod当前项目模块名称,go版本号
.go源代码
znet项目直接依赖的是znet包
zinx项目间接依赖的是zinx包
go.sum罗列当前项目直接或间接依赖的所有模块版本,保证之后项目的以来版本不被篡改

g o . s u m : h 1 : h a s h ∣ x x x / g o . m o d h 1 : h a s h go.sum:h1:hash~|~xxx/go.mod~h1:hash go.sum:h1:hash  xxx/go.mod h1:hash

http://www.lryc.cn/news/257577.html

相关文章:

  • 软文开头怎么写才能拿捏用户?媒介盒子为您解答
  • C语言算法与数据结构,旅游景区地图求最短路径
  • 测试:SSE VS WebSocket
  • Linux+Moba+虚拟机
  • 快手数仓面试题附答案
  • 如何在Go中编写包
  • JVM类加载全过程
  • Uniapp安卓原生插件开发Demo
  • Axure的安装与基本使用
  • 分布式锁实现方案 - Lock4j 使用
  • [虚拟机]使用VM打开虚拟机电脑重启解决方案。
  • Linux 详细介绍strace命令
  • 【知识分享】__RS485-嵌入式常用的通信协议
  • Qt生成动态链接库并使用动态链接库
  • E4990A 阻抗分析仪,20 Hz 至 10/20/30/50/120 MHz
  • k8s volumes and data
  • 万宾科技智能水环境综合治理监测系统效果
  • 掌控安全 暖冬杯 CTF Writeup By AheadSec
  • jQuery-操作DOM
  • 高级网工在Linux服务器抓包,少不了这几条常用的tcpdump命令。
  • Hough算法数学原理
  • 基于Debain安装 Docker 和 Docker Compose
  • gittee使用教学
  • q2-qt-多线程
  • 指针,函数指针,二级指针,指针传参,回调函数,指针步长
  • StringUtils.isEmpty()方法过期的替代方法
  • 智慧电力运维综合辅助监控系统
  • v-model和:model的区别
  • 网络攻击(二)--情报搜集阶段
  • oracle异常:ORA-03297:文件包含在请求的 RESIZE 值以外使用的数据