函数
与其他语言最大的区别是函数变量的变量类型是后置的,示例如下
func add2(a, b int) int { return a + b }
在这里需要先完善一下golang中ok的使用
它是一个用于表示操作是否成功的布尔变量,通常在函数返回值中使用,以指示某个操作是否成功执行,或者在映射(map)中查找键时,用于表示是否找到了对应的值。
而函数的返回值通常有两个
第一个值是真正的返回结果第二个值是错误信息
func exists(m map[string]string, k string) (v string, ok bool) { v, ok = m[k] return v, ok }
指针
golang中指针支持的操作非常有限 常用用途:对参数进行修改
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)//和c中类似需要传地址才能改实参的取值
fmt.Println(n) // 7
}
0
结构体
是带类型的字段的集合,未初始化的结构体是值就是控制,是字符串的话就是空字符串,并且和c,c++一样可以用.操作符对结构体中的成员进行访问
初始化操作如下
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
var d user
d.name = "wang"
d.password = "1024"
作为参数也有指针的用法如下所示
可以进行对结构体的修改也可以减少大结构体对拷贝的开销
type user struct {
name string
password string
}
func checkPassword(u user, password string) bool {
return u.password == password
}
func checkPassword2(u *user, password string) bool {
return u.password == password
}
结构体方法
通过视频学习,并且最近在学习c++总结了c++中的构造函数和glang中的结构体方法之间的异同,仅供参考 在Go语言中,结构体方法和C++中的构造函数在功能和用法上有一些相似之处,但它们并不是完全相同的概念。
相似之处:
-
初始化对象:结构体方法和构造函数都可以用于初始化对象的状态。在Go中,结构体方法可以用于设置结构体字段的值,而在C++中,构造函数用于初始化类的成员变量。
-
方法调用:在Go中,结构体方法通过在结构体实例上使用点号
.来调用,这与C++中通过对象或对象的引用来调用成员函数的方式类似。 不同之处: -
显式构造函数:C++中有显式的构造函数概念,它是一个特殊的成员函数,用于在创建对象时初始化对象的状态。构造函数的名称与类名相同,并且没有返回类型。而在Go中,没有显式的构造函数概念,结构体的初始化通常是通过创建一个新的结构体实例,并直接设置其字段值来完成的。
-
继承和多态:C++中的构造函数在继承和多态中扮演着重要的角色,用于正确地初始化派生类对象。而Go语言不支持继承和多态,结构体方法是基于结构体类型的,不同的结构体类型可以有相同名称的方法,但它们是独立的。
-
内存管理:Go语言中的内存管理是自动的,通过垃圾回收机制来处理。结构体实例的创建和销毁由编译器和运行时系统自动管理。而C++中的内存管理通常需要手动处理,特别是在涉及动态内存分配时。构造函数用于初始化对象,而析构函数用于在对象销毁时释放资源。
小结
Go语言更加强调简洁和直接的语法,而C++则提供了更强大的面向对象特性和更灵活的内存管理。
golang调用方法
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) // true
}
实现结构体方法
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}