avatar
文章
62
标签
33
分类
11
首页
归档
AI
后端
  • Java
  • Go
  • Python
前端
音视频
投资
运维
随笔
分享
Clang's Blog
首页
归档
AI
后端
  • Java
  • Go
  • Python
前端
音视频
投资
运维
随笔
分享

Clang's Blog

【Go编程基础】13-反射reflection
发表于2022-06-27|Go
反射reflection 反射可大大提高程序的灵活性,使得 interface{} 有更大的发挥余地 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 反射会将匿名字段作为独立字段(匿名字段本质) 想要利用反射修改对象状态,前提是 interface.data 是 settable,即 pointer-interface 通过反射可以“动态”调用方法 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647type User struct { Id int Name string Age int}func (u User) Hello() { fmt.Println("Hello world.")}func main() { u := User{1, "OK", 18} Info(u)}func Info(o...
【Go编程基础】12-接口interface
发表于2022-06-26|Go
接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示 声明实现了哪个接口,这称为 Structural Typing 接口只有方法声明,没有实现,没有数据字段 接口可以匿名嵌入其它接口,或嵌入到结构中 将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个 复制品的指针,既无法修改复制品的状态,也无法获取指针 只有当接口存储的类型和对象都为nil时,接口才等于nil 接口调用不会做receiver的自动转换 接口同样支持匿名字段方法 接口也可实现类似OOP中的多态 空接口可以作为任何类型数据的容器 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647type USB interface { Name() string // 嵌入接口 Connecter}type Connecter interface { Connect()}type...
【Go编程基础】11-方法method
发表于2022-06-26|Go
方法method Go 中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的组合 只能为同一个包中的类型定义方法 Receiver 可以是类型的值或者指针 不存在方法重载 可以使用值或指针来调用方法,编译器会自动完成转换 从某种意义上来说,方法是函数的语法糖,因为receiver其实就是 方法所接收的第1个参数(Method Value vs. Method Expression) 如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法 类型别名不会拥有底层类型所附带的方法 方法可以调用结构中的非公开字段 12345678910111213141516171819202122232425262728293031323334type A struct { Name string}type B struct { Name string}func main() { a := A{} a.Print() b :=...
【Go编程基础】10-结构struct
发表于2022-06-26|Go
结构struct Go 中的struct与C中的struct非常相似,并且Go没有class 使用 type struct{} 定义结构,名称遵循可见性规则 支持指向自身的指针类型成员 支持匿名结构,可用作成员或定义成员变量 匿名结构也可以用于map的值 可以使用字面值对结构进行初始化 允许直接通过指针来读写结构成员 相同类型的成员可进行直接拷贝赋值 支持 == 与 !=比较运算符,但不支持 > 或 < 支持匿名字段,本质上是定义了以某个类型名为名称的字段 嵌入结构作为匿名字段看起来像继承,但不是继承 可以使用匿名字段指针 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// 结构是一个值类型type person struct { Name string Age int}func main() { a := person{} a.Name...
【Go编程基础】09-函数function
发表于2022-06-25|Go
函数function Go 函数 不支持 嵌套、重载和默认参数 但支持以下特性: 无需声明原型、不定长度变参、多返回值、命名返回值参数 匿名函数、闭包 定义函数使用关键字 func,且左大括号不能另起一行 函数也可以作为一种类型使用 1234567891011121314151617181920package mainimport "fmt"func main() { fmt.Println(A()) fmt.Println(B())}// 非匿名返回值,a,b,c不需要定义可直接赋值func A() (a, b, c int) { a, b, c = 1, 2, 3 return}// 匿名返回值,return后面需要指定变量名称func B() (int, int, int) { a, b, c := 4, 5, 6 return a, b,...
【Go编程基础】08-map
发表于2022-06-05|Go
map 类似其它语言中的哈希表或者字典,以key-value形式存储数据 Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍_ Map使用make()创建,支持 := 这种简写方式 make([keyType]valueType, cap),cap表示容量,可省略 超出容量时会自动扩容,但尽量提供一个合理的初始值 使用len()获取元素个数 键值对不存在时自动添加,使用delete()删除某键值对 使用 for range 对map和slice进行迭代操作 1234567891011func main() { m := make(map[int]string) m[1]="OK" a := m[1] fmt.Println(a) fmt.Println(m)}输出:OKmap[1:OK] 1234567891011121314151617181920212223func main()...
【Go编程基础】07-切片slice
发表于2022-06-05|Go
切片Slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或从底层数组获取生成 使用len()获取元素个数,cap()获取容量 一般使用make()创建 如果多个slice指向相同底层数组,其中一个的值改变会影响全部 make([]T, len, cap) 其中cap可以省略,则和len的值相同 len表示存数的元素个数,cap表示容量 1234567891011121314151617181920212223242526272829func main() { var s1 []int fmt.Println(s1) a := [10]int{1,2,3,4,5,6,7,8,9,10} s2 := a[9] fmt.Println(s2) s3 := a[5:10] fmt.Println(s3) // 获取数组某个位置开始到结束 s4 := a[3:len(a)] s5 :=...
【Go编程基础】06-数组array
发表于2022-05-27|Go
数组Array 定义数组的格式:var [n],n>=0 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 注意区分指向数组的指针和指针数组 数组在Go中为值类型 数组之间可以使用==或!=进行比较,但不可以使用<或> 可以使用new来创建数组,此方法返回一个指向数组的指针 Go支持多维数组 12345678910111213// 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型var a [3]intvar b [2]intb = a// 上面的赋值语句会报错:cannot use a (variable of type [3]int) as type [2]int in assignment// 下面的语句就能正常赋值成功var a [2]intvar b [2]intb = afmt.Println(b)输出:[0...
【Go编程基础】05-控制语句
发表于2022-05-26|Go
指针 Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针 目标对象的成员 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象 默认值为 nil 而非 NULL 递增递减语句 在Go当中,++ 与 – 是作为语句而并不是作为表达式 判断语句if 条件表达式没有括号 支持一个初始化表达式(可以是并行方式) 左大括号必须和条件语句或else在同一行 支持单行模式 初始化语句中的变量为block级别,同时隐藏外部同名变量 1234567891011121314func main() { a := true if a, b, c := 2, 3, 4; a+b+c > 6 { fmt.Println("大于6") } else...
【Go编程基础】04-常量与运算符
发表于2022-05-25|Go
常量的定义 常量的值在编译时就已经确定 常量的定义格式与变量基本相同 等号右侧必须是常量或者常量表达式 常量表达式中的函数必须是内置函数 123456789101112131415161718192021222324252627package mainimport "fmt"// 定义单个常量const a int = 1const b = 'B'const ( text = "123" length = len(text) num = b * 20)// 同时定义多个变量const i, j, k = 1, "2", '3'const ( text2, length2, num2 = "468", len(text2), k * 10)func main() { fmt.Println(a, b, text, length, num) fmt.Println(i, j, k, text2, length2,...
1…345…7
avatar
Clang
文章
62
标签
33
分类
11
Follow Me
公告
如果尚未看到成果,那是因为付出的努力还不够多,如果尚未梦想成真,那是因为等待的时间还不够久。笑到最后的人永远最精彩,最成功,最执着。
最新文章
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)2025-06-08
AI网址大全
AI网址大全2025-02-16
基于C++线程延迟处理的 ROS 消息逻辑优化
基于C++线程延迟处理的 ROS 消息逻辑优化2024-11-20
使用 Docker 运行 Node.js:无需依赖系统版本,快速切换、环境隔离
使用 Docker 运行 Node.js:无需依赖系统版本,快速切换、环境隔离2024-11-19
Python多进程编程与进程间通信
Python多进程编程与进程间通信2024-11-19
分类
  • AI7
  • Go16
  • Java8
  • Python3
  • ROS8
  • 分享3
  • 前端1
  • 投资1
标签
Mybatis macOS SEO Spring Cache Spring Cloud Hexo iOS 分享 跨域 SaaS 音视频 IDEA Go WordPress 算法 运维 ROS 多租户 Spring Boot 基金 Java FFmpeg MySQL 播放器 Python Vue AI Spring Cloud Gateway Github C++ 随笔 CDN 秒杀
归档
  • 六月 2025 1
  • 二月 2025 1
  • 十一月 2024 6
  • 七月 2024 3
  • 六月 2024 4
  • 五月 2024 6
  • 四月 2024 4
  • 四月 2023 2
网站信息
文章数目 :
62
最后更新时间 :
©2016 - 2025 By Clang
框架 Hexo 6.3.0|主题 Butterfly 5.3.3